Учебники

Teradata — Краткое руководство

Teradata — Введение

Teradata — одна из популярных систем управления реляционными базами данных. Он в основном подходит для создания крупномасштабных приложений хранилищ данных. Teradata достигает этого с помощью концепции параллелизма. Он разработан компанией под названием Teradata.

История Терадата

Ниже приведен краткий обзор истории Teradata с перечислением основных этапов.

  • 1979 — Teradata была включена.

  • 1984 — Выпуск первой базы данных компьютера DBC / 1012.

  • 1986 — журнал Fortune назвал Teradata «Продуктом года».

  • 1999 — Крупнейшая база данных в мире, использующая Teradata с 130 терабайтами.

  • 2002 — выпущена Teradata V2R5 с первичным индексом раздела и сжатием.

  • 2006 — запуск решения для управления основными данными Teradata.

  • 2008 — выпущена Teradata 13.0 с активным хранилищем данных.

  • 2011 — приобретает Teradata Aster и входит в Advanced Analytics Space.

  • 2012 — представлена ​​Teradata 14.0.

  • 2014 — представлена ​​версия Teradata 15.0.

1979 — Teradata была включена.

1984 — Выпуск первой базы данных компьютера DBC / 1012.

1986 — журнал Fortune назвал Teradata «Продуктом года».

1999 — Крупнейшая база данных в мире, использующая Teradata с 130 терабайтами.

2002 — выпущена Teradata V2R5 с первичным индексом раздела и сжатием.

2006 — запуск решения для управления основными данными Teradata.

2008 — выпущена Teradata 13.0 с активным хранилищем данных.

2011 — приобретает Teradata Aster и входит в Advanced Analytics Space.

2012 — представлена ​​Teradata 14.0.

2014 — представлена ​​версия Teradata 15.0.

Особенности Teradata

Ниже приведены некоторые особенности Teradata —

  • Неограниченный параллелизм — система баз данных Teradata основана на архитектуре массовой параллельной обработки (MPP). Архитектура MPP равномерно распределяет рабочую нагрузку по всей системе. Система Teradata распределяет задачу среди своих процессов и запускает их параллельно, чтобы обеспечить быстрое выполнение задачи.

  • Архитектура Shared NothingАрхитектура Teradata называется Архитектурой Shared Nothing. Узлы Teradata, его процессорные модули доступа (AMP) и диски, связанные с AMP, работают независимо. Они не передаются другим.

  • Линейная масштабируемость — системы Teradata обладают высокой масштабируемостью. Они могут масштабироваться до 2048 узлов. Например, вы можете удвоить емкость системы, удвоив количество AMP.

  • Возможность подключения — Teradata может подключаться к системам, подключенным к каналу, таким как мейнфрейм или системы, подключенные к сети.

  • Оптимизатор зрелости — Оптимизатор Teradata является одним из зрелых оптимизаторов на рынке. Он был разработан, чтобы быть параллельным с самого начала. Это было доработано для каждого выпуска.

  • SQL — Teradata поддерживает отраслевой стандарт SQL для взаимодействия с данными, хранящимися в таблицах. В дополнение к этому, он имеет собственное расширение.

  • Надежные утилиты — Teradata предоставляет надежные утилиты для импорта / экспорта данных из / в систему Teradata, такие как FastLoad, MultiLoad, FastExport и TPT.

  • Автоматическое распространение — Teradata автоматически распределяет данные на диски без какого-либо ручного вмешательства.

Неограниченный параллелизм — система баз данных Teradata основана на архитектуре массовой параллельной обработки (MPP). Архитектура MPP равномерно распределяет рабочую нагрузку по всей системе. Система Teradata распределяет задачу среди своих процессов и запускает их параллельно, чтобы обеспечить быстрое выполнение задачи.

Архитектура Shared NothingАрхитектура Teradata называется Архитектурой Shared Nothing. Узлы Teradata, его процессорные модули доступа (AMP) и диски, связанные с AMP, работают независимо. Они не передаются другим.

Линейная масштабируемость — системы Teradata обладают высокой масштабируемостью. Они могут масштабироваться до 2048 узлов. Например, вы можете удвоить емкость системы, удвоив количество AMP.

Возможность подключения — Teradata может подключаться к системам, подключенным к каналу, таким как мейнфрейм или системы, подключенные к сети.

Оптимизатор зрелости — Оптимизатор Teradata является одним из зрелых оптимизаторов на рынке. Он был разработан, чтобы быть параллельным с самого начала. Это было доработано для каждого выпуска.

SQL — Teradata поддерживает отраслевой стандарт SQL для взаимодействия с данными, хранящимися в таблицах. В дополнение к этому, он имеет собственное расширение.

Надежные утилиты — Teradata предоставляет надежные утилиты для импорта / экспорта данных из / в систему Teradata, такие как FastLoad, MultiLoad, FastExport и TPT.

Автоматическое распространение — Teradata автоматически распределяет данные на диски без какого-либо ручного вмешательства.

Teradata — Установка

Teradata предоставляет Teradata express для VMWARE, которая является полностью работающей виртуальной машиной Teradata. Он обеспечивает до 1 терабайта памяти. Teradata предоставляет версию VMware объемом 40 ГБ и 1 ТБ.

Предпосылки

Поскольку виртуальная машина 64-битная, ваш процессор должен поддерживать 64-битную.

Шаги установки для Windows

Шаг 1. Загрузите требуемую версию виртуальной машины по ссылке https://downloads.teradata.com/download/database/teradata-express-for-vmware-player.

Шаг 2 — Извлеките файл и укажите целевую папку.

Шаг 3 — Загрузите проигрыватель VMWare Workstation по ссылке https://my.vmware.com/web/vmware/downloads . Он доступен как для Windows, так и для Linux. Загрузите проигрыватель рабочей станции VMWARE для Windows.

VMWare Workstation player

Шаг 4 — После завершения загрузки установите программное обеспечение.

Шаг 5 — После завершения установки запустите клиент VMWARE.

Шаг 6 — Выберите «Открыть виртуальную машину». Перейдите через извлеченную папку Teradata VMWare и выберите файл с расширением .vmdk.

Открытая виртуальная машина

Шаг 7 — Teradata VMWare добавляется в клиент VMWare. Выберите добавленное Teradata VMware и нажмите «Играть на виртуальной машине».

Играть в виртуальную машину

Шаг 8 — Если вы получаете всплывающее окно с обновлениями программного обеспечения, вы можете выбрать «Напомнить мне позже».

Шаг 9 — Введите имя пользователя как root, нажмите tab, введите пароль как root и снова нажмите Enter.

Добро пожаловать TDExpress

Шаг 10 — Когда на рабочем столе появится следующий экран, дважды щелкните «root’s home». Затем дважды щелкните «Терминал генома». Это откроет Shell.

Открытая оболочка

Шаг 11 — В следующей оболочке введите команду /etc/init.d/tpa start. Это запустит сервер Teradata.

Запустить сервер Teradata

Начиная BTEQ

Утилита BTEQ используется для интерактивной отправки SQL-запросов. Ниже приведены шаги для запуска утилиты BTEQ.

Шаг 1 — Введите команду / sbin / ifconfig и запишите IP-адрес VMWare.

Шаг 2 — Запустите команду bteq. В командной строке введите команду.

Вход <ipaddress> / dbc, dbc; и введите При запросе пароля введите пароль как dbc;

Начиная BTEQ

Вы можете войти в систему Teradata с помощью BTEQ и выполнить любые запросы SQL.

Терадата — Архитектура

Архитектура Teradata основана на архитектуре массовой параллельной обработки (MPP). Основными компонентами Teradata являются механизм синтаксического анализа, BYNET и процессорные модули доступа (AMP). Следующая диаграмма показывает архитектуру высокого уровня узла Teradata.

Teradata Node Architecture

Компоненты Терадата

Ключевые компоненты Teradata следующие:

  • Узел — это базовая единица в системе Teradata. Каждый отдельный сервер в системе Teradata называется узлом. Узел состоит из собственной операционной системы, процессора, памяти, собственной копии программного обеспечения СУБД Teradata и дискового пространства. Шкаф состоит из одного или нескольких узлов.

  • Механизм синтаксического анализа — Механизм синтаксического анализа отвечает за получение запросов от клиента и подготовку эффективного плана выполнения. Обязанности разбора двигателя —

    • Получить запрос SQL от клиента

    • Разбор проверки SQL-запроса на наличие синтаксических ошибок

    • Проверьте, имеет ли пользователь необходимые права доступа к объектам, используемым в запросе SQL.

    • Проверьте, существуют ли объекты, используемые в SQL, на самом деле

    • Подготовьте план выполнения для выполнения запроса SQL и передайте его в BYNET

    • Получает результаты от AMP и отправляет клиенту

  • Уровень передачи сообщений — Уровень передачи сообщений, называемый BYNET, является сетевым уровнем в системе Teradata. Это позволяет осуществлять связь между PE и AMP, а также между узлами. Он получает план выполнения от Parsing Engine и отправляет в AMP. Аналогичным образом он получает результаты от AMP и отправляет их в механизм синтаксического анализа.

  • Процессор модуля доступа (AMP) — AMP, называемые виртуальными процессорами (vprocs), — это те, которые фактически сохраняют и извлекают данные. AMP получают данные и план выполнения от Parsing Engine, выполняют преобразование любых типов данных, агрегирование, фильтрацию, сортировку и сохраняют данные на дисках, связанных с ними. Записи из таблиц равномерно распределяются между AMP в системе. Каждый AMP связан с набором дисков, на которых хранятся данные. Только тот AMP может читать / записывать данные с дисков.

Узел — это базовая единица в системе Teradata. Каждый отдельный сервер в системе Teradata называется узлом. Узел состоит из собственной операционной системы, процессора, памяти, собственной копии программного обеспечения СУБД Teradata и дискового пространства. Шкаф состоит из одного или нескольких узлов.

Механизм синтаксического анализа — Механизм синтаксического анализа отвечает за получение запросов от клиента и подготовку эффективного плана выполнения. Обязанности разбора двигателя —

Получить запрос SQL от клиента

Разбор проверки SQL-запроса на наличие синтаксических ошибок

Проверьте, имеет ли пользователь необходимые права доступа к объектам, используемым в запросе SQL.

Проверьте, существуют ли объекты, используемые в SQL, на самом деле

Подготовьте план выполнения для выполнения запроса SQL и передайте его в BYNET

Получает результаты от AMP и отправляет клиенту

Уровень передачи сообщений — Уровень передачи сообщений, называемый BYNET, является сетевым уровнем в системе Teradata. Это позволяет осуществлять связь между PE и AMP, а также между узлами. Он получает план выполнения от Parsing Engine и отправляет в AMP. Аналогичным образом он получает результаты от AMP и отправляет их в механизм синтаксического анализа.

Процессор модуля доступа (AMP) — AMP, называемые виртуальными процессорами (vprocs), — это те, которые фактически сохраняют и извлекают данные. AMP получают данные и план выполнения от Parsing Engine, выполняют преобразование любых типов данных, агрегирование, фильтрацию, сортировку и сохраняют данные на дисках, связанных с ними. Записи из таблиц равномерно распределяются между AMP в системе. Каждый AMP связан с набором дисков, на которых хранятся данные. Только тот AMP может читать / записывать данные с дисков.

Архитектура хранения

Когда клиент выполняет запросы для вставки записей, механизм синтаксического анализа отправляет записи в BYNET. BYNET извлекает записи и отправляет строку в целевой AMP. AMP хранит эти записи на своих дисках. Следующая диаграмма показывает архитектуру хранения Teradata.

Архитектура хранения

Архитектура поиска

Когда клиент выполняет запросы для извлечения записей, механизм синтаксического анализа отправляет запрос в BYNET. BYNET отправляет запрос на поиск соответствующим AMP. Затем AMP выполняют поиск на своих дисках параллельно, идентифицируют необходимые записи и отправляют в BYNET. Затем BYNET отправляет записи в Parsing Engine, который, в свою очередь, отправляет клиенту. Ниже приводится поисковая архитектура Teradata.

Архитектура поиска

Teradata — реляционные концепции

Система управления реляционными базами данных (RDBMS) — это программное обеспечение СУБД, которое помогает взаимодействовать с базами данных. Они используют язык структурированных запросов (SQL) для взаимодействия с данными, хранящимися в таблицах.

База данных

База данных представляет собой набор логически связанных данных. К ним обращаются многие пользователи для разных целей. Например, база данных продаж содержит всю информацию о продажах, которая хранится во многих таблицах.

таблицы

Таблицы — это базовая единица в РСУБД, где хранятся данные. Таблица представляет собой набор строк и столбцов. Ниже приведен пример таблицы сотрудников.

Сотрудник № Имя Фамилия Дата рождения
101 Майк Джеймс 1/5/1980
104 Alex Стюарт 11/6/1984
102 Роберт Williams 3/5/1983
105 Роберт Джеймс 12/1/1984
103 Питер Павел 4/1/1983

Колонны

Столбец содержит аналогичные данные. Например, столбец BirthDate в таблице Employee содержит информацию birth_date для всех сотрудников.

Дата рождения
1/5/1980
11/6/1984
3/5/1983
12/1/1984
4/1/1983

Строка

Строка — это один экземпляр всех столбцов. Например, в таблице сотрудников одна строка содержит информацию об одном сотруднике.

Сотрудник № Имя Фамилия Дата рождения
101 Майк Джеймс 1/5/1980

Основной ключ

Первичный ключ используется для уникальной идентификации строки в таблице. В столбце первичного ключа недопустимы повторяющиеся значения, и они не могут принимать значения NULL. Это обязательное поле в таблице.

