Поделиться через


Соответствие ANSI в Databricks Runtime

Область применения:поставлено Databricks Runtime

В этой статье описывается соответствие ANSI в Databricks Runtime. Для режима ANSI в Databricks SQL, см. ANSI_MODE.

SQL Spark поддерживает два варианта обеспечения соответствия стандарту ANSI — spark.sql.ansi.enabled и spark.sql.storeAssignmentPolicy.

Если для spark.sql.ansi.enabled задано значение true, Spark SQL использует диалект, соответствующий ANSI, вместо соответствия Hive. Например, при недопустимых входных данных оператора SQL или функции Spark вызывает исключение во время выполнения, а не возвращает результаты NULL. Некоторые функции диалекта ANSI могут быть не из стандарта ANSI SQL напрямую, но их поведение соответствует стилю ANSI SQL.

Кроме того, Spark SQL имеет независимый параметр для управления неявным поведением приведения при хранении строк в таблице. Правила приведения типов определены как правила распределения хранилища в стандарте.

Если spark.sql.storeAssignmentPolicy установлен в ANSI, Spark SQL соответствует правилам назначения хранилища ANSI. Это отдельная конфигурация, так как ее значение по умолчанию — ANSI, а конфигурация spark.sql.ansi.enabled по умолчанию отключена.

В следующей таблице приведены сведения о поведении:

Имя свойства По умолчанию. Значение
spark.sql.ansi.enabled ложный Если значение равно true, Spark пытается обеспечить соответствие спецификации SQL ANSI:
  • Создает исключение среды выполнения, если переполнение происходит в любой операции в целочисленном или десятичном поле.
  • Запрещает использование зарезервированных ключевых слов ANSI SQL в качестве идентификаторов в средстве синтаксического анализа SQL.
spark.sql.storeAssignmentPolicy ANSI (Американский национальный институт стандартов) При сохранении значения в столбец с другим типом данных Spark выполняет преобразование типов. Существуют три политики для правил приведения типов: ANSI, legacy и strict.
  • ANSI: Spark выполняет преобразование типов согласно ANSI SQL. На практике поведение в основном совпадает с PostgreSQL. Запрещены некоторые неоправданные преобразования типов, такие как преобразование строки в int или double в boolean.
  • legacy: Spark разрешает приведение типов при условии, что это является допустимым приведением, что достаточно гибко. Например, допускается преобразование строки в int или double в boolean. Это также является единственным поведением в Spark 2.x и совместимо с Hive.
  • strict: Spark не допускает никакой потери точности или усечения данных при приведении типов: например, преобразование типа double в int или десятичного значения в double не допускается.

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

Арифметические операции

В SQL Spark арифметическая операции с числовыми типами (кроме decimal) по умолчанию не проверяются на переполнение. Это означает, что если операция приводит к переполнению, результат будет таким же, как и соответствующая операция в программе Java или Scala (например, если сумма 2 целых чисел превышает максимальное значение, которое может быть представлено, результатом будет отрицательное число). С другой стороны, Spark SQL возвращает NULL при десятичных переполнениях. Если spark.sql.ansi.enabled установлено на true и переполнение происходит при числовых и интервальных арифметических операциях, то в момент выполнения возникает арифметическое исключение.

-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
 error: integer overflow

-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
  -2147483648

Состав

Если spark.sql.ansi.enabled задано значение true, явное приведение с помощью синтаксиса CAST создает исключение среды выполнения для незаконных шаблонов приведения, определенных в стандарте, таких как приведение из строки в целое число.

Предложение CAST режима ANSI Spark следует правилам синтаксиса раздела 6.13 "Спецификация приведения" в стандарте ISO/МЭК 9075-2:2011 Информационные технологии — Языки баз данных - SQL. Часть 2: Foundation (SQL/Foundation), за исключением того, что оно специально позволяет выполнять следующие простые преобразования типов, которые запрещены в стандарте ANSI:

  • NumericType <=> BooleanType
  • ТипСтроки <=> ТипБинарный

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