Иностранный ключ

Внешние ключи используются для построения отношений между таблицами. Внешний ключ в дочерней таблице определяется как первичный ключ в родительской таблице. Таблица может иметь более одного внешнего ключа. Он может принимать повторяющиеся значения, а также нулевые значения. Внешние ключи необязательны в таблице.

Teradata — Типы данных

Каждый столбец в таблице связан с типом данных. Типы данных определяют, какие значения будут храниться в столбце. Teradata поддерживает несколько типов данных. Ниже приведены некоторые из часто используемых типов данных.

Типы данных Длина (байт) Диапазон значений
BYTEINT 1 От -128 до +127
SMALLINT 2 От -32768 до +32767
INTEGER 4 От -2 147 483 648 до + 2147 483 647
BIGINT 8 От -9,233,372,036,854,775,80 до +9,233,372,036,854,775,8 07
ДЕСЯТИЧНЫЙ 1-16
NUMERIC 1-16
FLOAT 8 Формат IEEE
CHAR Фиксированный формат 1-64,000
VARCHAR переменная 1-64,000
ДАТА 4 YYYYYMMDD
ВРЕМЯ 6 или 8 ЧЧММСС.нннннн или ЧЧММСС.нннннн + ЧЧММ
TIMESTAMP 10 или 12 ГГММДДЧЧММСС.нннннн или ГГММДДЧЧММСС.нннннн + ЧЧММ

Терадата — Столы

Таблицы в реляционной модели определяются как сбор данных. Они представлены в виде строк и столбцов.

Типы столов

Типы Teradata поддерживает различные типы таблиц.

  • Постоянная таблица — это таблица по умолчанию, которая содержит данные, вставленные пользователем, и постоянно хранит данные.

  • Таблица изменчивости — данные, вставленные в таблицу изменчивости, сохраняются только во время сеанса пользователя. Таблица и данные удаляются в конце сеанса. Эти таблицы в основном используются для хранения промежуточных данных во время преобразования данных.

  • Глобальная временная таблица — определение глобальной временной таблицы является постоянным, но данные в таблице удаляются в конце сеанса пользователя.

  • Производная таблица — Производная таблица содержит промежуточные результаты в запросе. Их время жизни находится в пределах запроса, в котором они создаются, используются и удаляются.

Постоянная таблица — это таблица по умолчанию, которая содержит данные, вставленные пользователем, и постоянно хранит данные.

Таблица изменчивости — данные, вставленные в таблицу изменчивости, сохраняются только во время сеанса пользователя. Таблица и данные удаляются в конце сеанса. Эти таблицы в основном используются для хранения промежуточных данных во время преобразования данных.

Глобальная временная таблица — определение глобальной временной таблицы является постоянным, но данные в таблице удаляются в конце сеанса пользователя.

Производная таблица — Производная таблица содержит промежуточные результаты в запросе. Их время жизни находится в пределах запроса, в котором они создаются, используются и удаляются.

Set Versus Multiset

Teradata классифицирует таблицы как таблицы SET или MULTISET в зависимости от того, как обрабатываются дубликаты записей. Таблица, определенная как таблица SET, не хранит дублирующиеся записи, тогда как таблица MULTISET может хранить дублирующиеся записи.

Sr.No Команды таблицы и описание
1 Создать таблицу

Команда CREATE TABLE используется для создания таблиц в Teradata.

2 Изменить таблицу

Команда ALTER TABLE используется для добавления или удаления столбцов из существующей таблицы.

3 Drop Table

Команда DROP TABLE используется для удаления таблицы.

Команда CREATE TABLE используется для создания таблиц в Teradata.

Команда ALTER TABLE используется для добавления или удаления столбцов из существующей таблицы.

Команда DROP TABLE используется для удаления таблицы.

Teradata — манипулирование данными

В этой главе представлены команды SQL, используемые для манипулирования данными, хранящимися в таблицах Teradata.

Вставить записи

Оператор INSERT INTO используется для вставки записей в таблицу.

Синтаксис

Ниже приведен общий синтаксис INSERT INTO.

INSERT INTO <tablename> 
(column1, column2, column3,…) 
VALUES 
(value1, value2, value3 …);

пример

В следующем примере вставляются записи в таблицу сотрудников.

INSERT INTO Employee (
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
)
VALUES ( 
   101, 
   'Mike', 
   'James', 
   '1980-01-05', 
   '2005-03-27', 
   01
);

После вставки вышеуказанного запроса вы можете использовать оператор SELECT для просмотра записей из таблицы.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980

Вставить из другой таблицы

Оператор INSERT SELECT используется для вставки записей из другой таблицы.

Синтаксис

Ниже приведен общий синтаксис INSERT INTO.

INSERT INTO <tablename> 
(column1, column2, column3,…) 
SELECT 
column1, column2, column3… 
FROM  
<source table>;

пример

В следующем примере вставляются записи в таблицу сотрудников. Создайте таблицу с именем Employee_Bkup с тем же определением столбца, что и у таблицы employee, перед выполнением следующего запроса вставки.

INSERT INTO Employee_Bkup ( 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
) 
SELECT 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate,
   DepartmentNo 
FROM  
   Employee;

Когда вышеуказанный запрос будет выполнен, он вставит все записи из таблицы employee в таблицу employee_bkup.

правила

  • Количество столбцов, указанное в списке VALUES, должно соответствовать столбцам, указанным в предложении INSERT INTO.

  • Значения обязательны для столбцов NOT NULL.

  • Если значения не указаны, то для пустых полей вставляется NULL.

  • Типы данных столбцов, указанные в предложении VALUES, должны быть совместимы с типами данных столбцов в предложении INSERT.

Количество столбцов, указанное в списке VALUES, должно соответствовать столбцам, указанным в предложении INSERT INTO.

Значения обязательны для столбцов NOT NULL.

Если значения не указаны, то для пустых полей вставляется NULL.

Типы данных столбцов, указанные в предложении VALUES, должны быть совместимы с типами данных столбцов в предложении INSERT.

Обновить записи

Оператор UPDATE используется для обновления записей из таблицы.

Синтаксис

Ниже приводится общий синтаксис для UPDATE.

UPDATE <tablename> 
SET <columnnamme> = <new value> 
[WHERE condition];

пример

В следующем примере обновляется отдел сотрудника до 03 для сотрудника 101.

UPDATE Employee 
SET DepartmentNo = 03 
WHERE EmployeeNo = 101;

В следующем выводе вы видите, что DepartmentNo обновлен с 1 до 3 для EmployeeNo 101.

SELECT Employeeno, DepartmentNo FROM Employee; 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
EmployeeNo    DepartmentNo 
-----------  ------------- 
   101             3 

правила

  • Вы можете обновить одно или несколько значений таблицы.

  • Если условие WHERE не указано, то затрагиваются все строки таблицы.

  • Вы можете обновить таблицу значениями из другой таблицы.

Вы можете обновить одно или несколько значений таблицы.

Если условие WHERE не указано, то затрагиваются все строки таблицы.

Вы можете обновить таблицу значениями из другой таблицы.

Удалить записи

Оператор DELETE FROM используется для обновления записей из таблицы.

Синтаксис

Ниже приведен общий синтаксис для DELETE FROM.

DELETE FROM  <tablename> 
[WHERE condition];

пример

В следующем примере удаляется сотрудник 101 из таблицы employee.

DELETE FROM Employee 
WHERE EmployeeNo = 101;

В следующем выводе вы можете видеть, что сотрудник 101 удален из таблицы.

SELECT EmployeeNo FROM Employee;  
*** Query completed. No rows found. 
*** Total elapsed time was 1 second. 

правила

  • Вы можете обновить одну или несколько записей таблицы.

  • Если условие WHERE не указано, удаляются все строки таблицы.

  • Вы можете обновить таблицу значениями из другой таблицы.

Вы можете обновить одну или несколько записей таблицы.

Если условие WHERE не указано, удаляются все строки таблицы.

Вы можете обновить таблицу значениями из другой таблицы.

Teradata — оператор SELECT

Оператор SELECT используется для извлечения записей из таблицы.

Синтаксис

Ниже приведен основной синтаксис оператора SELECT.

SELECT 
column 1, column 2, ..... 
FROM  
tablename;

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984

Ниже приведен пример инструкции SELECT.

SELECT EmployeeNo,FirstName,LastName 
FROM Employee;

Когда этот запрос выполняется, он выбирает столбцы EmployeeNo, FirstName и LastName из таблицы employee.

 EmployeeNo            FirstName                       LastName 
-----------  ------------------------------  --------------------------- 
   101                   Mike                            James 
   104                   Alex                            Stuart 
   102                   Robert                          Williams 
   105                   Robert                          James 
   103                   Peter                           Paul

Если вы хотите извлечь все столбцы из таблицы, вы можете использовать следующую команду вместо перечисления всех столбцов.

SELECT * FROM Employee;

Приведенный выше запрос извлечет все записи из таблицы сотрудников.

ГДЕ оговорка

Предложение WHERE используется для фильтрации записей, возвращаемых оператором SELECT. Условие связано с предложением WHERE. Только те записи, которые удовлетворяют условию в предложении WHERE, возвращаются.

Синтаксис

Ниже приводится синтаксис оператора SELECT с предложением WHERE.

SELECT * FROM tablename 
WHERE[condition];

пример

Следующий запрос извлекает записи, где EmployeeNo равен 101.

SELECT * FROM Employee 
WHERE EmployeeNo = 101;

Когда этот запрос выполняется, он возвращает следующие записи.

 EmployeeNo          FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
   101                 Mike                           James 

СОРТИРОВАТЬ ПО

Когда выполняется инструкция SELECT, возвращаемые строки не имеют определенного порядка. Предложение ORDER BY используется для упорядочения записей в порядке возрастания / убывания по любым столбцам.

Синтаксис

Ниже приводится синтаксис оператора SELECT с предложением ORDER BY.

SELECT * FROM tablename 
ORDER BY column 1, column 2..;

пример

Следующий запрос извлекает записи из таблицы сотрудников и упорядочивает результаты по FirstName.

SELECT * FROM Employee 
ORDER BY FirstName;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

 EmployeeNo         FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
    104               Alex                           Stuart 
    101               Mike                           James 
    103               Peter                          Paul 
    102               Robert                         Williams 
    105               Robert                         James 

ГРУППА ПО

Предложение GROUP BY используется вместе с оператором SELECT и объединяет похожие записи в группы.

Синтаксис

Ниже приводится синтаксис оператора SELECT с предложением GROUP BY.

SELECT column 1, column2 …. FROM tablename 
GROUP BY column 1, column 2..;

пример

В следующем примере группируются записи по столбцу DepartmentNo и указывается общее количество для каждого отдела.

SELECT DepartmentNo,Count(*) FROM   
Employee 
GROUP BY DepartmentNo;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

 DepartmentNo    Count(*) 
------------  ----------- 
     3             1 
     1             1 
     2             3 

Teradata — логические и условные операторы

Teradata поддерживает следующие логические и условные операторы. Эти операторы используются для сравнения и объединения нескольких условий.

Синтаксис Имея в виду
> Лучше чем
< Меньше, чем
> = Больше или равно
<= Меньше или равно
знак равно Равно
МЕЖДУ Если значения в пределах диапазона
В Если значения в <выражение>
НЕ В Если значения не в <выражение>
НУЛЕВОЙ Если значение равно NULL
НЕ НУЛЬ Если значение НЕ NULL
А ТАКЖЕ Объедините несколько условий. Оценивается как истинное, только если выполнены все условия
ИЛИ ЖЕ Объедините несколько условий. Оценивается как истинное, только если выполняется одно из условий.
НЕ Меняет смысл условия

МЕЖДУ

Команда BETWEEN используется для проверки, находится ли значение в диапазоне значений.

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984

В следующем примере извлекаются записи с номерами сотрудников в диапазоне от 101,102 до 103.

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo BETWEEN 101 AND 103;

Когда вышеуказанный запрос выполняется, он возвращает записи о сотрудниках с сотрудником № от 101 до 103.

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

В

Команда IN используется для проверки значения по заданному списку значений.

пример

В следующем примере извлекаются записи с номерами сотрудников в 101, 102 и 103.

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo in (101,102,103);

Приведенный выше запрос возвращает следующие записи.

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

НЕ В

Команда NOT IN отменяет результат команды IN. Он извлекает записи со значениями, которые не соответствуют заданному списку.

пример

В следующем примере извлекаются записи с номерами сотрудников не в 101, 102 и 103.

SELECT * FROM  
Employee 
WHERE EmployeeNo not in (101,102,103);

Приведенный выше запрос возвращает следующие записи.

*** Query completed. 2 rows found. 6 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo          FirstName                      LastName 
----------- ------------------------------ -----------------------------    
    104                Alex                          Stuart 
    105                Robert                        James 

Teradata — операторы SET

Операторы SET объединяют результаты нескольких операторов SELECT. Это может выглядеть аналогично объединениям, но объединения объединяют столбцы из нескольких таблиц, тогда как операторы SET объединяют строки из нескольких строк.

правила

  • Количество столбцов в каждом операторе SELECT должно быть одинаковым.

  • Типы данных из каждого SELECT должны быть совместимы.

  • ORDER BY должен быть включен только в окончательный оператор SELECT.

Количество столбцов в каждом операторе SELECT должно быть одинаковым.

Типы данных из каждого SELECT должны быть совместимы.

ORDER BY должен быть включен только в окончательный оператор SELECT.

UNION

Оператор UNION используется для объединения результатов нескольких операторов SELECT. Это игнорирует дубликаты.

Синтаксис

Ниже приведен основной синтаксис оператора UNION.

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION  

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

пример

Рассмотрим следующую таблицу сотрудников и таблицу зарплат.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984
Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Следующий запрос UNION объединяет значение EmployeeNo из таблицы Employee и Salary.

SELECT EmployeeNo 
FROM  
Employee 
UNION 

SELECT EmployeeNo 
FROM  
Salary;

Когда запрос выполняется, он производит следующий вывод.

EmployeeNo 
----------- 
   101 
   102 
   103 
   104 
   105

СОЮЗ ВСЕХ

Оператор UNION ALL похож на оператор UNION, он объединяет результаты из нескольких таблиц, включая повторяющиеся строки.

Синтаксис

Ниже приведен основной синтаксис оператора UNION ALL.

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION ALL 

SELECT col1, col2, col3…
FROM  
<table 2> 
[WHERE condition];

пример

Ниже приведен пример для оператора UNION ALL.

SELECT EmployeeNo 
FROM  
Employee 
UNION ALL 

SELECT EmployeeNo 
FROM  
Salary;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Вы можете видеть, что он также возвращает дубликаты.

 EmployeeNo 
----------- 
    101 
    104 
    102 
    105 
    103 
    101 
    104 
    102 
    103

ПЕРЕСЕЧЕНИЕ

Команда INTERSECT также используется для объединения результатов из нескольких операторов SELECT. Он возвращает строки из первого оператора SELECT, который имеет соответствующее совпадение во втором операторе SELECT. Другими словами, он возвращает строки, которые существуют в обоих инструкциях SELECT.

Синтаксис

Ниже приведен основной синтаксис оператора INTERSECT.

SELECT col1, col2, col3… 
FROM  
<table 1>
[WHERE condition] 
INTERSECT 

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

пример

Ниже приведен пример оператора INTERSECT. Он возвращает значения EmployeeNo, которые существуют в обеих таблицах.

SELECT EmployeeNo 
FROM  
Employee 
INTERSECT 

SELECT EmployeeNo 
FROM  
Salary; 

Когда вышеуказанный запрос выполняется, он возвращает следующие записи. EmployeeNo 105 исключен, поскольку он не существует в таблице SALARY.

EmployeeNo 
----------- 
   101 
   104 
   102 
   103 

МИНУС / КРОМЕ

Команды MINUS / EXCEPT объединяют строки из нескольких таблиц и возвращают строки, которые находятся в первом SELECT, но не во втором SELECT. Они оба возвращают одинаковые результаты.

Синтаксис

Ниже приведен основной синтаксис оператора MINUS.

SELECT col1, col2, col3 
FROM  
<table 1> 
[WHERE condition] 
MINUS 

SELECT col1, col2, col3 
FROM  
<table 2> 
[WHERE condition];

пример

Ниже приведен пример оператора MINUS.

SELECT EmployeeNo 
FROM  
Employee 
MINUS 

SELECT EmployeeNo 
FROM  
Salary;

Когда этот запрос выполняется, он возвращает следующую запись.

EmployeeNo 
----------- 
   105 

Teradata — Манипулирование строками

Teradata предоставляет несколько функций для управления строками. Эти функции совместимы со стандартом ANSI.

Sr.No Функция и описание строки
1 ||

Объединяет строки вместе

2 SUBSTR

Извлекает часть строки (расширение Teradata)

3 SUBSTRING

Извлекает часть строки (стандарт ANSI)

4 ИНДЕКС

Находит позицию символа в строке (расширение Teradata)

5 ПОЗИЦИЯ

Находит позицию символа в строке (стандарт ANSI)

6 ОТДЕЛКА

Обрезает заготовки из струны

7 ВЕРХНИЙ

Преобразует строку в верхний регистр

8 НИЖНИЙ

Преобразует строку в нижний регистр

Объединяет строки вместе

Извлекает часть строки (расширение Teradata)

Извлекает часть строки (стандарт ANSI)

Находит позицию символа в строке (расширение Teradata)

Находит позицию символа в строке (стандарт ANSI)

Обрезает заготовки из струны

Преобразует строку в верхний регистр

Преобразует строку в нижний регистр

пример

В следующей таблице перечислены некоторые строковые функции с результатами.

Строковая функция Результат
ВЫБЕРИТЕ ПОДПИСЬ («склад» ОТ 1 ЗА 4) изделия
SELECT SUBSTR («склад», 1,4) изделия
ВЫБЕРИТЕ «данные» || » || ‘склад’ хранилище данных
ВЫБЕРИТЕ ВЕРХНИЙ («данные») ДАННЫЕ
ВЫБЕРИТЕ НИЖЕ («ДАННЫЕ») данные

Teradata — Дата / Время Функции

В этой главе рассматриваются функции даты и времени, доступные в Teradata.

Дата Хранения

Даты хранятся в виде целого числа внутри, используя следующую формулу.

((YEAR - 1900) * 10000) + (MONTH * 100) + DAY

Вы можете использовать следующий запрос, чтобы проверить, как хранятся даты.

SELECT CAST(CURRENT_DATE AS INTEGER);

Поскольку даты хранятся как целые числа, вы можете выполнять над ними некоторые арифметические операции. Teradata предоставляет функции для выполнения этих операций.

ВЫПИСКА

Функция EXTRACT извлекает части дня, месяца и года из значения DATE. Эта функция также используется для извлечения часа, минуты и секунды из значения TIME / TIMESTAMP.

пример

В следующих примерах показано, как извлечь значения Год, Месяц, Дата, Час, Минута и секунды из значений Дата и Отметка времени.

SELECT EXTRACT(YEAR FROM CURRENT_DATE);  
EXTRACT(YEAR FROM Date) 
----------------------- 
        2016  
SELECT EXTRACT(MONTH FROM CURRENT_DATE);  
EXTRACT(MONTH FROM Date) 
------------------------ 
          1        
SELECT EXTRACT(DAY FROM CURRENT_DATE);  
EXTRACT(DAY FROM Date) 
------------------------ 
          1    
       
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP);  
EXTRACT(HOUR FROM Current TimeStamp(6)) 
--------------------------------------- 
                 4      
SELECT EXTRACT(MINUTE FROM CURRENT_TIMESTAMP);  
EXTRACT(MINUTE FROM Current TimeStamp(6)) 
----------------------------------------- 
                 54  
SELECT EXTRACT(SECOND FROM CURRENT_TIMESTAMP);  
EXTRACT(SECOND FROM Current TimeStamp(6)) 
----------------------------------------- 
              27.140000

ИНТЕРВАЛ

Teradata предоставляет функцию INTERVAL для выполнения арифметических операций со значениями DATE и TIME. Есть два типа ИНТЕРВАЛЬНЫХ функций.

Год-Месяц Интервал

  • ГОД
  • ГОД В МЕСЯЦ
  • МЕСЯЦ

Дневной интервал

  • ДЕНЬ
  • ДЕНЬ ЧАСОВ
  • ДЕНЬ В МИНУТУ
  • ДЕНЬ ВТОРОЙ
  • ЧАС
  • ЧАС МИНУТ
  • ЧАС ВТОРОГО
  • МИНУТЫ
  • МИНУТА ВТОРОГО
  • ВТОРОЙ

пример

Следующий пример добавляет 3 года к текущей дате.

SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03' YEAR; 
  Date    (Date+ 3) 
--------  --------- 
16/01/01   19/01/01

Следующий пример добавляет 3 года и 01 месяц к текущей дате.

SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03-01' YEAR TO MONTH; 
 Date     (Date+ 3-01) 
--------  ------------ 
16/01/01    19/02/01

В следующем примере добавляется 01 день, 05 часов и 10 минут к текущей отметке времени.

SELECT CURRENT_TIMESTAMP,CURRENT_TIMESTAMP + INTERVAL '01 05:10' DAY TO MINUTE; 
     Current TimeStamp(6)         (Current TimeStamp(6)+ 1 05:10) 
--------------------------------  -------------------------------- 
2016-01-01 04:57:26.360000+00:00  2016-01-02 10:07:26.360000+00:00

Teradata — встроенные функции

Teradata предоставляет встроенные функции, которые являются расширениями для SQL. Ниже приведены общие встроенные функции.

функция Результат
ВЫБЕРИТЕ ДАТУ; Дата
———
16/01/01
SELECT CURRENT_DATE; Дата
———
16/01/01
ВЫБЕРИТЕ ВРЕМЯ; Время
———
4:50:29
SELECT CURRENT_TIME; Время
———
4:50:29
SELECT CURRENT_TIMESTAMP; Текущее время (6)
———————————
2016-01-01 04: 51: 06.990000 + 00: 00
ВЫБЕРИТЕ БАЗУ ДАННЫХ; База данных
——————————
TDUSER

Teradata — Совокупные функции

Teradata поддерживает общие агрегатные функции. Их можно использовать с оператором SELECT.

  • COUNT — считает строки

  • SUM — Суммирует значения указанных столбцов

  • MAX — возвращает большое значение указанного столбца

  • MIN — возвращает минимальное значение указанного столбца

  • AVG — возвращает среднее значение указанного столбца

COUNT — считает строки

SUM — Суммирует значения указанных столбцов

MAX — возвращает большое значение указанного столбца

MIN — возвращает минимальное значение указанного столбца

AVG — возвращает среднее значение указанного столбца

пример

Рассмотрим следующую таблицу зарплат.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
104 75000 5000 70000
102 80000 6000 74000
105 70000 4000 66000
103 90000 7000 83000

COUNT

В следующем примере подсчитывается количество записей в таблице Salary.

SELECT count(*) from Salary;  

  Count(*) 
----------- 
    5 

МАКСИМУМ

В следующем примере возвращается максимальная чистая заработная плата сотрудника.

SELECT max(NetPay) from Salary;   
   Maximum(NetPay) 
--------------------- 
       83000 

MIN

В следующем примере возвращается минимальная чистая зарплата сотрудника из таблицы зарплат.

SELECT min(NetPay) from Salary;   

   Minimum(NetPay) 
--------------------- 
        36000

AVG

В следующем примере возвращается среднее значение чистой заработной платы сотрудников из таблицы.

SELECT avg(NetPay) from Salary; 
  
   Average(NetPay) 
--------------------- 
       65800 

SUM

В следующем примере вычисляется сумма чистого оклада сотрудников по всем записям таблицы зарплат.

SELECT sum(NetPay) from Salary;
  
   Sum(NetPay) 
----------------- 
     329000

Teradata — CASE и COALESCE

В этой главе описываются функции CASE и COALESCE Teradata.

CASE Expression

Выражение CASE сравнивает каждую строку с условием или предложением WHEN и возвращает результат первого совпадения. Если совпадений нет, возвращается результат из ELSE.

Синтаксис

Ниже приводится синтаксис выражения CASE.

CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 

ELSE  
   Result-n 
END

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984

В следующем примере оценивается столбец DepartmentNo и возвращается значение 1, если номер отдела равен 1; возвращает 2, если номер отдела равен 3; в противном случае он возвращает значение как неверный отдел.

SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee; 

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo    Department 
-----------   ------------ 
   101         Admin 
   104         IT 
   102         IT 
   105         Invalid Dept 
   103         IT

Вышеупомянутое выражение CASE также может быть записано в следующей форме, которая даст тот же результат, что и выше.

SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee;

COALESCE

COALESCE — это оператор, который возвращает первое ненулевое значение выражения. Возвращает NULL, если все аргументы выражения оцениваются как NULL. Ниже приводится синтаксис.

Синтаксис

COALESCE(expression 1, expression 2, ....) 

пример

SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee;

NULLIF

Инструкция NULLIF возвращает NULL, если аргументы равны.

Синтаксис

Ниже приводится синтаксис оператора NULLIF.

NULLIF(expression 1, expression 2) 

пример

В следующем примере возвращается NULL, если значение DepartmentNo равно 3. В противном случае возвращается значение DepartmentNo.

SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee;

Приведенный выше запрос возвращает следующие записи. Вы можете видеть, что у сотрудника 105 есть отдел №. как NULL.

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo      department 
-----------  ------------------ 
    101              1 
    104              2 
    102              2 
    105              ? 
    103              2

Teradata — первичный индекс

Первичный индекс используется, чтобы указать, где данные находятся в Teradata. Он используется для указания того, какой AMP получает строку данных. Каждая таблица в Teradata должна иметь определенный первичный индекс. Если первичный индекс не определен, Teradata автоматически назначает первичный индекс. Первичный индекс обеспечивает самый быстрый способ доступа к данным. Основной может иметь максимум 64 столбца.

Первичный индекс определяется при создании таблицы. Есть 2 типа первичных индексов.

  • Уникальный первичный индекс (UPI)
  • Неуникальный первичный индекс (NUPI)

Уникальный первичный индекс (UPI)

Если в таблице определено наличие UPI, то в столбце, который считается UPI, не должно быть повторяющихся значений. Если будут введены какие-либо повторяющиеся значения, они будут отклонены.

Создать уникальный первичный индекс

В следующем примере создается таблица зарплаты со столбцом EmployeeNo в качестве уникального первичного индекса.

CREATE SET TABLE Salary ( 
   EmployeeNo INTEGER, 
   Gross INTEGER,  
   Deduction INTEGER, 
   NetPay INTEGER 
) 
UNIQUE PRIMARY INDEX(EmployeeNo);

Неуникальный первичный индекс (NUPI)

Если определено, что таблица имеет NUPI, то столбец, рассматриваемый как UPI, может принимать повторяющиеся значения.

Создать неуникальный первичный индекс

В следующем примере создается таблица счетов сотрудников со столбцом EmployeeNo в качестве Неуникального первичного индекса. EmployeeNo определяется как неуникальный первичный индекс, поскольку сотрудник может иметь несколько учетных записей в таблице; один для счета заработной платы и другой для счета возмещения.