Исходный/целевой Числовое Строка Дата Метка времени Интервал Логический Бинарный Массив Карта Структура
Числовое И И Н Н Н И Н Н Н Н
Строка И И И И И И И Н Н Н
Дата Н И И И Н Н Н Н Н Н
Метка времени Н И И И Н Н Н Н Н Н
Интервал Н И Н Н И Н Н Н Н Н
Логический И И Н Н Н И Н Н Н Н
Бинарный И Н Н Н Н Н И Н Н Н
Массив Н Н Н Н Н Н Н И Н Н
Карта Н Н Н Н Н Н Н Н И Н
Структура Н Н Н Н Н Н Н Н Н И
-- Examples of explicit casting

-- `spark.sql.ansi.enabled=true`
> SELECT CAST('a' AS INT);
  ERROR: [CAST_INVALID_INPUT] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed.

> SELECT CAST(2147483648L AS INT);
  ERROR: [CAST_OVERFLOW] The value 2147483648L of the type "BIGINT" cannot be cast to "INT" due to an overflow.

> SELECT CAST(DATE'2020-01-01' AS INT)
  ERROR: [DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] Cannot resolve "CAST(DATE '2020-01-01' AS INT)" due to data type mismatch: cannot cast "DATE" to "INT".

-- `spark.sql.ansi.enabled=false` (This is a default behavior)
> SELECT cast('a' AS INT);
  null

> SELECT CAST(2147483648L AS INT);
  -2147483648

> SELECT CAST(DATE'2020-01-01' AS INT);
  null

Назначение хранения

Настройка spark.sql.storeAssignmentPolicy по умолчанию установлена на ANSI. При использовании этого параметра, если типы данных исходных значений не соответствуют типам целевых столбцов, Spark SQL автоматически добавляет предложения ANSI CAST в инструкцию INSERT . При вставке таблицы согласно этой политике Spark проверяет и отклоняет недопустимые преобразования типов, выдавая исключение для обеспечения качества данных. Это означает, что если попытка вставки завершается ошибкой из-за несоответствия типа, она не приведет к частичной записи данных в таблицу.

Примеры:

-- spark.sql.storeAssignmentPolicy=ANSI
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
  ERROR: [CAST_OVERFLOW_IN_TABLE_INSERT] Fail to insert a value of "BIGINT" type into the "INT" type column `i` due to an overflow.

> INSERT INTO test VALUES ('a');
  ERROR: [CAST_INVALID_INPUT ERROR] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed

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

Если для spark.sql.storeAssignmentPolicy задано значение LEGACY, Spark SQL возвращается к поведению, распространенному до Spark 2.x. В этом режиме вместо использования ANSI CAST применяется устаревшие операции CAST. В рамках этой политики недопустимые приведения во время вставки в таблицу приводят к вставке значений NULL или некорректных значений, а не к исключению. Примеры:

-- spark.sql.storeAssignmentPolicy=LEGACY
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
> INSERT INTO test VALUES ('a');
> SELECT * FROM test;

-- Results
--  -2147483648 (incorrect value due to overflow)
--  null (cannot cast 'a' to INT)

Приведение типов

Повышение и приоритет типов

Если spark.sql.ansi.enabled установлено на true, Spark SQL использует несколько правил, которые управляют разрешением конфликтов между типами данных. В основе этого разрешения конфликтов является список приоритетов типов, определяющий, могут ли значения заданного типа данных быть повышены до другого типа данных неявно.

Тип данных список приоритетов (от самого узкого до самого широкого)
Байт Байт -> Шорт -> Инт -> Лонг -> Децимал -> Флоат* -> Дабл
Короткий Short - Int ->> Long -> Decimal-> Float* -> Double
int Int -> Long -> Десятичное -> Float* -> Double
Длинный Длинный -> Десятичный -> Плавающий* -> Двойной
Десятичное число Десятичный —> Float* —> Double
Тип с плавающей запятой Флоат -> Дабл
Двойной Двойной
Дата Дата -> Метка времени
Метка времени Метка времени
Строка Строка
Бинарный Бинарный
Логический Логический
Интервал Интервал
Карта Карта**
Массив Массив**
Структура Структура
  • Чтобы избежать потери точности, пропускается разрешение float для наименее общего типа.

** Для сложного типа правило приоритета применяется рекурсивно к элементам его компонентов.