CREATE SET TABLE Employee _Accounts ( 
   EmployeeNo INTEGER, 
   employee_bank_account_type BYTEINT. 
   employee_bank_account_number INTEGER, 
   employee_bank_name VARCHAR(30), 
   employee_bank_city VARCHAR(30) 
) 
PRIMARY INDEX(EmployeeNo);

Teradata — Joins

Объединение используется для объединения записей из более чем одной таблицы. Таблицы объединяются на основе общих столбцов / значений из этих таблиц.

Существуют разные типы соединений.

  • Внутреннее соединение
  • Левое внешнее соединение
  • Правое внешнее соединение
  • Полное внешнее соединение
  • Самостоятельное присоединение
  • Перекрестное соединение
  • Декартово-Производственное Объединение

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Внутреннее объединение объединяет записи из нескольких таблиц и возвращает значения, которые существуют в обеих таблицах.

Синтаксис

Ниже приводится синтаксис оператора INNER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

пример

Рассмотрим следующую таблицу сотрудников и таблицу зарплат.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984
Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Следующий запрос объединяет таблицу Employee и таблицу Salary в общем столбце EmployeeNo. Каждой таблице присваивается псевдоним A и B, а столбцы имеют правильный псевдоним.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
INNER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo);

Когда вышеуказанный запрос выполняется, он возвращает следующие записи. Сотрудник 105 не включен в результат, поскольку у него нет соответствующих записей в таблице зарплаты.

*** Query completed. 4 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo   DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1            36000 
    102           2            74000 
    103           2            83000 
    104           2            70000

НАРУЖНОЕ СОЕДИНЕНИЕ

LEFT OUTER JOIN и RIGHT OUTER JOIN также объединяют результаты из нескольких таблиц.

  • LEFT OUTER JOIN возвращает все записи из левой таблицы и возвращает только совпадающие записи из правой таблицы.

  • RIGHT OUTER JOIN возвращает все записи из правой таблицы и возвращает только совпадающие строки из левой таблицы.

  • ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ объединяет результаты как ЛЕВЫХ ВНЕШНИХ, так и ПРАВИЛЬНЫХ ВНЕШНИХ СОЕДИНЕНИЙ. Он возвращает как совпадающие, так и не совпадающие строки из соединенных таблиц.

LEFT OUTER JOIN возвращает все записи из левой таблицы и возвращает только совпадающие записи из правой таблицы.

RIGHT OUTER JOIN возвращает все записи из правой таблицы и возвращает только совпадающие строки из левой таблицы.

ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ объединяет результаты как ЛЕВЫХ ВНЕШНИХ, так и ПРАВИЛЬНЫХ ВНЕШНИХ СОЕДИНЕНИЙ. Он возвращает как совпадающие, так и не совпадающие строки из соединенных таблиц.

Синтаксис

Ниже приводится синтаксис оператора OUTER JOIN. Вам необходимо использовать один из вариантов: ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ или ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ.

SELECT col1, col2, col3…. 
FROM  
Table-1 
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

пример

Рассмотрим следующий пример запроса LEFT OUTER JOIN. Он возвращает все записи из таблицы Employee и соответствующие записи из таблицы Salary.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo; 

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Для сотрудника 105 значение NetPay равно NULL, поскольку в таблице зарплат нет соответствующих записей.

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1           36000 
    102           2           74000 
    103           2           83000 
    104           2           70000 
    105           3             ?

CROSS JOIN

Перекрестное соединение соединяет каждую строку из левой таблицы с каждой строкой из правой таблицы.

Синтаксис

Ниже приведен синтаксис оператора CROSS JOIN.

SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay 
FROM  
Employee A 
CROSS JOIN 
Salary B 
WHERE A.EmployeeNo = 101 
ORDER BY B.EmployeeNo;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Сотрудник № 101 из таблицы Employee объединяется с каждой записью из таблицы Salary.

*** Query completed. 4 rows found. 4 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo   EmployeeNo    NetPay 
-----------  ------------  -----------  ----------- 
    101           1            101         36000 
    101           1            104         70000 
    101           1            102         74000 
    101           1            103         83000

Teradata — подзапросы

Подзапрос возвращает записи из одной таблицы на основе значений из другой таблицы. Это запрос SELECT в другом запросе. Запрос SELECT, вызываемый как внутренний запрос, выполняется первым, а результат используется внешним запросом. Некоторые из его характерных особенностей —

  • Запрос может иметь несколько подзапросов, а подзапросы могут содержать другой подзапрос.

  • Подзапросы не возвращают дубликаты записей.

  • Если подзапрос возвращает только одно значение, вы можете использовать оператор =, чтобы использовать его с внешним запросом. Если он возвращает несколько значений, вы можете использовать IN или NOT IN.

Запрос может иметь несколько подзапросов, а подзапросы могут содержать другой подзапрос.

Подзапросы не возвращают дубликаты записей.

Если подзапрос возвращает только одно значение, вы можете использовать оператор =, чтобы использовать его с внешним запросом. Если он возвращает несколько значений, вы можете использовать IN или NOT IN.

Синтаксис

Ниже приводится общий синтаксис подзапросов.

SELECT col1, col2, col3,… 
FROM  
Outer Table 
WHERE col1 OPERATOR ( Inner SELECT Query);

пример

Рассмотрим следующую таблицу зарплат.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Следующий запрос определяет номер сотрудника с самой высокой зарплатой. Внутренний SELECT выполняет функцию агрегирования для возврата максимального значения NetPay, а внешний запрос SELECT использует это значение для возврата записи сотрудника с этим значением.

SELECT EmployeeNo, NetPay 
FROM Salary 
WHERE NetPay =  
(SELECT MAX(NetPay)  
FROM Salary);

Когда этот запрос выполняется, он производит следующий вывод.

*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo     NetPay 
-----------  ----------- 
    103         83000 

Teradata — Типы таблиц

Teradata поддерживает следующие типы таблиц для хранения временных данных.

  • Производная таблица
  • Летучий стол
  • Глобальная временная таблица

Производная таблица

Производные таблицы создаются, используются и удаляются в запросе. Они используются для хранения промежуточных результатов в запросе.

пример

В следующем примере строится производная таблица EmpSal с записями сотрудников с зарплатой более 75000.

SELECT 
Emp.EmployeeNo, 
Emp.FirstName, 
Empsal.NetPay 
FROM 
Employee Emp, 
(select EmployeeNo , NetPay 
from Salary
where NetPay >= 75000) Empsal 
where Emp.EmployeeNo = Empsal.EmployeeNo;

Когда вышеуказанный запрос выполняется, он возвращает сотрудников с зарплатой, превышающей 75000.

*** Query completed. One row found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName               NetPay 
-----------  ------------------------------  ----------- 
    103                  Peter                 83000 

Летучий стол

Изменчивые таблицы создаются, используются и удаляются в пользовательском сеансе. Их определение не сохраняется в словаре данных. Они содержат промежуточные данные запроса, который часто используется. Ниже приводится синтаксис.

Синтаксис

CREATE [SET|MULTISET] VOALTILE TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions> 
ON COMMIT [DELETE|PRESERVE] ROWS

пример

CREATE VOLATILE TABLE dept_stat ( 
   dept_no INTEGER, 
   avg_salary INTEGER, 
   max_salary INTEGER, 
   min_salary INTEGER 
) 
PRIMARY INDEX(dept_no) 
ON COMMIT PRESERVE ROWS;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

*** Table has been created. 
*** Total elapsed time was 1 second.

Глобальная временная таблица

Определение глобальной временной таблицы хранится в словаре данных и может использоваться многими пользователями / сеансами. Но данные, загруженные в глобальную временную таблицу, сохраняются только во время сеанса. Вы можете реализовать до 2000 глобальных временных таблиц за сеанс. Ниже приводится синтаксис.

Синтаксис

CREATE [SET|MULTISET] GLOBAL TEMPORARY TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions> 

пример

CREATE SET GLOBAL TEMPORARY TABLE dept_stat ( 
   dept_no INTEGER, 
   avg_salary INTEGER, 
   max_salary INTEGER, 
   min_salary INTEGER 
) 
PRIMARY INDEX(dept_no);

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

*** Table has been created. 
*** Total elapsed time was 1 second.

Терадата — космические концепции

В Teradata есть три типа пространств.

Постоянное пространство

Постоянное пространство — это максимальный объем пространства, доступный пользователю / базе данных для хранения строк данных. Постоянные таблицы, журналы, резервные таблицы и вспомогательные подтаблицы индекса используют постоянное пространство.

Постоянное пространство не выделено заранее для базы данных / пользователя. Они просто определены как максимальное количество места, которое база данных / пользователь может использовать. Количество постоянного пространства делится на количество AMP. Всякий раз, когда предел AMP превышает, генерируется сообщение об ошибке.

Spool Space

Буферное пространство — это неиспользуемое постоянное пространство, которое используется системой для хранения промежуточных результатов запроса SQL. Пользователи без места в буфере не могут выполнить любой запрос.

Подобно постоянному пространству, пространство буфера определяет максимальный объем пространства, которое может использовать пользователь. Спул пространство делится на количество AMP. Всякий раз, когда превышается предел AMP, пользователь получает ошибку места в буфере.

Temp Space

Временное пространство — это неиспользуемое постоянное пространство, которое используется глобальными временными таблицами. Временное пространство также делится на количество AMP.

Терадата — вторичный индекс

Таблица может содержать только один первичный индекс. Чаще всего вы сталкиваетесь со сценариями, в которых таблица содержит другие столбцы, по которым часто осуществляется доступ к данным. Teradata выполнит полное сканирование таблицы для этих запросов. Вторичные индексы решают эту проблему.

Вторичные индексы — это альтернативный путь доступа к данным. Есть некоторые различия между первичным индексом и вторичным индексом.

  • Вторичный индекс не участвует в распределении данных.

  • Значения вторичного индекса хранятся в подстолях. Эти таблицы встроены во все AMP.

  • Вторичные индексы не являются обязательными.

  • Они могут быть созданы во время создания таблицы или после создания таблицы.

  • Они занимают дополнительное пространство, так как они создают вспомогательную таблицу, и они также требуют обслуживания, поскольку вложенные таблицы необходимо обновлять для каждой новой строки.

Вторичный индекс не участвует в распределении данных.

Значения вторичного индекса хранятся в подстолях. Эти таблицы встроены во все AMP.

Вторичные индексы не являются обязательными.

Они могут быть созданы во время создания таблицы или после создания таблицы.

Они занимают дополнительное пространство, так как они создают вспомогательную таблицу, и они также требуют обслуживания, поскольку вложенные таблицы необходимо обновлять для каждой новой строки.

Есть два типа вторичных индексов —

  • Уникальный вторичный индекс (USI)
  • Неуникальный вторичный индекс (NUSI)

Уникальный вторичный индекс (USI)

Уникальный вторичный индекс допускает только уникальные значения для столбцов, определенных как USI. Доступ к строке по USI — операция с двумя усилителями.

Создать уникальный вторичный индекс

В следующем примере создается USI для столбца EmployeeNo таблицы employee.

CREATE UNIQUE INDEX(EmployeeNo) on employee;

Неуникальный вторичный индекс (NUSI)

Неуникальный вторичный индекс позволяет дублировать значения для столбцов, определенных как NUSI. Доступ к строке по NUSI является операцией на всех усилителях.

Создать неуникальный вторичный индекс

В следующем примере создается NUSI для столбца FirstName таблицы employee.

CREATE INDEX(FirstName) on Employee;

Терадата — Статистика

Оптимизатор Teradata предлагает стратегию выполнения для каждого запроса SQL. Эта стратегия выполнения основана на статистике, собранной для таблиц, используемых в запросе SQL. Статистика в таблице собирается с помощью команды COLLECT STATISTICS. Оптимизатору требуется информация об окружающей среде и демографические данные, чтобы разработать оптимальную стратегию выполнения.

Информация об окружающей среде

  • Количество узлов, AMP и процессоров
  • Количество памяти

Демография данных

  • Количество рядов
  • Размер строки
  • Диапазон значений в таблице
  • Количество строк на значение
  • Количество нулей

Существует три подхода для сбора статистики на столе.

  • Случайная выборка AMP
  • Полный сбор статистики
  • Использование опции SAMPLE

Сбор статистики

Команда COLLECT STATISTICS используется для сбора статистики по таблице.

Синтаксис

Ниже приведен основной синтаксис для сбора статистики по таблице.

COLLECT [SUMMARY] STATISTICS   
INDEX (indexname) COLUMN (columnname) 
ON <tablename>;

пример

В следующем примере выполняется сбор статистики по столбцу EmployeeNo таблицы Employee.

COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

*** Update completed. 2 rows changed. 
*** Total elapsed time was 1 second.

Просмотр статистики

Вы можете просмотреть собранную статистику, используя команду HELP STATISTICS.

Синтаксис

Ниже приведен синтаксис для просмотра собранной статистики.

HELP STATISTICS <tablename>; 

пример

Ниже приведен пример для просмотра статистики, собранной в таблице Employee.

HELP STATISTICS employee;

Когда вышеуказанный запрос выполняется, он дает следующий результат.

  Date       Time      Unique Values           Column Names 
--------   -------- -------------------- ----------------------- 
16/01/01   08:07:04         5                       * 
16/01/01   07:24:16         3                   DepartmentNo 
16/01/01   08:07:04         5                   EmployeeNo

Терадата — Сжатие

Сжатие используется для уменьшения памяти, используемой таблицами. В Teradata сжатие может сжимать до 255 различных значений, включая NULL. Поскольку объем хранилища сокращен, Teradata может хранить больше записей в блоке. Это приводит к улучшению времени ответа на запрос, поскольку любая операция ввода-вывода может обрабатывать больше строк на блок. Сжатие может быть добавлено при создании таблицы с помощью CREATE TABLE или после создания таблицы с помощью команды ALTER TABLE.

Ограничения

  • Только 255 значений могут быть сжаты в столбце.
  • Столбец первичного индекса не может быть сжат.
  • Изменчивые таблицы не могут быть сжаты.

Многозначное сжатие (MVC)

Следующая таблица сжимает поле DepatmentNo для значений 1, 2 и 3. Когда сжатие применяется к столбцу, значения для этого столбца не сохраняются вместе со строкой. Вместо этого значения сохраняются в заголовке таблицы в каждом AMP, и в строку добавляются только биты присутствия, чтобы указать значение.

CREATE SET TABLE employee ( 
   EmployeeNo integer, 
   FirstName CHAR(30), 
   LastName CHAR(30), 
   BirthDate DATE FORMAT 'YYYY-MM-DD-', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD-', 
   employee_gender CHAR(1), 
   DepartmentNo CHAR(02) COMPRESS(1,2,3) 
) 
UNIQUE PRIMARY INDEX(EmployeeNo);

Сжатие с несколькими значениями можно использовать, когда у вас есть столбец в большой таблице с конечными значениями.

Терадата — Объяснить

Команда EXPLAIN возвращает план выполнения механизма синтаксического анализа на английском языке. Его можно использовать с любым оператором SQL, кроме как с другой командой EXPLAIN. Когда запросу предшествует команда EXPLAIN, план выполнения механизма синтаксического анализа возвращается пользователю вместо AMP.

Примеры EXPLAIN

Рассмотрим таблицу Employee со следующим определением.

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30), 
   LastName VARCHAR(30),
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

Некоторые примеры плана EXPLAIN приведены ниже.

Полное сканирование таблицы (FTS)

Если в операторе SELECT не указано никаких условий, оптимизатор может выбрать полное сканирование таблицы, где осуществляется доступ к каждой строке таблицы.

пример

Ниже приведен пример запроса, в котором оптимизатор может выбрать FTS.

EXPLAIN SELECT * FROM employee;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Как видно, оптимизатор выбирает доступ ко всем AMP и всем строкам в AMP.

1) First, we lock a distinct TDUSER."pseudo table" for read on a 
   RowHash to prevent global deadlock for TDUSER.employee.  
2) Next, we lock TDUSER.employee for read.  
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
   all-rows scan with no residual conditions into Spool 1 
   (group_amps), which is built locally on the AMPs.  The size of 
   Spool 1 is estimated with low confidence to be 2 rows (116 bytes).  
   The estimated time for this step is 0.03 seconds.  
4) Finally, we send out an END TRANSACTION step to all AMPs involved 
   in processing the request. 
→ The contents of Spool 1 are sent back to the user as the result of 
   statement 1.  The total estimated time is 0.03 seconds.

Уникальный первичный индекс

Когда доступ к строкам осуществляется с использованием уникального первичного индекса, это одна операция AMP.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Как можно видеть, это извлечение с одним AMP, и оптимизатор использует уникальный первичный индекс для доступа к строке.

1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by 
   way of the unique primary index "TDUSER.employee.EmployeeNo = 101" 
   with no residual conditions. The estimated time for this step is 
   0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Уникальный вторичный индекс

Когда доступ к строкам осуществляется с использованием уникального вторичного индекса, это операция с двумя амперами.

пример

Рассмотрим таблицу Заработная плата со следующим определением.

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
)
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

Рассмотрим следующее утверждение SELECT.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Как видно, оптимизатор извлекает строку в двухамперной операции с использованием уникального вторичного индекса.

1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary 
   by way of unique index # 4 "TDUSER.Salary.EmployeeNo = 
   101" with no residual conditions.  The estimated time for this 
   step is 0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Дополнительные условия

Ниже приведен список терминов, обычно встречающихся в плане EXPLAIN.

… (Последнее использование) …

Файл спула больше не нужен и будет выпущен после завершения этого шага.

… без остаточных условий …

Все применимые условия были применены к строкам.

… КОНЕЦ СДЕЛКИ …

Блокировки транзакций снимаются, и изменения фиксируются.

… устранение дублирующихся строк …

Дублирующиеся строки существуют только в файлах спула, а не в таблицах. Выполнение операции DISTINCT.

… путем обхода индекса #n, извлекающего только идентификаторы строк …

Создается буферный файл, содержащий идентификаторы строк, найденные во вторичном индексе (индекс #n)

… мы делаем смс (установить шаг манипуляции) …

Объединение строк с использованием оператора UNION, MINUS или INTERSECT.

… который перераспределяется по хэш-коду для всех AMP.

Перераспределение данных при подготовке к объединению.

… который дублируется на всех AMP.

Дублирование данных из таблицы меньшего размера (с точки зрения SPOOL) при подготовке к объединению.

… (one_AMP) или (group_AMPs)

Указывает, что вместо всех AMP будет использоваться один AMP или подмножество AMP.

Teradata — алгоритм хеширования

Строка назначается конкретному AMP на основе значения первичного индекса. Teradata использует алгоритм хеширования, чтобы определить, какой AMP получает строку.

Ниже приведена диаграмма высокого уровня алгоритма хеширования.

Алгоритм хеширования

Ниже приведены шаги для вставки данных.

  • Клиент отправляет запрос.

  • Парсер получает запрос и передает значение PI записи в алгоритм хэширования.

  • Алгоритм хеширования хеширует значение основного индекса и возвращает 32-битное число, называемое хэш-строкой.

  • Биты высшего порядка хэша строки (первые 16 бит) используются для идентификации записи карты хеша. Хеш-карта содержит один AMP #. Хэш-карта — это массив блоков, который содержит конкретный номер AMP.

  • BYNET отправляет данные в указанный AMP.

  • AMP использует 32-битный хэш строки, чтобы найти строку на своем диске.

  • Если есть какая-либо запись с таким же хешем строки, то она увеличивает идентификатор уникальности, который является 32-битным числом. Для нового хэша строки идентификатор уникальности присваивается как 1 и увеличивается всякий раз, когда вставляется запись с таким же хэшем строки.

  • Сочетание хэша строки и идентификатора уникальности называется идентификатором строки.

  • Идентификатор строки префикс каждой записи на диске.

  • Каждая строка таблицы в AMP логически сортируется по их идентификаторам строк.

Клиент отправляет запрос.

Парсер получает запрос и передает значение PI записи в алгоритм хэширования.

Алгоритм хеширования хеширует значение основного индекса и возвращает 32-битное число, называемое хэш-строкой.

Биты высшего порядка хэша строки (первые 16 бит) используются для идентификации записи карты хеша. Хеш-карта содержит один AMP #. Хэш-карта — это массив блоков, который содержит конкретный номер AMP.

BYNET отправляет данные в указанный AMP.

AMP использует 32-битный хэш строки, чтобы найти строку на своем диске.

Если есть какая-либо запись с таким же хешем строки, то она увеличивает идентификатор уникальности, который является 32-битным числом. Для нового хэша строки идентификатор уникальности присваивается как 1 и увеличивается всякий раз, когда вставляется запись с таким же хэшем строки.

Сочетание хэша строки и идентификатора уникальности называется идентификатором строки.

Идентификатор строки префикс каждой записи на диске.

Каждая строка таблицы в AMP логически сортируется по их идентификаторам строк.

Как хранятся таблицы

Таблицы сортируются по их идентификатору строки (хэш строки + идентификатор уникальности) и затем сохраняются в AMP. Идентификатор строки сохраняется с каждой строкой данных.

Ряд хэш ID уникальности Сотрудник № Имя Фамилия
2A01 2611 0000 0001 101 Майк Джеймс
2A01 2612 0000 0001 104 Alex Стюарт
2A01 2613 0000 0001 102 Роберт Williams
2A01 2614 0000 0001 105 Роберт Джеймс
2A01 2615 0000 0001 103 Питер Павел

Teradata — Индекс JOIN

JOIN INDEX — это материализованное представление. Его определение постоянно сохраняется, и данные обновляются всякий раз, когда обновляются базовые таблицы, указанные в индексе соединения. ИНДЕКС СОЕДИНЕНИЯ может содержать одну или несколько таблиц, а также содержать предварительно агрегированные данные. Индексы объединения в основном используются для повышения производительности.

Доступны разные типы индексов соединения.

  • Индекс объединения в одну таблицу (STJI)
  • Индекс объединения нескольких таблиц (MTJI)
  • Совокупный индекс присоединения (AJI)

Индекс объединения в одну таблицу

Индекс объединения отдельных таблиц позволяет разбить большую таблицу на основе столбцов первичного индекса, отличных от столбца базовой таблицы.

Синтаксис

Ниже приведен синтаксис JOIN INDEX.

CREATE JOIN INDEX <index name> 
AS 
<SELECT Query> 
<Index Definition>;

пример

Рассмотрим следующие таблицы сотрудников и зарплат.

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
) 
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

Ниже приведен пример, который создает индекс соединения с именем Employee_JI для таблицы Employee.

CREATE JOIN INDEX Employee_JI 
AS 
SELECT EmployeeNo,FirstName,LastName, 
BirthDate,JoinedDate,DepartmentNo 
FROM Employee 
PRIMARY INDEX(FirstName);

Если пользователь отправляет запрос с предложением WHERE в EmployeeNo, то система запросит таблицу Employee, используя уникальный первичный индекс. Если пользователь запрашивает таблицу сотрудников, используя employee_name, тогда система может получить доступ к индексу соединения Employee_JI, используя employee_name. Строки индекса соединения хэшируются в столбце employee_name. Если индекс соединения не определен, а имя сотрудника не определено как вторичный индекс, тогда система выполнит полное сканирование таблицы, чтобы получить доступ к строкам, которые занимают много времени.

Вы можете запустить следующий план EXPLAIN и проверить план оптимизатора. В следующем примере вы можете видеть, что оптимизатор использует индекс соединения вместо базовой таблицы Employee, когда таблица запрашивает с использованием столбца Employee_Name.

EXPLAIN SELECT * FROM EMPLOYEE WHERE FirstName='Mike'; 
*** Help information returned. 8 rows. 
*** Total elapsed time was 1 second. 
Explanation 
------------------------------------------------------------------------ 
   1) First, we do a single-AMP RETRIEVE step from EMPLOYEE_JI by 
      way of the primary index "EMPLOYEE_JI.FirstName = 'Mike'" 
      with no residual conditions into Spool 1 (one-amp), which is built 
      locally on that AMP.  The size of Spool 1 is estimated with low 
      confidence to be 2 rows (232 bytes).  The estimated time for this 
      step is 0.02 seconds.
   → The contents of Spool 1 are sent back to the user as the result of 
      statement 1.  The total estimated time is 0.02 seconds. 

Индекс объединения нескольких таблиц

Индекс объединения нескольких таблиц создается путем объединения нескольких таблиц. Индекс объединения нескольких таблиц может использоваться для хранения результирующего набора часто соединяемых таблиц для повышения производительности.

пример

В следующем примере создается JOIN INDEX с именем Employee_Salary_JI путем объединения таблиц Employee и Salary.

CREATE JOIN INDEX Employee_Salary_JI 
AS 
SELECT a.EmployeeNo,a.FirstName,a.LastName, 
a.BirthDate,a.JoinedDate,a.DepartmentNo,b.Gross,b.Deduction,b.NetPay 
FROM Employee a 
INNER JOIN Salary b 
ON(a.EmployeeNo = b.EmployeeNo) 
PRIMARY INDEX(FirstName);

Всякий раз, когда обновляются базовые таблицы Employee или Salary, индекс соединения Employee_Salary_JI также автоматически обновляется. Если вы выполняете запрос, соединяющий таблицы Employee и Salary, оптимизатор может выбрать прямой доступ к данным из Employee_Salary_JI, а не к таблицам. План EXPLAIN по запросу можно использовать для проверки того, выберет ли оптимизатор базовую таблицу или индекс соединения.

Совокупный индекс присоединения

Если таблица последовательно агрегируется в определенных столбцах, то для повышения производительности можно определить агрегированный индекс соединения. Одним из ограничений агрегатного индекса соединения является то, что он поддерживает только функции SUM и COUNT.

пример

В следующем примере Сотрудник и Зарплата объединяются для определения общей заработной платы по отделу.

CREATE JOIN INDEX Employee_Salary_JI 
AS 
SELECT a.DepartmentNo,SUM(b.NetPay) AS TotalPay 
FROM Employee a 
INNER JOIN Salary b 
ON(a.EmployeeNo = b.EmployeeNo)
GROUP BY a.DepartmentNo 
Primary Index(DepartmentNo); 

Teradata — Просмотров

Представления — это объекты базы данных, построенные по запросу. Представления могут быть построены с использованием одной таблицы или нескольких таблиц путем объединения. Их определение постоянно хранится в словаре данных, но они не хранят копию данных. Данные для представления строятся динамически.

Представление может содержать подмножество строк таблицы или подмножество столбцов таблицы.

Создать представление

Представления создаются с помощью оператора CREATE VIEW.

Синтаксис

Ниже приведен синтаксис для создания представления.

CREATE/REPLACE VIEW <viewname> 
AS  
<select query>; 

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия Дата рождения
101 Майк Джеймс 1/5/1980
104 Alex Стюарт 11/6/1984
102 Роберт Williams 3/5/1983
105 Роберт Джеймс 12/1/1984
103 Питер Павел 4/1/1983