К строковому типу (String) и нетипизированному значению NULL применяются особые правила. Значение NULL можно преобразовать в любой другой тип, а значение String можно преобразовать в любой скалярный тип данных.

Это графическое изображение списка приоритетов в виде направленного дерева: графическое представление правил приоритета

Разрешение наименьшего общего типа

Наименее распространенный тип из набора типов — самый узкий тип, доступный из списка приоритетов всеми элементами набора типов.

Разрешение наименее распространённого типа используется в следующих целях:

  • Чтобы решить, можно ли вызвать функцию, ожидающую параметр определенного типа, с помощью аргумента более узкого типа.
  • Определите тип аргумента для функций, которые ожидают один и тот же тип аргумента для нескольких параметров, таких как coalesce, least или greatest.
  • Чтобы вывести типы операндов для операторов, таких как арифметические операции или сравнения.
  • Определите тип результата для выражений, таких как выражение CASE.
  • Определить типы элементов, ключей или значений для конструкторов массивов и карт.

Если наименьший общий тип определяется как FLOAT, применяются специальные правила. При использовании значений с плавающей запятой, если любой из типов является INT, BIGINT или DECIMAL, наименее общий тип преобразуется в DOUBLE, чтобы избежать потенциальной потери цифр.

-- The coalesce function accepts any set of argument types as long as they share a least common type.
-- The result type is the least common type of the arguments.
> SET spark.sql.ansi.enabled=true;

> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT

> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: Incompatible types [INT, DATE]

> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)));
ARRAY<BIGINT>

> SELECT typeof(coalesce(1, 1F));
DOUBLE

> SELECT typeof(coalesce(1L, 1F));
DOUBLE

> SELECT (typeof(coalesce(1BD, 1F)));
DOUBLE

-- The substring function expects arguments of type INT for the start and length parameters.
> SELECT substring('hello', 1Y, 2);
he

> SELECT substring('hello', '1', 2);
he

> SELECT substring('hello', 1L, 2);
Error: Argument 2 requires an INT type.

> SELECT substring('hello', str, 2) FROM VALUES(CAST('1' AS STRING)) AS T(str);
Error: Argument 2 requires an INT type.

Функции SQL

Поведение некоторых функций SQL может отличаться в режиме ANSI (spark.sql.ansi.enabled=true).

  • size — эта функция возвращает значение NULL для входных данных со значением NULL в режиме ANSI.
  • element_at:
    • Эта функция выбрасывает исключение ArrayIndexOutOfBoundsException при использовании недопустимых индексов.
    • Эта функция выбрасывает NoSuchElementException, если ключ не существует в карте.
  • elt — эта функция выбрасывает ArrayIndexOutOfBoundsException при использовании недопустимых индексов.
  • make_date — эта функция вызывает сбой с исключением, если дата результата недопустима.
  • make_timestamp — эта функция вызывает ошибку с исключением, если метка времени результата недопустима.
  • make_interval — если интервал результата недействителен, эта функция завершается сбоем с исключением.
  • next_day — эта функция создает исключение IllegalArgumentException, если входные данные не являются допустимым днем недели.
  • parse_url — эта функция выбрасывает исключение IllegalArgumentException, если строка ввода не является допустимым URL-адресом.
  • to_date: эта функция завершается ошибкой, если входная строка не может быть проанализирована, или строка шаблона недопустима.
  • to_timestamp: эта функция завершается ошибкой, если входная строка не может быть проанализирована, или строка шаблона недопустима.
  • to_unix_timestamp: эта функция завершается ошибкой, если входная строка не может быть проанализирована, или строка шаблона недопустима.
  • unix_timestamp: эта функция завершается ошибкой, если входная строка не может быть проанализирована, или строка шаблона недопустима.

Операторы SQL

Поведение некоторых операторов SQL может отличаться в режиме ANSI (spark.sql.ansi.enabled=true).

  • array_col[index] — этот оператор выбрасывает исключение ArrayIndexOutOfBoundsException при использовании недопустимых индексов.
  • map_col[key] — этот оператор вызывает исключение NoSuchElementException, если ключ не существует в карте.
  • CAST(string_col AS TIMESTAMP): этот оператор завершается ошибкой, если входная строка не может быть проанализирована.
  • CAST(string_col AS DATE): этот оператор завершается ошибкой, если входная строка не может быть проанализирована.