В следующем примере создается представление таблицы Employee.

CREATE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
LastName, 
FROM  
Employee;

Использование представлений

Вы можете использовать обычный оператор SELECT для извлечения данных из представлений.

пример

В следующем примере извлекаются записи из Employee_View;

SELECT EmployeeNo, FirstName, LastName FROM Employee_View;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo            FirstName                       LastName 
-----------  ------------------------------  --------------------------- 
    101                  Mike                           James 
    104                  Alex                           Stuart 
    102                  Robert                         Williams 
    105                  Robert                         James 
    103                  Peter                          Paul 

Изменение видов

Существующее представление можно изменить с помощью оператора REPLACE VIEW.

Ниже приведен синтаксис для изменения представления.

REPLACE VIEW <viewname> 
AS  
<select query>;

пример

В следующем примере изменяется вид Employee_View для добавления дополнительных столбцов.

REPLACE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
BirthDate,
JoinedDate 
DepartmentNo 
FROM  
Employee; 

Drop View

Существующее представление можно отбросить с помощью оператора DROP VIEW.

Синтаксис

Ниже приводится синтаксис DROP VIEW.

DROP VIEW <viewname>; 

пример

Ниже приведен пример удаления представления Employee_View.

DROP VIEW Employee_View; 

Преимущества просмотров

  • Представления обеспечивают дополнительный уровень безопасности, ограничивая строки или столбцы таблицы.

  • Пользователям может быть предоставлен доступ только к представлениям вместо базовых таблиц.

  • Упрощает использование нескольких таблиц, предварительно соединяя их с помощью Views.

Представления обеспечивают дополнительный уровень безопасности, ограничивая строки или столбцы таблицы.

Пользователям может быть предоставлен доступ только к представлениям вместо базовых таблиц.

Упрощает использование нескольких таблиц, предварительно соединяя их с помощью Views.

Teradata — Макросы

Макрос — это набор операторов SQL, которые сохраняются и выполняются путем вызова имени макроса. Определение макросов хранится в словаре данных. Пользователям нужна только привилегия EXEC для выполнения макроса. Пользователям не нужны отдельные привилегии для объектов базы данных, используемых внутри макроса. Макро операторы выполняются как одна транзакция. В случае сбоя одного из операторов SQL в макросе все операторы откатываются. Макросы могут принимать параметры. Макросы могут содержать операторы DDL, но это должен быть последний оператор в макросе.

Создать макросы

Макросы создаются с помощью оператора CREATE MACRO.

Синтаксис

Ниже приведен общий синтаксис команды CREATE MACRO.

CREATE MACRO <macroname> [(parameter1, parameter2,...)] ( 
   <sql statements> 
);

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия Дата рождения
101 Майк Джеймс 1/5/1980
104 Alex Стюарт 11/6/1984
102 Роберт Williams 3/5/1983
105 Роберт Джеймс 12/1/1984
103 Питер Павел 4/1/1983

В следующем примере создается макрос с именем Get_Emp. Он содержит оператор выбора для извлечения записей из таблицы сотрудников.

CREATE MACRO Get_Emp AS ( 
   SELECT 
   EmployeeNo, 
   FirstName, 
   LastName 
   FROM  
   employee 
   ORDER BY EmployeeNo; 
);

Выполнение макросов

Макросы выполняются с помощью команды EXEC.

Синтаксис

Ниже приводится синтаксис команды EXECUTE MACRO.

EXEC <macroname>; 

пример

В следующем примере выполняются имена макросов Get_Emp; Когда следующая команда выполняется, она извлекает все записи из таблицы сотрудников.

EXEC Get_Emp; 
*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second.  
EmployeeNo             FirstName                      LastName 
-----------  ------------------------------  --------------------------- 
   101                  Mike                          James 
   102                  Robert                        Williams 
   103                  Peter                         Paul 
   104                  Alex                          Stuart 
   105                  Robert                        James 

Параметризованные макросы

Макросы Teradata могут принимать параметры. В макросе на эти параметры ссылаются; (точка с запятой).

Ниже приведен пример макроса, который принимает параметры.

CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS ( 
   SELECT 
   EmployeeNo, 
   NetPay 
   FROM  
   Salary 
   WHERE EmployeeNo = :EmployeeNo; 
);

Выполнение параметризованных макросов

Макросы выполняются с помощью команды EXEC. Вам нужны привилегии EXEC для выполнения макросов.

Синтаксис

Ниже приведен синтаксис оператора EXECUTE MACRO.

EXEC <macroname>(value);

пример

В следующем примере выполняются имена макросов Get_Emp; Он принимает сотрудника нет в качестве параметра и извлекает записи из таблицы сотрудников для этого сотрудника.

EXEC Get_Emp_Salary(101); 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.
 
EmployeeNo      NetPay 
-----------  ------------ 
   101           36000 

Teradata — хранимая процедура

Хранимая процедура содержит набор операторов SQL и процедурных операторов. Они могут содержать только процедурные заявления. Определение хранимой процедуры хранится в базе данных, а параметры хранятся в таблицах словаря данных.

преимущества

  • Хранимые процедуры снижают нагрузку на сеть между клиентом и сервером.

  • Обеспечивает лучшую безопасность, поскольку доступ к данным осуществляется через хранимые процедуры, а не напрямую.

  • Обеспечивает лучшее обслуживание, поскольку бизнес-логика проверяется и хранится на сервере.

Хранимые процедуры снижают нагрузку на сеть между клиентом и сервером.

Обеспечивает лучшую безопасность, поскольку доступ к данным осуществляется через хранимые процедуры, а не напрямую.

Обеспечивает лучшее обслуживание, поскольку бизнес-логика проверяется и хранится на сервере.

Процедура создания

Хранимые процедуры создаются с использованием оператора CREATE PROCEDURE.

Синтаксис

Ниже приведен общий синтаксис оператора CREATE PROCEDURE.

CREATE PROCEDURE <procedurename> ( [parameter 1 data type, parameter 2 data type..] ) 
BEGIN 
   <SQL or SPL statements>; 
END;

пример

Рассмотрим следующую таблицу зарплат.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

В следующем примере создается хранимая процедура с именем InsertSalary для принятия значений и вставки в таблицу зарплат.

CREATE PROCEDURE InsertSalary ( 
   IN in_EmployeeNo INTEGER, IN in_Gross INTEGER, 
   IN in_Deduction INTEGER, IN in_NetPay INTEGER 
) 
BEGIN 
   INSERT INTO Salary ( 
      EmployeeNo, 
      Gross, 
      Deduction, 
      NetPay 
   ) 
   VALUES ( 
      :in_EmployeeNo, 
      :in_Gross, 
      :in_Deduction, 
      :in_NetPay 
   ); 
END;

Выполнение процедур

Хранимые процедуры выполняются с использованием оператора CALL.

Синтаксис

Ниже приведен общий синтаксис оператора CALL.

CALL <procedure name> [(parameter values)];

пример

В следующем примере вызывается хранимая процедура InsertSalary и вставляется запись в таблицу зарплат.

CALL InsertSalary(105,20000,2000,18000);

Как только вышеуказанный запрос выполнен, он производит следующий вывод, и вы можете видеть вставленную строку в таблице Salary.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000
105 20000 2000 18 000

Teradata — стратегии JOIN

В этой главе рассматриваются различные стратегии JOIN, доступные в Teradata.

Методы соединения

Teradata использует различные методы соединения для выполнения операций соединения. Некоторые из наиболее часто используемых методов соединения —

  • Объединить присоединиться
  • Вложенное соединение
  • Регистрация продукта

Объединить присоединиться

Метод Merge Join имеет место, когда соединение основано на условии равенства. Соединение слиянием требует, чтобы соединяющиеся строки были на одном AMP. Строки объединяются на основе их хеш-функции. Объединение слиянием использует разные стратегии объединения, чтобы привести строки к одному AMP.

Стратегия № 1

Если соединительные столбцы являются первичными индексами соответствующих таблиц, то соединительные строки уже находятся в том же AMP. В этом случае распространение не требуется.

Рассмотрим следующие таблицы сотрудников и зарплат.

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE Salary ( 
   EmployeeNo INTEGER, 
   Gross INTEGER,  
   Deduction INTEGER, 
   NetPay INTEGER 
) 
UNIQUE PRIMARY INDEX(EmployeeNo); 

Когда эти две таблицы объединяются в столбце EmployeeNo, перераспределение не происходит, так как EmployeeNo является основным индексом обеих таблиц, которые объединяются.

Стратегия № 2

Рассмотрим следующие таблицы сотрудников и отделов.

CREATE SET TABLE EMPLOYEE,FALLBACK (
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30) , 
   LastName VARCHAR(30) , 
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE DEPARTMENT,FALLBACK ( 
   DepartmentNo BYTEINT, 
   DepartmentName CHAR(15) 
) 
UNIQUE PRIMARY INDEX ( DepartmentNo );

Если эти две таблицы объединены в столбце DeparmentNo, то строки необходимо перераспределить, поскольку DepartmentNo является первичным индексом в одной таблице и неосновным индексом в другой таблице. В этом случае объединяющиеся строки могут не находиться в одном AMP. В этом случае Teradata может перераспределить таблицу сотрудников по столбцу DepartmentNo.

Стратегия № 3

Для приведенных выше таблиц Employee и Department Teradata может дублировать таблицу Department во всех AMP, если размер таблицы Department невелик.

Вложенное соединение

Nested Join не использует все AMP. Для выполнения вложенного соединения одним из условий должно быть равенство уникального первичного индекса одной таблицы, а затем присоединение этого столбца к любому индексу другой таблицы.

В этом случае система извлекает одну строку, используя уникальный первичный индекс одной таблицы, и использует этот хэш строки для извлечения совпадающих записей из другой таблицы. Вложенное соединение — самый эффективный из всех методов соединения.

Регистрация продукта

Product Join сравнивает каждую подходящую строку из одной таблицы с каждой подходящей строкой из другой таблицы. Присоединение продукта может происходить из-за следующих факторов:

  • Где условие отсутствует.
  • Условие соединения не основано на условии равенства.
  • Таблица псевдонимов не является правильным.
  • Несколько условий объединения.

Teradata — разделенный первичный индекс

Секционированный первичный индекс (PPI) — это механизм индексации, который полезен для повышения производительности определенных запросов. Когда строки вставляются в таблицу, они сохраняются в AMP и располагаются в порядке их хэширования. Когда таблица определена с помощью PPI, строки сортируются по номеру раздела. Внутри каждого раздела они располагаются по хешу строк. Строки присваиваются разделу на основе определенного выражения раздела.

преимущества

  • Избегайте полного сканирования таблицы для определенных запросов.

  • Избегайте использования вторичного индекса, который требует дополнительной физической структуры и дополнительного обслуживания ввода-вывода.

  • Быстрый доступ к подмножеству большой таблицы.

  • Быстро отбросьте старые данные и добавьте новые.

Избегайте полного сканирования таблицы для определенных запросов.

Избегайте использования вторичного индекса, который требует дополнительной физической структуры и дополнительного обслуживания ввода-вывода.

Быстрый доступ к подмножеству большой таблицы.

Быстро отбросьте старые данные и добавьте новые.

пример

Рассмотрим следующую таблицу «Заказы» с первичным индексом для номера заказа.

Хранить нет № заказа Дата заказа Весь заказ
101 7501 2015-10-01 900
101 7502 2015-10-02 1200
102 7503 2015-10-02 3000
102 7504 2015-10-03 2454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

Предположим, что записи распределены между AMP, как показано в следующих таблицах. Записанные данные хранятся в AMP, сортируются по их хешу строк.

AMP 1

RowHash № заказа Дата заказа
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash № заказа Дата заказа
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Если вы запустите запрос для извлечения заказов на определенную дату, тогда оптимизатор может выбрать использование полного сканирования таблицы, тогда будут доступны все записи в AMP. Чтобы избежать этого, вы можете определить дату заказа как первичный индекс с разделами. Когда строки вставляются в таблицу заказов, они разбиваются по дате заказа. Внутри каждого раздела они будут упорядочены по хешу строк.

Следующие данные показывают, как записи будут храниться в AMP, если они разбиты по дате заказа. Если запрос выполняется для доступа к записям по дате заказа, то будет доступен только раздел, содержащий записи для этого конкретного заказа.

AMP 1

раздел RowHash № заказа Дата заказа
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

раздел RowHash № заказа Дата заказа
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

Ниже приведен пример создания таблицы с разделом первичного индекса. Предложение PARTITION BY используется для определения раздела.

CREATE SET TABLE Orders (
   StoreNo SMALLINT, 
   OrderNo INTEGER, 
   OrderDate DATE FORMAT 'YYYY-MM-DD', 
   OrderTotal INTEGER 
) 
PRIMARY INDEX(OrderNo) 
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

В приведенном выше примере таблица разделена по столбцу OrderDate. Там будет один отдельный раздел на каждый день.

Teradata — OLAP Функции

Функции OLAP аналогичны агрегатным функциям, за исключением того, что агрегатные функции будут возвращать только одно значение, тогда как функция OLAP будет предоставлять отдельные строки в дополнение к агрегатам.

Синтаксис

Ниже приведен общий синтаксис функции OLAP.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING) 

Функции агрегации могут быть SUM, COUNT, MAX, MIN, AVG.

пример

Рассмотрим следующую таблицу зарплат.

Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Ниже приведен пример для определения накопленной суммы или промежуточной суммы NetPay в таблице зарплаты. Записи сортируются по EmployeeNo, а совокупная сумма рассчитывается по столбцу NetPay.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000 

РАНГ

Функция RANK упорядочивает записи на основе предоставленного столбца. Функция RANK также может фильтровать количество записей, возвращаемых на основе ранга.

Синтаксис

Ниже приведен общий синтаксис для использования функции RANK.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия JoinedDate DepartmentID Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984

Следующий запрос упорядочивает записи таблицы сотрудников по дате присоединения и присваивает ранжирование по дате присоединения.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

EmployeeNo   JoinedDate   Seniority 
-----------  ----------  ----------- 
   101       2005-03-27       1 
   103       2007-03-21       2 
   102       2007-04-25       3 
   105       2008-01-04       4 
   104       2008-02-01       5 

Предложение PARTITION BY группирует данные по столбцам, определенным в предложении PARTITION BY, и выполняет функцию OLAP в каждой группе. Ниже приведен пример запроса, в котором используется предложение PARTITION BY.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Когда вышеуказанный запрос выполняется, он производит следующий вывод. Вы можете видеть, что ранг сбрасывается для каждого отдела.

EmployeeNo  DepartmentNo  JoinedDate   Seniority 
-----------  ------------  ----------  ----------- 

    101           1        2005-03-27       1 
    103           2        2007-03-21       1 
    102           2        2007-04-25       2 
    104           2        2008-02-01       3 
    105           3        2008-01-04       1 

Teradata — Защита данных

В этой главе рассматриваются функции, доступные для защиты данных в Teradata.

Переходный журнал

Teradata использует Transient Journal для защиты данных от сбоев транзакций. Всякий раз, когда выполняются какие-либо транзакции, временный журнал хранит копию предыдущих изображений затронутых строк до тех пор, пока транзакция не будет выполнена успешно или откат успешно. Затем предыдущие изображения отбрасываются. Временные журналы хранятся в каждом AMP. Это автоматический процесс, и его нельзя отключить.

Отступать

Fallback защищает данные таблицы, сохраняя вторую копию строк таблицы в другом AMP, называемом Fallback AMP. Если происходит сбой одного AMP, доступ к резервным строкам. При этом, даже если один AMP выходит из строя, данные по-прежнему доступны через резервный AMP. Резервный вариант можно использовать при создании таблицы или после создания таблицы. Резервный режим гарантирует, что вторая копия строк таблицы всегда хранится в другом AMP, чтобы защитить данные от сбоя AMP. Однако резервная копия занимает вдвое больше памяти и ввода-вывода для вставки / удаления / обновления.

Следующая диаграмма показывает, как резервные копии строк хранятся в другом AMP.

Отступать

Down AMP Recovery Journal

Журнал восстановления Down AMP активируется при сбое AMP и защите таблицы от сбоев. Этот журнал отслеживает все изменения данных несостоявшегося AMP. Журнал активируется на остальных AMP в кластере. Это автоматический процесс, и его нельзя отключить. После сбоя AMP данные из журнала восстановления Down AMP синхронизируются с AMP. Как только это сделано, журнал отбрасывается.

Down AMP Recovery Journal

Клик

Клика — это механизм, используемый Teradata для защиты данных от сбоев Node. Клика — это не что иное, как набор узлов Teradata, которые совместно используют общий набор дисковых массивов. Когда происходит сбой узла, vprocs из отказавшего узла мигрирует на другие узлы в клике и продолжает получать доступ к своим дисковым массивам.

Горячий резервный узел

Узел горячего резервирования — это узел, который не участвует в производственной среде. Если узел выходит из строя, то vprocs из вышедших из строя узлов мигрирует в узел горячего резервирования. После восстановления неисправного узла он становится узлом горячего резервирования. Узлы горячего резервирования используются для поддержания производительности в случае сбоев узлов.

RAID

Резервный массив независимых дисков (RAID) — это механизм, используемый для защиты данных от сбоев диска. Дисковый массив состоит из набора дисков, которые сгруппированы как логическая единица. Этот блок может выглядеть как один блок для пользователя, но они могут быть распределены по нескольким дискам.

RAID 1 обычно используется в Teradata. В RAID 1 каждый диск связан с зеркальным диском. Любые изменения данных на первичном диске также отражаются в зеркальной копии. В случае сбоя основного диска можно получить доступ к данным с зеркального диска.

RAID

Teradata — Управление пользователями

В этой главе обсуждались различные стратегии управления пользователями в Teradata.

пользователей

Пользователь создается с помощью команды CREATE USER. В Teradata пользователь также похож на базу данных. Им обоим может быть назначено пространство и они содержат объекты базы данных, за исключением того, что пользователю назначен пароль.

Синтаксис

Ниже приводится синтаксис CREATE USER.

CREATE USER username 
AS  
[PERMANENT|PERM] = n BYTES 
PASSWORD = password 
TEMPORARY = n BYTES 
SPOOL = n BYTES;

При создании пользователя обязательны значения имени пользователя, постоянного пространства и пароля. Другие поля являются необязательными.

пример

Ниже приведен пример для создания пользователя TD01.

CREATE USER TD01 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = ABC$124 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES;

Счета

При создании нового пользователя пользователь может быть привязан к учетной записи. Опция ACCOUNT в CREATE USER используется для назначения учетной записи. Пользователь может быть назначен на несколько учетных записей.

Синтаксис

Ниже приведен синтаксис CREATE USER с опцией учетной записи.

CREATE USER username 
PERM = n BYTES 
PASSWORD = password 
ACCOUNT = accountid

пример

В следующем примере создается пользователь TD02 и назначается учетная запись как ИТ и администратор.

CREATE USER TD02 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = abc$123 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES 
ACCOUNT = (‘IT’,’Admin’);

Пользователь может указать идентификатор учетной записи при входе в систему Teradata или после входа в систему с помощью команды SET SESSION.

.LOGON username, passowrd,accountid 
OR 
SET SESSION ACCOUNT = accountid 

Предоставить привилегии

Команда GRANT используется для назначения пользователю или базе данных одной или нескольких привилегий на объектах базы данных.

Синтаксис

Ниже приводится синтаксис команды GRANT.

GRANT privileges ON objectname TO username;

Привилегии могут быть ВСТАВИТЬ, ВЫБРАТЬ, ОБНОВИТЬ, ССЫЛКИ.

пример

Ниже приведен пример заявления GRANT.

GRANT SELECT,INSERT,UPDATE ON Employee TO TD01;

Отозвать привилегии

Команда REVOKE удаляет привилегии пользователей или баз данных. Команда REVOKE может удалить только явные привилегии.

Синтаксис

Ниже приведен основной синтаксис команды REVOKE.

REVOKE [ALL|privileges] ON objectname FROM username;

пример

Ниже приведен пример команды REVOKE.

REVOKE INSERT,SELECT ON Employee FROM TD01;

Teradata — настройка производительности

В этой главе обсуждается процедура настройки производительности в Teradata.

объяснять

Первым шагом в настройке производительности является использование EXPLAIN в вашем запросе. План EXPLAIN содержит подробную информацию о том, как оптимизатор выполнит ваш запрос. В плане объяснения проверьте ключевые слова, такие как уровень достоверности, используемая стратегия объединения, размер файла спула, перераспределение и т. Д.

Собирать статистику

Оптимизатор использует демографию данных для разработки эффективной стратегии исполнения. Команда COLLECT STATISTICS используется для сбора демографических данных таблицы. Убедитесь, что статистика, собранная по столбцам, актуальна.

  • Соберите статистику по столбцам, которые используются в предложении WHERE, и по столбцам, используемым в условии соединения.

  • Сбор статистики по столбцам Уникальный первичный индекс.

  • Сбор статистики по столбцам Неуникальный вторичный индекс. Оптимизатор решит, может ли он использовать NUSI или Full Table Scan.

  • Соберите статистику по индексу соединения, хотя статистика по базовой таблице собрана.

  • Сбор статистики по разделам столбцов.

Соберите статистику по столбцам, которые используются в предложении WHERE, и по столбцам, используемым в условии соединения.

Сбор статистики по столбцам Уникальный первичный индекс.

Сбор статистики по столбцам Неуникальный вторичный индекс. Оптимизатор решит, может ли он использовать NUSI или Full Table Scan.

Соберите статистику по индексу соединения, хотя статистика по базовой таблице собрана.

Сбор статистики по разделам столбцов.

Типы данных

Убедитесь, что используются правильные типы данных. Это позволит избежать использования чрезмерного хранения, чем требуется.

преобразование

Убедитесь, что типы данных столбцов, используемых в условии соединения, совместимы, чтобы избежать явного преобразования данных.

Сортировать

Удалите ненужные предложения ORDER BY, если это не требуется.

Спул Пространство Проблема

Ошибка места в буфере генерируется, если запрос превышает ограничение на объем буфера в AMP для этого пользователя. Проверьте план объяснения и определите шаг, который занимает больше места в буфере. Эти промежуточные запросы можно разделить и разместить отдельно для построения временных таблиц.

Основной индекс

Убедитесь, что первичный индекс правильно определен для таблицы. Столбец первичного индекса должен равномерно распределять данные и должен часто использоваться для доступа к данным.

SET Table

Если вы определите таблицу SET, оптимизатор проверит, является ли запись дубликатом для каждой вставленной записи. Чтобы удалить дублирующее условие проверки, вы можете определить уникальный вторичный индекс для таблицы.

ОБНОВЛЕНИЕ на большом столе

Обновление большой таблицы займет много времени. Вместо обновления таблицы вы можете удалить записи и вставить записи с измененными строками.

Удаление временных таблиц

Удалите временные таблицы (промежуточные таблицы) и volatiles, если они больше не нужны. Это высвободит постоянное пространство и освободит место.

МУЛЬТИСЕТ Стол

Если вы уверены, что входные записи не будут иметь повторяющихся записей, то вы можете определить целевую таблицу как таблицу MULTISET, чтобы избежать проверки повторяющихся строк, используемой таблицей SET.

Teradata — FastLoad

Утилита FastLoad используется для загрузки данных в пустые таблицы. Поскольку он не использует временные журналы, данные могут быть загружены быстро. Он не загружает повторяющиеся строки, даже если целевая таблица является таблицей MULTISET.

ограничение

Таблица назначения не должна иметь вторичного индекса, индекса соединения и ссылки на внешний ключ.

Как работает FastLoad

FastLoad выполняется в два этапа.

Фаза 1

  • Механизмы синтаксического анализа считывают записи из входного файла и отправляют блок каждому AMP.

  • Каждый AMP хранит блоки записей.

  • Затем AMP хэшируют каждую запись и перераспределяют их в правильный AMP.

  • В конце Фазы 1 у каждого AMP есть свои строки, но они не находятся в последовательности хэша строки.

Механизмы синтаксического анализа считывают записи из входного файла и отправляют блок каждому AMP.

Каждый AMP хранит блоки записей.

Затем AMP хэшируют каждую запись и перераспределяют их в правильный AMP.

В конце Фазы 1 у каждого AMP есть свои строки, но они не находятся в последовательности хэша строки.

Фаза 2

  • Этап 2 начинается, когда FastLoad получает инструкцию END LOADING.

  • Каждый AMP сортирует записи по хешу строк и записывает их на диск.

  • Блокировки на целевой таблице сняты, а таблицы ошибок удалены.

Этап 2 начинается, когда FastLoad получает инструкцию END LOADING.

Каждый AMP сортирует записи по хешу строк и записывает их на диск.

Блокировки на целевой таблице сняты, а таблицы ошибок удалены.

пример

Создайте текстовый файл со следующими записями и назовите его как employee.txt.

101,Mike,James,1980-01-05,2010-03-01,1  
102,Robert,Williams,1983-03-05,2010-09-01,1 
103,Peter,Paul,1983-04-01,2009-02-12,2 
104,Alex,Stuart,1984-11-06,2014-01-01,2 
105,Robert,James,1984-12-01,2015-03-09,3

Ниже приведен пример сценария FastLoad для загрузки вышеуказанного файла в таблицу Employee_Stg.

LOGON 192.168.1.102/dbc,dbc;  
   DATABASE tduser;  
   BEGIN LOADING tduser.Employee_Stg  
      ERRORFILES Employee_ET, Employee_UV  
      CHECKPOINT 10;  
      SET RECORD VARTEXT ",";  
      DEFINE in_EmployeeNo (VARCHAR(10)), 
         in_FirstName (VARCHAR(30)), 
         in_LastName (VARCHAR(30)), 
         in_BirthDate (VARCHAR(10)), 
         in_JoinedDate (VARCHAR(10)), 
         in_DepartmentNo (VARCHAR(02)), 
         FILE = employee.txt;
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate, 
         DepartmentNo
      ) 
      VALUES (  
         :in_EmployeeNo, 
         :in_FirstName, 
         :in_LastName, 
         :in_BirthDate (FORMAT 'YYYY-MM-DD'), 
         :in_JoinedDate (FORMAT 'YYYY-MM-DD'),
         :in_DepartmentNo
      ); 
   END LOADING;  
LOGOFF;

Выполнение скрипта FastLoad

После того как входной файл employee.txt создан и скрипт FastLoad назван EmployeeLoad.fl, вы можете запустить скрипт FastLoad с помощью следующей команды в UNIX и Windows.

FastLoad < EmployeeLoad.fl;

Как только вышеуказанная команда будет выполнена, скрипт FastLoad запустится и выдаст журнал. В журнале вы можете увидеть количество записей, обработанных FastLoad, и код состояния.

**** 03:19:14 END LOADING COMPLETE 
   Total Records Read              =  5 
   Total Error Table 1             =  0  ---- Table has been dropped 
   Total Error Table 2             =  0  ---- Table has been dropped 
   Total Inserts Applied           =  5 
   Total Duplicate Rows            =  0 
   Start:   Fri Jan  8 03:19:13 2016 
   End  :   Fri Jan  8 03:19:14 2016 