Полезные функции для режима ANSI

Если режим ANSI включен, он создает исключения при недопустимых операциях. Для подавления этих исключений можно использовать перечисленные ниже функции SQL.

  • try_cast — идентична CAST, за исключением того, что она возвращает результат NULL, а не создает исключение при возникновении ошибки времени выполнения.
  • try_add идентичен оператору сложения +, за исключением того, что он возвращает результат NULL, а не создает исключение в случае переполнения целочисленного значения.
  • try_divide идентичен оператору деления /, за исключением того, что он возвращает результат NULL, а не создает исключение в случае деления на 0.

Ключевые слова SQL

Если spark.sql.ansi.enabled имеет значение true, SQL Spark будет использовать средство синтаксического анализа режима ANSI. В этом режиме SQL Spark имеет два вида ключевых слов:

  • Зарезервированные ключевые слова: ключевые слова, зарезервированные и не могут использоваться в качестве идентификаторов для таблицы, представления, столбца, функции, псевдонима и т. д.
  • Незарезервированные ключевые слова — ключевые слова, которые имеют специальное значение только в определенных контекстах и могут использоваться в качестве идентификаторов в других контекстах. Например, EXPLAIN SELECT ... является командой, но EXPLAIN можно использовать в качестве идентификаторов в других местах.

Если режим ANSI отключен, SQL Spark имеет два вида ключевых слов:

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

Значение spark.sql.ansi.enabled по умолчанию — false.

Ниже приведен список всех ключевых слов в Spark SQL.