**** 03:19:14 Application Phase statistics: 
              Elapsed time: 00:00:01 (in hh:mm:ss) 
0008  LOGOFF; 
**** 03:19:15 Logging off all sessions

Условия FastLoad

Ниже приведен список общих терминов, используемых в скрипте FastLoad.

  • LOGON — вход в Teradata и инициирование одного или нескольких сеансов.

  • БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

  • НАЧАЛО ЗАГРУЗКИ — Определяет таблицу для загрузки.

  • ERRORFILES — определяет 2 таблицы ошибок, которые необходимо создать / обновить.

  • CHECKPOINT — Определяет, когда взять контрольную точку.

  • SET RECORD — указывает, является ли формат входного файла отформатированным, двоичным, текстовым или неформатированным.

  • DEFINE — Определяет структуру входного файла.

  • ФАЙЛ — Определяет имя входного файла и путь.

  • INSERT — вставляет записи из входного файла в целевую таблицу.

  • КОНЕЦ ЗАГРУЗКИ — Инициирует фазу 2 FastLoad. Распределяет записи в целевой таблице.

  • LOGOFF — Завершает все сеансы и завершает FastLoad.

LOGON — вход в Teradata и инициирование одного или нескольких сеансов.

БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

НАЧАЛО ЗАГРУЗКИ — Определяет таблицу для загрузки.

ERRORFILES — определяет 2 таблицы ошибок, которые необходимо создать / обновить.

CHECKPOINT — Определяет, когда взять контрольную точку.

SET RECORD — указывает, является ли формат входного файла отформатированным, двоичным, текстовым или неформатированным.

DEFINE — Определяет структуру входного файла.

ФАЙЛ — Определяет имя входного файла и путь.

INSERT — вставляет записи из входного файла в целевую таблицу.

КОНЕЦ ЗАГРУЗКИ — Инициирует фазу 2 FastLoad. Распределяет записи в целевой таблице.

LOGOFF — Завершает все сеансы и завершает FastLoad.

Teradata — MultiLoad

MultiLoad может загружать несколько таблиц одновременно, а также может выполнять различные типы задач, таких как INSERT, DELETE, UPDATE и UPSERT. Он может загружать до 5 таблиц одновременно и выполнять до 20 операций DML в скрипте. Таблица назначения не требуется для MultiLoad.

MultiLoad поддерживает два режима —

  • ИМПОРТИРОВАТЬ
  • УДАЛЯТЬ

MultiLoad требует рабочую таблицу, таблицу журнала и две таблицы ошибок в дополнение к целевой таблице.

  • Таблица журнала — используется для сохранения контрольных точек, снятых во время загрузки, которые будут использоваться для перезапуска.

  • Таблицы ошибок — эти таблицы вставляются во время загрузки при возникновении ошибки. Первая таблица ошибок хранит ошибки преобразования, тогда как вторая таблица ошибок хранит дубликаты записей.

  • Таблица журналов — содержит результаты каждого этапа MultiLoad для перезапуска.

  • Рабочая таблица — скрипт MultiLoad создает одну рабочую таблицу для каждой целевой таблицы. Рабочая таблица используется для хранения задач DML и входных данных.

Таблица журнала — используется для сохранения контрольных точек, снятых во время загрузки, которые будут использоваться для перезапуска.

Таблицы ошибок — эти таблицы вставляются во время загрузки при возникновении ошибки. Первая таблица ошибок хранит ошибки преобразования, тогда как вторая таблица ошибок хранит дубликаты записей.

Таблица журналов — содержит результаты каждого этапа MultiLoad для перезапуска.

Рабочая таблица — скрипт MultiLoad создает одну рабочую таблицу для каждой целевой таблицы. Рабочая таблица используется для хранения задач DML и входных данных.

ограничение

MultiLoad имеет некоторые ограничения.

  • Уникальный вторичный индекс не поддерживается на целевой таблице.
  • Ссылочная целостность не поддерживается.
  • Триггеры не поддерживаются.

Как работает MultiLoad

Импорт MultiLoad имеет пять этапов —

  • Этап 1 — Предварительный этап — выполняет основные действия по настройке.

  • Этап 2 — этап транзакции DML — проверяет синтаксис операторов DML и переносит их в систему Teradata.

  • Этап 3 — Этап сбора данных — переносит входные данные в рабочие таблицы и блокирует таблицу.

  • Этап 4 — Этап применения — Применяет все операции DML.

  • Фаза 5 — Фаза очистки — Снимает блокировку стола.

Этап 1 — Предварительный этап — выполняет основные действия по настройке.

Этап 2 — этап транзакции DML — проверяет синтаксис операторов DML и переносит их в систему Teradata.

Этап 3 — Этап сбора данных — переносит входные данные в рабочие таблицы и блокирует таблицу.

Этап 4 — Этап применения — Применяет все операции DML.

Фаза 5 — Фаза очистки — Снимает блокировку стола.

Шаги, включенные в скрипт MultiLoad:

  • Шаг 1 — Настройте таблицу журнала.

  • Шаг 2 — Войдите в Teradata.

  • Шаг 3 — Укажите таблицы Target, Work и Error.

  • Шаг 4 — Определите формат файла INPUT.

  • Шаг 5 — Определите запросы DML.

  • Шаг 6 — Назовите файл ИМПОРТ.

  • Шаг 7 — Укажите LAYOUT для использования.

  • Шаг 8 — Инициируйте загрузку.

  • Шаг 9 — Завершите загрузку и завершите сеансы.

Шаг 1 — Настройте таблицу журнала.

Шаг 2 — Войдите в Teradata.

Шаг 3 — Укажите таблицы Target, Work и Error.

Шаг 4 — Определите формат файла INPUT.

Шаг 5 — Определите запросы DML.

Шаг 6 — Назовите файл ИМПОРТ.

Шаг 7 — Укажите LAYOUT для использования.

Шаг 8 — Инициируйте загрузку.

Шаг 9 — Завершите загрузку и завершите сеансы.

пример

Создайте текстовый файл со следующими записями и назовите его как employee.txt.

101,Mike,James,1980-01-05,2010-03-01,1  
102,Robert,Williams,1983-03-05,2010-09-01,1 
103,Peter,Paul,1983-04-01,2009-02-12,2 
104,Alex,Stuart,1984-11-06,2014-01-01,2 
105,Robert,James,1984-12-01,2015-03-09,3 

В следующем примере представлен скрипт MultiLoad, который считывает записи из таблицы сотрудников и загружает их в таблицу Employee_Stg.

.LOGTABLE tduser.Employee_log;  
.LOGON 192.168.1.102/dbc,dbc; 
   .BEGIN MLOAD TABLES Employee_Stg;  
      .LAYOUT Employee;  
      .FIELD in_EmployeeNo * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(30); 
      .FIELD in_LastName * VARCHAR(30);  
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(02);

      .DML LABEL EmpLabel; 
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES (
         :in_EmployeeNo,
         :in_FirstName,
         :in_Lastname,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE employee.txt  
      FORMAT VARTEXT ','
      LAYOUT Employee
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;

Выполнение MultiLoad-скрипта

После создания входного файла employee.txt и сценария мультизагрузки с именем EmployeeLoad.ml можно запустить сценарий мультизагрузки с помощью следующей команды в UNIX и Windows.

Multiload < EmployeeLoad.ml;

Teradata — FastExport

Утилита FastExport используется для экспорта данных из таблиц Teradata в плоские файлы. Он также может генерировать данные в формате отчета. Данные могут быть извлечены из одной или нескольких таблиц с помощью Join. Поскольку FastExport экспортирует данные в блоках по 64 КБ, это полезно для извлечения большого объема данных.

пример

Рассмотрим следующую таблицу сотрудников.

Сотрудник № Имя Фамилия Дата рождения
101 Майк Джеймс 1/5/1980
104 Alex Стюарт 11/6/1984
102 Роберт Williams 3/5/1983
105 Роберт Джеймс 12/1/1984
103 Питер Павел 4/1/1983

Ниже приведен пример скрипта FastExport. Он экспортирует данные из таблицы сотрудников и записывает их в файл employeeedata.txt.

.LOGTABLE tduser.employee_log;  
.LOGON 192.168.1.102/dbc,dbc;  
   DATABASE tduser;  
   .BEGIN EXPORT SESSIONS 2;  
      .EXPORT OUTFILE employeedata.txt  
      MODE RECORD FORMAT TEXT;
      SELECT CAST(EmployeeNo AS CHAR(10)), 
         CAST(FirstName AS CHAR(15)), 
         CAST(LastName AS CHAR(15)), 
         CAST(BirthDate AS CHAR(10))   
      FROM
      Employee;
   .END EXPORT;
.LOGOFF;

Выполнение скрипта FastExport

Когда сценарий написан и назван employee.fx, вы можете использовать следующую команду для выполнения сценария.

fexp < employee.fx

После выполнения вышеуказанной команды вы получите следующий вывод в файле busyedata.txt.

103       Peter          Paul           1983-04-01 
101       Mike           James          1980-01-05 
102       Robert         Williams       1983-03-05 
105       Robert         James          1984-12-01 
104       Alex           Stuart         1984-11-06

Условия FastExport

Ниже приведен список терминов, обычно используемых в скрипте FastExport.

  • LOGTABLE — указывает таблицу журнала для цели перезапуска.

  • LOGON — вход в Teradata и инициирование одного или нескольких сеансов.

  • БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

  • НАЧАЛО ЭКСПОРТА — указывает на начало экспорта.

  • EXPORT — указывает целевой файл и формат экспорта.

  • SELECT — указывает запрос на выборку для экспорта данных.

  • END EXPORT — указывает конец FastExport.

  • LOGOFF — Заканчивает все сеансы и завершает FastExport.

LOGTABLE — указывает таблицу журнала для цели перезапуска.

LOGON — вход в Teradata и инициирование одного или нескольких сеансов.

БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

НАЧАЛО ЭКСПОРТА — указывает на начало экспорта.

EXPORT — указывает целевой файл и формат экспорта.

SELECT — указывает запрос на выборку для экспорта данных.

END EXPORT — указывает конец FastExport.

LOGOFF — Заканчивает все сеансы и завершает FastExport.

Teradata — BTEQ

Утилита BTEQ — мощная утилита в Teradata, которую можно использовать как в пакетном, так и в интерактивном режиме. Его можно использовать для запуска любого оператора DDL, оператора DML, создания макросов и хранимых процедур. BTEQ можно использовать для импорта данных в таблицы Teradata из плоского файла, а также для извлечения данных из таблиц в файлы или отчеты.

Условия BTEQ

Ниже приведен список терминов, обычно используемых в скриптах BTEQ.

  • LOGON — используется для входа в систему Teradata.

  • ACTIVITYCOUNT — возвращает количество строк, затронутых предыдущим запросом.

  • ERRORCODE — возвращает код состояния предыдущего запроса.

  • БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

  • LABEL — назначает метку для набора команд SQL.

  • RUN FILE — выполняет запрос, содержащийся в файле.

  • GOTO — передает управление метке.

  • LOGOFFвыходит из базы данных и завершает все сеансы.

  • ИМПОРТ — Указывает путь к входному файлу.

  • EXPORT — указывает путь к выходному файлу и инициирует экспорт.

LOGON — используется для входа в систему Teradata.

ACTIVITYCOUNT — возвращает количество строк, затронутых предыдущим запросом.

ERRORCODE — возвращает код состояния предыдущего запроса.

БАЗА ДАННЫХ — Устанавливает базу данных по умолчанию.

LABEL — назначает метку для набора команд SQL.

RUN FILE — выполняет запрос, содержащийся в файле.

GOTO — передает управление метке.

LOGOFFвыходит из базы данных и завершает все сеансы.

ИМПОРТ — Указывает путь к входному файлу.

EXPORT — указывает путь к выходному файлу и инициирует экспорт.

пример

Ниже приведен пример скрипта BTEQ.

.LOGON 192.168.1.102/dbc,dbc; 
   DATABASE tduser;

   CREATE TABLE employee_bkup ( 
      EmployeeNo INTEGER, 
      FirstName CHAR(30), 
      LastName CHAR(30), 
      DepartmentNo SMALLINT, 
      NetPay INTEGER 
   )
   Unique Primary Index(EmployeeNo);

   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
  
   SELECT * FROM  
   Employee 
   Sample 1; 
   .IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;  

   DROP TABLE employee_bkup;
  
   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE; 
 
   .LABEL InsertEmployee 
   INSERT INTO employee_bkup 
   SELECT a.EmployeeNo, 
      a.FirstName, 
      a.LastName, 
      a.DepartmentNo, 
      b.NetPay 
   FROM  
   Employee a INNER JOIN Salary b 
   ON (a.EmployeeNo = b.EmployeeNo);  

   .IF ERRORCODE <> 0 THEN .EXIT ERRORCODE; 
.LOGOFF; 

Приведенный выше скрипт выполняет следующие задачи.

Вход в систему Teradata.

Устанавливает базу данных по умолчанию.

Создает таблицу с именем employee_bkup.

Выбирает одну запись из таблицы Employee, чтобы проверить, есть ли в таблице какие-либо записи.

Удаляет таблицу employee_bkup, если таблица пуста.

Переносит элемент управления в Label InsertEmployee, который вставляет записи в таблицу employee_bkup.

Проверяет ERRORCODE, чтобы убедиться, что оператор выполнен успешно, после каждого оператора SQL.

ACTIVITYCOUNT возвращает количество записей, выбранных / затронутых предыдущим SQL-запросом.