Ключевое слово Режим ANSI для Spark SQL Режим SQL Spark по умолчанию SQL-2016
ДОБАВИТЬ не зарезервировано не зарезервировано не зарезервировано
ПОСЛЕ не зарезервировано не зарезервировано не зарезервировано
ВСЕ сдержанный не зарезервировано сдержанный
ИЗМЕНИТЬ не зарезервировано не зарезервировано сдержанный
ВСЕГДА не зарезервировано не зарезервировано не зарезервировано
Анализ  не зарезервировано не зарезервировано не зарезервировано
И сдержанный не зарезервировано сдержанный
АНТИ не зарезервировано строго не зарезервировано не зарезервировано
ЛЮБАЯ сдержанный не зарезервировано сдержанный
АРХИВ не зарезервировано не зарезервировано не зарезервировано
МАССИВ не зарезервировано не зарезервировано сдержанный
КАК сдержанный не зарезервировано сдержанный
ASC не зарезервировано не зарезервировано не зарезервировано
У не зарезервировано не зарезервировано сдержанный
АВТОРИЗАЦИЯ сдержанный не зарезервировано сдержанный
между не зарезервировано не зарезервировано сдержанный
ОБА сдержанный не зарезервировано сдержанный
ведро не зарезервировано не зарезервировано не зарезервировано
ВЕДРА не зарезервировано не зарезервировано не зарезервировано
У не зарезервировано не зарезервировано сдержанный
кэш не зарезервировано не зарезервировано не зарезервировано
КАСКАД не зарезервировано не зарезервировано не зарезервировано
Случай сдержанный не зарезервировано сдержанный
актёрский состав сдержанный не зарезервировано сдержанный
ИЗМЕНЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ПРОВЕРКА сдержанный не зарезервировано сдержанный
ОЧИСТИТЬ не зарезервировано не зарезервировано не зарезервировано
кластер не зарезервировано не зарезервировано не зарезервировано
сгруппированный не зарезервировано не зарезервировано не зарезервировано
CODEGEN не зарезервировано не зарезервировано не зарезервировано
СОРТИРОВКА сдержанный не зарезервировано сдержанный
КОЛЛЕКЦИЯ не зарезервировано не зарезервировано не зарезервировано
COLUMN сдержанный не зарезервировано сдержанный
COLUMNS не зарезервировано не зарезервировано не зарезервировано
КОММЕНТАРИЙ не зарезервировано не зарезервировано не зарезервировано
коммит не зарезервировано не зарезервировано сдержанный
КОМПАКТНЫЙ не зарезервировано не зарезервировано не зарезервировано
Уплотнения не зарезервировано не зарезервировано не зарезервировано
ВЫЧИСЛЕНИЕ не зарезервировано не зарезервировано не зарезервировано
КОНКАТЕНАЦИЯ не зарезервировано не зарезервировано не зарезервировано
CONSTRAINT сдержанный не зарезервировано сдержанный
Стоимость не зарезервировано не зарезервировано не зарезервировано
создать сдержанный не зарезервировано сдержанный
крест сдержанный строго не зарезервировано сдержанный
КУБ не зарезервировано не зарезервировано сдержанный
ТЕКУЩИЙ не зарезервировано не зарезервировано сдержанный
ТЕКУЩАЯ_ДАТА сдержанный не зарезервировано сдержанный
Текущее время сдержанный не зарезервировано сдержанный
CURRENT_TIMESTAMP сдержанный не зарезервировано сдержанный
ТЕКУЩИЙ_ПОЛЬЗОВАТЕЛЬ сдержанный не зарезервировано сдержанный
ДАННЫЕ не зарезервировано не зарезервировано не зарезервировано
База данных не зарезервировано не зарезервировано не зарезервировано
БАЗЫ ДАННЫХ не зарезервировано не зарезервировано не зарезервировано
ДЕНЬ не зарезервировано не зарезервировано не зарезервировано
DBPROPERTIES не зарезервировано не зарезервировано не зарезервировано
ОПРЕДЕЛЕНО не зарезервировано не зарезервировано не зарезервировано
Удалить не зарезервировано не зарезервировано сдержанный
ОГРАНИЧЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
DESC не зарезервировано не зарезервировано не зарезервировано
ОПИСАТЬ не зарезервировано не зарезервировано сдержанный
DFS не зарезервировано не зарезервировано не зарезервировано
Каталоги не зарезервировано не зарезервировано не зарезервировано
КАТАЛОГ не зарезервировано не зарезервировано не зарезервировано
Отличительный сдержанный не зарезервировано сдержанный
РАСПРЕДЕЛИТЬ не зарезервировано не зарезервировано не зарезервировано
DIV не зарезервировано не зарезервировано не является ключевым словом
БРОСИТЬ не зарезервировано не зарезервировано сдержанный
ИНАЧЕ сдержанный не зарезервировано сдержанный
КОНЕЦ сдержанный не зарезервировано сдержанный
Эскейп сдержанный не зарезервировано сдержанный
СБЕЖАЛ не зарезервировано не зарезервировано не зарезервировано
КРОМЕ сдержанный строго не зарезервировано сдержанный
ОБМЕН не зарезервировано не зарезервировано не зарезервировано
СУЩЕСТВУЕТ не зарезервировано не зарезервировано сдержанный
EXPLAIN не зарезервировано не зарезервировано не зарезервировано
ЭКСПОРТ не зарезервировано не зарезервировано не зарезервировано
Расширенный не зарезервировано не зарезервировано не зарезервировано
ВНЕШНИЙ не зарезервировано не зарезервировано сдержанный
Экстракт не зарезервировано не зарезервировано сдержанный
ЛОЖЬ сдержанный не зарезервировано сдержанный
ПОЛУЧАТЬ сдержанный не зарезервировано сдержанный
ПОЛЯ не зарезервировано не зарезервировано не зарезервировано
ФИЛЬТР сдержанный не зарезервировано сдержанный
Формат файла не зарезервировано не зарезервировано не зарезервировано
первый не зарезервировано не зарезервировано не зарезервировано
FN не зарезервировано не зарезервировано не зарезервировано
СЛЕДУЮЩЕЕ не зарезервировано не зарезервировано не зарезервировано
ДЛЯ сдержанный не зарезервировано сдержанный
ИНОСТРАННЫЙ сдержанный не зарезервировано сдержанный
Формат не зарезервировано не зарезервировано не зарезервировано
ОТФОРМАТИРОВАНО не зарезервировано не зарезервировано не зарезервировано
ОТ сдержанный не зарезервировано сдержанный
ПОЛНЫЙ сдержанный строго не зарезервировано сдержанный
Функция не зарезервировано не зарезервировано сдержанный
ФУНКЦИИ не зарезервировано не зарезервировано не зарезервировано
СГЕНЕРИРОВАНО не зарезервировано не зарезервировано не зарезервировано
Глобальный не зарезервировано не зарезервировано сдержанный
GRANT сдержанный не зарезервировано сдержанный
гранты не зарезервировано не зарезервировано не зарезервировано
ГРУППА сдержанный не зарезервировано сдержанный
ГРУППИРОВАНИЕ не зарезервировано не зарезервировано сдержанный
HAVING сдержанный не зарезервировано сдержанный
ЧАС не зарезервировано не зарезервировано не зарезервировано
ЕСЛИ не зарезервировано не зарезервировано не является ключевым словом
ИГНОРИРОВАТЬ не зарезервировано не зарезервировано не зарезервировано
ИМПОРТ не зарезервировано не зарезервировано не зарезервировано
В сдержанный не зарезервировано сдержанный
ИНДЕКС не зарезервировано не зарезервировано не зарезервировано
Индексы не зарезервировано не зарезервировано не зарезервировано
внутренний сдержанный строго не зарезервировано сдержанный
INPATH не зарезервировано не зарезервировано не зарезервировано
INPUTFORMAT не зарезервировано не зарезервировано не зарезервировано
INSERT не зарезервировано не зарезервировано сдержанный
Пересечение сдержанный строго не зарезервировано сдержанный
ИНТЕРВАЛ не зарезервировано не зарезервировано сдержанный
В сдержанный не зарезервировано сдержанный
ЕСТЬ сдержанный не зарезервировано сдержанный
ПРЕДМЕТЫ не зарезервировано не зарезервировано не зарезервировано
JOIN сдержанный строго не зарезервировано сдержанный
JSON (формат обмена данными) не зарезервировано не зарезервировано не зарезервировано
Ключ не зарезервировано не зарезервировано не зарезервировано
Клавиши не зарезервировано не зарезервировано не зарезервировано
последний не зарезервировано не зарезервировано не зарезервировано
боковой сдержанный строго не зарезервировано сдержанный
ленивый не зарезервировано не зарезервировано не зарезервировано
ведущий сдержанный не зарезервировано сдержанный
левый сдержанный строго не зарезервировано сдержанный
Нравится не зарезервировано не зарезервировано сдержанный
ILIKE не зарезервировано не зарезервировано не зарезервировано
LIMIT не зарезервировано не зарезервировано не зарезервировано
ЛИНИИ не зарезервировано не зарезервировано не зарезервировано
LIST не зарезервировано не зарезервировано не зарезервировано
ЗАГРУЗКА не зарезервировано не зарезервировано не зарезервировано
ЛОКАЛЬНО не зарезервировано не зарезервировано сдержанный
МЕСТОПОЛОЖЕНИЕ не зарезервировано не зарезервировано не зарезервировано
замок не зарезервировано не зарезервировано не зарезервировано
БЛОКИРОВКИ не зарезервировано не зарезервировано не зарезервировано
ЛОГИЧЕСКИЙ не зарезервировано не зарезервировано не зарезервировано
МАКРО не зарезервировано не зарезервировано не зарезервировано
Карта не зарезервировано не зарезервировано не зарезервировано
СОВПАДАЕТ не зарезервировано не зарезервировано не зарезервировано
ОБЪЕДИНИТЬ не зарезервировано не зарезервировано не зарезервировано
МИНУТА не зарезервировано не зарезервировано не зарезервировано
МИНУС не зарезервировано строго не зарезервировано не зарезервировано
МЕСЯЦ не зарезервировано не зарезервировано не зарезервировано
MSCK; не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВО ИМЕН не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВА ИМЕН не зарезервировано не зарезервировано не зарезервировано
НАТУРАЛЬНЫЙ сдержанный строго не зарезервировано сдержанный
Нет не зарезервировано не зарезервировано сдержанный
Логическое НЕ сдержанный не зарезервировано сдержанный
Отсутствует сдержанный не зарезервировано сдержанный
пустые значения не зарезервировано не зарезервировано не зарезервировано
ИЗ не зарезервировано не зарезервировано сдержанный
ВКЛ. сдержанный строго не зарезервировано сдержанный
ТОЛЬКО сдержанный не зарезервировано сдержанный
ОПЦИЯ не зарезервировано не зарезервировано не зарезервировано
ПАРАМЕТРЫ не зарезервировано не зарезервировано не зарезервировано
ИЛИ сдержанный не зарезервировано сдержанный
ЗАКАЗ сдержанный не зарезервировано сдержанный
ВЫКЛ не зарезервировано не зарезервировано сдержанный
внешний сдержанный не зарезервировано сдержанный
ФОРМАТВЫВОДА не зарезервировано не зарезервировано не зарезервировано
Завершение не зарезервировано не зарезервировано не зарезервировано
Перекрытия сдержанный не зарезервировано сдержанный
наложение не зарезервировано не зарезервировано не зарезервировано
перезаписать не зарезервировано не зарезервировано не зарезервировано
PARTITION не зарезервировано не зарезервировано сдержанный
РАЗДЕЛЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
РАЗДЕЛЫ не зарезервировано не зарезервировано не зарезервировано
ПРОЦЕНТ не зарезервировано не зарезервировано не зарезервировано
PIVOT не зарезервировано не зарезервировано не зарезервировано
РАЗМЕЩЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ПОЗИЦИЯ не зарезервировано не зарезервировано сдержанный
ПРЕДШЕСТВУЮЩИЙ не зарезервировано не зарезервировано не зарезервировано
ОСНОВНОЙ сдержанный не зарезервировано сдержанный
УЧАСТНИКОВ не зарезервировано не зарезервировано не зарезервировано
СВОЙСТВА не зарезервировано не зарезервировано не зарезервировано
ЧИСТКА не зарезервировано не зарезервировано не зарезервировано
QUALIFY сдержанный не зарезервировано сдержанный
запрос не зарезервировано не зарезервировано не зарезервировано
диапазон не зарезервировано не зарезервировано сдержанный
ПОЛУЧАТЕЛЬ не зарезервировано не зарезервировано не зарезервировано
RECIPIENTS не зарезервировано не зарезервировано не зарезервировано
РЕКОРДРИДЕР не зарезервировано не зарезервировано не зарезервировано
Записыватель не зарезервировано не зарезервировано не зарезервировано
Восстановить не зарезервировано не зарезервировано не зарезервировано
уменьшить не зарезервировано не зарезервировано не зарезервировано
ССЫЛКИ сдержанный не зарезервировано сдержанный
REFRESH не зарезервировано не зарезервировано не зарезервировано
REGEXP не зарезервировано не зарезервировано не является ключевым словом
REMOVE не зарезервировано не зарезервировано не зарезервировано
ПЕРЕИМЕНОВАТЬ не зарезервировано не зарезервировано не зарезервировано
РЕМОНТ не зарезервировано не зарезервировано не зарезервировано
ЗАМЕНИТЬ не зарезервировано не зарезервировано не зарезервировано
RESET не зарезервировано не зарезервировано не зарезервировано
УВАЖЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ОГРАНИЧИТЬ не зарезервировано не зарезервировано не зарезервировано
REVOKE не зарезервировано не зарезервировано сдержанный
ПРАВО сдержанный строго не зарезервировано сдержанный
RLIKE не зарезервировано не зарезервировано не зарезервировано
РОЛЬ не зарезервировано не зарезервировано не зарезервировано
РОЛИ не зарезервировано не зарезервировано не зарезервировано
Откат не зарезервировано не зарезервировано сдержанный
свёртка не зарезервировано не зарезервировано сдержанный
РЯД не зарезервировано не зарезервировано сдержанный
СТРОКИ не зарезервировано не зарезервировано сдержанный
SCHEMA не зарезервировано не зарезервировано не зарезервировано
СХЕМЫ не зарезервировано не зарезервировано не является ключевым словом
ВТОРОЙ не зарезервировано не зарезервировано не зарезервировано
SELECT сдержанный не зарезервировано сдержанный
ПОЛУ не зарезервировано строго не зарезервировано не зарезервировано
РАЗДЕЛЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
SERDE не зарезервировано не зарезервировано не зарезервировано
SERDEPROPERTIES не зарезервировано не зарезервировано не зарезервировано
ПОЛЬЗОВАТЕЛЬ СЕССИИ сдержанный не зарезервировано сдержанный
SET не зарезервировано не зарезервировано сдержанный
множества не зарезервировано не зарезервировано не зарезервировано
ПОДЕЛИТЬСЯ не зарезервировано не зарезервировано не зарезервировано
SHARES не зарезервировано не зарезервировано не зарезервировано
Шоу не зарезервировано не зарезервировано не зарезервировано
ПЕРЕКОС не зарезервировано не зарезервировано не зарезервировано
НЕКОТОРЫЕ сдержанный не зарезервировано сдержанный
СОРТИРОВКА не зарезервировано не зарезервировано не зарезервировано
отсортировано не зарезервировано не зарезервировано не зарезервировано
НАЧАЛО не зарезервировано не зарезервировано сдержанный
СТАТИСТИКА не зарезервировано не зарезервировано не зарезервировано
СОХРАНЕНО не зарезервировано не зарезервировано не зарезервировано
стратифицировать не зарезервировано не зарезервировано не зарезервировано
СТРУКТУРА не зарезервировано не зарезервировано не зарезервировано
SUBSTR не зарезервировано не зарезервировано не зарезервировано
подстрока не зарезервировано не зарезервировано не зарезервировано
SYNC не зарезервировано не зарезервировано не зарезервировано
TABLE сдержанный не зарезервировано сдержанный
TABLES не зарезервировано не зарезервировано не зарезервировано
TABLESAMPLE не зарезервировано не зарезервировано сдержанный
TBLPROPERTIES не зарезервировано не зарезервировано не зарезервировано
TEMP не зарезервировано не зарезервировано не является ключевым словом
Временный не зарезервировано не зарезервировано не зарезервировано
ПРЕКРАЩЕНО не зарезервировано не зарезервировано не зарезервировано
ЗАТЕМ сдержанный не зарезервировано сдержанный
ВРЕМЯ сдержанный не зарезервировано сдержанный
КОМУ сдержанный не зарезервировано сдержанный
Касание не зарезервировано не зарезервировано не зарезервировано
Отставание сдержанный не зарезервировано сдержанный
ТРАНЗАКЦИЯ не зарезервировано не зарезервировано не зарезервировано
ТРАНЗАКЦИИ не зарезервировано не зарезервировано не зарезервировано
ПРЕОБРАЗОВАНИЕ не зарезервировано не зарезервировано не зарезервировано
ПОДСТРИГАТЬ не зарезервировано не зарезервировано не зарезервировано
ИСТИНА не зарезервировано не зарезервировано сдержанный
УСЕКАТЬ не зарезервировано не зарезервировано сдержанный
TRY_CAST не зарезервировано не зарезервировано не зарезервировано
ТИП не зарезервировано не зарезервировано не зарезервировано
Разархивировать не зарезервировано не зарезервировано не зарезервировано
Безграничный не зарезервировано не зарезервировано не зарезервировано
Очистить кэш не зарезервировано не зарезервировано не зарезервировано
союз сдержанный строго не зарезервировано сдержанный
УНИКАЛЬНЫЙ сдержанный не зарезервировано сдержанный
НЕИЗВЕСТНО сдержанный не зарезервировано сдержанный
РАЗБЛОКИРОВАТЬ не зарезервировано не зарезервировано не зарезервировано
UNSET не зарезервировано не зарезервировано не зарезервировано
UPDATE не зарезервировано не зарезервировано сдержанный
ИСПОЛЬЗОВАНИЕ не зарезервировано не зарезервировано не зарезервировано
Пользователь сдержанный не зарезервировано сдержанный
Использование сдержанный строго не зарезервировано сдержанный
VALUES не зарезервировано не зарезервировано сдержанный
ВИД не зарезервировано не зарезервировано не зарезервировано
VIEWS не зарезервировано не зарезервировано не зарезервировано
Когда сдержанный не зарезервировано сдержанный
WHERE сдержанный не зарезервировано сдержанный
WINDOW не зарезервировано не зарезервировано сдержанный
ВМЕСТЕ С сдержанный не зарезервировано сдержанный
ГОД не зарезервировано не зарезервировано не зарезервировано
ЗОНА не зарезервировано не зарезервировано не зарезервировано