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


Соответствие 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 могут не соответствовать стандарту SQL ANSI, но их поведение соответствует стилю SQL ANSI.

Кроме того, 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 приведены в следующей таблице. "Да" означает, что сочетание является синтаксически допустимым без ограничений, а "Нет" означает, что сочетание недопустимо.

Исходный/целевой Числовое Строка Дата Метка времени Интервал Логический Binary Массив Карта Структура
Числовое И Y N N N Y N N N N
Строка Y Y Y Y Y Y Y N N N
Дата N Y Y У N N N N N N
Метка времени N Ы Y Y N N N N N N
Интервал N Y N N Y N N N N N
Логический Y Y N N N Y N N N N
Binary У N N N N N Y N N N
Массив N N N N N N N Y N N
Карта N N N N N N N N Y N
Структура N N N N N N N N N Y
-- 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
Длинный Длинный -> Десятичный -> Плавающий* -> Двойной
Десятичное число Decimal -> Float* -> Double
Тип с плавающей запятой Float -> Double
Двойной Двойной
Дата Дата -> Метка времени
Метка времени Метка времени
Строка Строка
Бинарный двоичный
Логический Логический
Интервал Интервал
Карта Карта**
Массив Array**
Структура Структура
  • Чтобы избежать потери точности, пропускается разрешение 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
ДОБАВИТЬ не зарезервировано не зарезервировано не зарезервировано
ПОСЛЕ не зарезервировано не зарезервировано не зарезервировано
ВСЕ сдержанный не зарезервировано сдержанный
ИЗМЕНИТЬ не зарезервировано не зарезервировано сдержанный
ВСЕГДА не зарезервировано не зарезервировано не зарезервировано
Анализ  не зарезервировано не зарезервировано не зарезервировано
И сдержанный не зарезервировано сдержанный
АНТИ не зарезервировано строго не зарезервировано не зарезервировано
ЛЮБАЯ сдержанный не зарезервировано сдержанный
АРХИВ не зарезервировано не зарезервировано не зарезервировано
ARRAY не зарезервировано не зарезервировано сдержанный
AS сдержанный не зарезервировано сдержанный
ASC не зарезервировано не зарезервировано не зарезервировано
AT не зарезервировано не зарезервировано сдержанный
АВТОРИЗАЦИЯ сдержанный не зарезервировано резервированный
между не зарезервировано не зарезервировано сдержанный
ОБА сдержанный не зарезервировано сдержанный
ведро не зарезервировано не зарезервировано не зарезервировано
ВЕДРА не зарезервировано не зарезервировано не зарезервировано
BY не зарезервировано не зарезервировано сдержанный
CACHE не зарезервировано не зарезервировано не зарезервировано
КАСКАД не зарезервировано не зарезервировано не зарезервировано
Случай зарезервированный не зарезервировано сдержанный
CAST зарезервированный не зарезервировано сдержанный
ИЗМЕНЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ПРОВЕРКА сдержанный не зарезервировано зарезервированный
ОЧИСТИТЬ не зарезервировано не зарезервировано не зарезервировано
кластер не зарезервировано не зарезервировано не зарезервировано
сгруппированный не зарезервировано не зарезервировано не зарезервировано
CODEGEN не зарезервировано не зарезервировано не зарезервировано
COLLATE сдержанный не зарезервировано сдержанный
КОЛЛЕКЦИЯ не зарезервировано не зарезервировано не зарезервировано
COLUMN сдержанный не зарезервировано зарезервированный
COLUMNS не зарезервировано не зарезервировано не зарезервировано
КОММЕНТАРИЙ не зарезервировано не зарезервировано не зарезервировано
коммит не зарезервировано не зарезервировано сдержанный
COMPACT не зарезервировано не зарезервировано не зарезервировано
Уплотнения не зарезервировано не зарезервировано не зарезервировано
ВЫЧИСЛЕНИЕ не зарезервировано не зарезервировано не зарезервировано
CONCATENATE не зарезервировано не зарезервировано не зарезервировано
CONSTRAINT зарезервированный не зарезервировано сдержанный
Стоимость не зарезервировано не зарезервировано не зарезервировано
создать сдержанный не зарезервировано сдержанный
крест сдержанный строго-незарезервировано сдержанный
CUBE не зарезервировано не зарезервировано зарезервированный
ТЕКУЩИЙ не зарезервировано не зарезервировано сдержанный
CURRENT_DATE сдержанный не зарезервировано сдержанный
Текущее время сдержанный не зарезервировано сдержанный
CURRENT_TIMESTAMP сдержанный не зарезервировано сдержанный
ТЕКУЩИЙ_ПОЛЬЗОВАТЕЛЬ сдержанный не зарезервировано сдержанный
ДАННЫЕ не зарезервировано не зарезервировано не зарезервировано
База данных не зарезервировано не зарезервировано не зарезервировано
БАЗЫ ДАННЫХ не зарезервировано не зарезервировано не зарезервировано
ДЕНЬ не зарезервировано не зарезервировано не зарезервировано
DBPROPERTIES не зарезервировано не зарезервировано не зарезервировано
ОПРЕДЕЛЕНО не зарезервировано не зарезервировано не зарезервировано
Удалить не зарезервировано не зарезервировано зарезервированный
ОГРАНИЧЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
DESC не зарезервировано не зарезервировано не зарезервировано
ОПИСАТЬ не зарезервировано не зарезервировано сдержанный
DFS не зарезервировано не зарезервировано не зарезервировано
Каталоги не зарезервировано не зарезервировано не зарезервировано
КАТАЛОГ не зарезервировано не зарезервировано не зарезервировано
Отличительный сдержанный не зарезервировано сдержанный
РАСПРЕДЕЛИТЬ не зарезервировано не зарезервировано не зарезервировано
DIV не зарезервировано не зарезервировано не является ключевым словом
БРОСИТЬ не зарезервировано не зарезервировано сдержанный
ИНАЧЕ сдержанный не зарезервировано сдержанный
КОНЕЦ сдержанный не зарезервировано зарезервированный
Эскейп сдержанный не зарезервировано сдержанный
СБЕЖАЛ не зарезервировано не зарезервировано не зарезервировано
КРОМЕ сдержанный строго-незарезервированный сдержанный
ОБМЕН не зарезервировано не зарезервировано не зарезервировано
СУЩЕСТВУЕТ не зарезервировано не зарезервировано сдержанный
EXPLAIN не зарезервировано не зарезервировано не зарезервировано
ЭКСПОРТ не зарезервировано не зарезервировано не зарезервировано
Расширенный не зарезервировано не зарезервировано не зарезервировано
ВНЕШНИЙ не зарезервировано не зарезервировано сдержанный
EXTRACT не зарезервировано не зарезервировано сдержанный
ЛОЖЬ сдержанный не зарезервировано сдержанный
FETCH сдержанный не зарезервировано сдержанный
ПОЛЯ не зарезервировано не зарезервировано не зарезервировано
ФИЛЬТР сдержанный не зарезервировано сдержанный
Формат файла не зарезервировано не зарезервировано не зарезервировано
первый не зарезервировано не зарезервировано не зарезервировано
FN не зарезервировано не зарезервировано не зарезервировано
СЛЕДУЮЩЕЕ не зарезервировано не зарезервировано не зарезервировано
ДЛЯ сдержанный не зарезервировано сдержанный
ИНОСТРАННЫЙ сдержанный не зарезервировано сдержанный
Формат не зарезервировано не зарезервировано не зарезервировано
ОТФОРМАТИРОВАНО не зарезервировано не зарезервировано не зарезервировано
ОТ сдержанный не зарезервировано сдержанный
ПОЛНЫЙ сдержанный строго не зарезервировано сдержанный
Функция не зарезервировано не зарезервировано сдержанный
ФУНКЦИИ не зарезервировано не зарезервировано не зарезервировано
СГЕНЕРИРОВАНО не зарезервировано не зарезервировано не зарезервировано
Глобальный не зарезервировано не зарезервировано скрытный
GRANT сдержанный не зарезервировано сдержанный
гранты не зарезервировано не зарезервировано не зарезервировано
ГРУППА сдержанный не зарезервировано сдержанный
ГРУППИРОВАНИЕ не зарезервировано не зарезервировано сдержанный
HAVING сдержанный не зарезервировано сдержанный
ЧАС не зарезервировано не зарезервировано не зарезервировано
ЕСЛИ не зарезервировано не зарезервировано не является ключевым словом
IGNORE не зарезервировано не зарезервировано не зарезервировано
ИМПОРТ не зарезервировано не зарезервировано не зарезервировано
В сдержанный не зарезервировано сдержанный
ИНДЕКС не зарезервировано не зарезервировано не зарезервировано
Индексы не зарезервировано не зарезервировано не зарезервировано
внутренний сдержанный строго не зарезервировано сдержанный
INPATH не зарезервировано не зарезервировано не зарезервировано
INPUTFORMAT не зарезервировано не зарезервировано не зарезервировано
INSERT не зарезервировано не зарезервировано сдержанный
Пересечение сдержанный строго не зарезервировано сдержанный
ИНТЕРВАЛ не зарезервировано не зарезервировано сдержанный
INTO сдержанный не зарезервировано сдержанный
IS сдержанный не зарезервировано сдержанный
ПРЕДМЕТЫ не зарезервировано не зарезервировано не зарезервировано
JOIN сдержанный нестрогое, не резервируемое сдержанный
JSON (формат обмена данными) не зарезервировано не зарезервировано не зарезервировано
Ключ не зарезервировано не зарезервировано не зарезервировано
Клавиши не зарезервировано не зарезервировано не зарезервировано
последний не зарезервировано не зарезервировано не зарезервировано
боковой сдержанный строгое-незарезервированное сдержанный / зарезервированный
ленивый не зарезервировано не зарезервировано не зарезервировано
ведущий сдержанный не зарезервировано зарезервировано
левый сдержанный строго-незарезервированный сдержанный
Нравится не зарезервировано не зарезервировано зарезервированный / скрытный
ILIKE не зарезервировано не зарезервировано не зарезервировано
LIMIT не зарезервировано не зарезервировано не зарезервировано
ЛИНИИ не зарезервировано не зарезервировано не зарезервировано
LIST не зарезервировано не зарезервировано не зарезервировано
LOAD не зарезервировано не зарезервировано не зарезервировано
ЛОКАЛЬНО не зарезервировано не зарезервировано сдержанный
LOCATION не зарезервировано не зарезервировано не зарезервировано
замок не зарезервировано не зарезервировано не зарезервировано
БЛОКИРОВКИ не зарезервировано не зарезервировано не зарезервировано
ЛОГИЧЕСКИЙ не зарезервировано не зарезервировано не зарезервировано
МАКРО не зарезервировано не зарезервировано не зарезервировано
Карта не зарезервировано не зарезервировано не зарезервировано
СОВПАДАЕТ не зарезервировано не зарезервировано не зарезервировано
ОБЪЕДИНИТЬ не зарезервировано не зарезервировано не зарезервировано
МИНУТА не зарезервировано не зарезервировано не зарезервировано
MINUS не зарезервировано строго незарезервированный не зарезервировано
МЕСЯЦ не зарезервировано не зарезервировано не зарезервировано
MSCK; не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВО ИМЕН не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВА ИМЕН не зарезервировано не зарезервировано не зарезервировано
НАТУРАЛЬНЫЙ сдержанный строгий нерезервируемый сдержанный
Нет не зарезервировано не зарезервировано сдержанный
Логическое НЕ сдержанный не зарезервировано зарезервированный
NULL сдержанный не зарезервировано сдержанный
пустые значения не зарезервировано не зарезервировано не зарезервировано
OF не зарезервировано не зарезервировано сдержанный
ВКЛ. сдержанный строго без зарезервированности сдержанный
ТОЛЬКО резервированный не зарезервировано сдержанный / зарезервированный
ОПЦИЯ не зарезервировано не зарезервировано не зарезервировано
ПАРАМЕТРЫ не зарезервировано не зарезервировано не зарезервировано
ИЛИ сдержанный не зарезервировано сдержанный
ЗАКАЗ сдержанный не зарезервировано сдержанный
ВЫКЛ не зарезервировано не зарезервировано сдержанный
внешний сдержанный не зарезервировано сдержанный
ФОРМАТВЫВОДА не зарезервировано не зарезервировано не зарезервировано
Завершение не зарезервировано не зарезервировано не зарезервировано
Перекрытия сдержанный не зарезервировано зарезервированный
наложение не зарезервировано не зарезервировано не зарезервировано
перезаписать не зарезервировано не зарезервировано не зарезервировано
PARTITION не зарезервировано не зарезервировано сдержанный
РАЗДЕЛЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
РАЗДЕЛЫ не зарезервировано не зарезервировано не зарезервировано
ПРОЦЕНТ не зарезервировано не зарезервировано не зарезервировано
PIVOT не зарезервировано не зарезервировано не зарезервировано
РАЗМЕЩЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ПОЗИЦИЯ не зарезервировано не зарезервировано сдержанный
ПРЕДШЕСТВУЮЩИЙ не зарезервировано не зарезервировано не зарезервировано
ОСНОВНОЙ сдержанный не зарезервировано сдержанный
PRINCIPALS не зарезервировано не зарезервировано не зарезервировано
СВОЙСТВА не зарезервировано не зарезервировано не зарезервировано
ЧИСТКА не зарезервировано не зарезервировано не зарезервировано
QUALIFY сдержанный не зарезервировано скрытный
запрос не зарезервировано не зарезервировано не зарезервировано
диапазон не зарезервировано не зарезервировано сдержанный
ПОЛУЧАТЕЛЬ не зарезервировано не зарезервировано не зарезервировано
RECIPIENTS не зарезервировано не зарезервировано не зарезервировано
RECORDREADER не зарезервировано не зарезервировано не зарезервировано
Записыватель не зарезервировано не зарезервировано не зарезервировано
Восстановить не зарезервировано не зарезервировано не зарезервировано
уменьшить не зарезервировано не зарезервировано не зарезервировано
ССЫЛКИ сдержанный не зарезервировано сдержанный
REFRESH не зарезервировано не зарезервировано не зарезервировано
REGEXP не зарезервировано не зарезервировано не является ключевым словом
REMOVE не зарезервировано не зарезервировано не зарезервировано
ПЕРЕИМЕНОВАТЬ не зарезервировано не зарезервировано не зарезервировано
РЕМОНТ не зарезервировано не зарезервировано не зарезервировано
ЗАМЕНИТЬ не зарезервировано не зарезервировано не зарезервировано
RESET не зарезервировано не зарезервировано не зарезервировано
УВАЖЕНИЕ не зарезервировано не зарезервировано не зарезервировано
ОГРАНИЧИТЬ не зарезервировано не зарезервировано не зарезервировано
REVOKE не зарезервировано не зарезервировано сдержанный
RIGHT сдержанный строгое отсутствие резервирования сдержанный
RLIKE не зарезервировано не зарезервировано не зарезервировано
РОЛЬ не зарезервировано не зарезервировано не зарезервировано
РОЛИ не зарезервировано не зарезервировано не зарезервировано
Откат не зарезервировано не зарезервировано сдержанный
свёртка не зарезервировано не зарезервировано сдержанный
ROW не зарезервировано не зарезервировано сдержанный
СТРОКИ не зарезервировано не зарезервировано сдержанный
SCHEMA не зарезервировано не зарезервировано не зарезервировано
СХЕМЫ не зарезервировано не зарезервировано не является ключевым словом
ВТОРОЙ не зарезервировано не зарезервировано не зарезервировано
SELECT сдержанный не зарезервировано сдержанный
SEMI не зарезервировано строго-незарезервированный не зарезервировано
РАЗДЕЛЕННЫЙ не зарезервировано не зарезервировано не зарезервировано
SERDE не зарезервировано не зарезервировано не зарезервировано
SERDEPROPERTIES не зарезервировано не зарезервировано не зарезервировано
SESSION_USER сдержанный не зарезервировано сдержанный
SET не зарезервировано не зарезервировано сдержанный
множества не зарезервировано не зарезервировано не зарезервировано
ПОДЕЛИТЬСЯ не зарезервировано не зарезервировано не зарезервировано
SHARES не зарезервировано не зарезервировано не зарезервировано
Шоу не зарезервировано не зарезервировано не зарезервировано
SKEWED не зарезервировано не зарезервировано не зарезервировано
НЕКОТОРЫЕ сдержанный не зарезервировано сдержанный
СОРТИРОВКА не зарезервировано не зарезервировано не зарезервировано
отсортировано не зарезервировано не зарезервировано не зарезервировано
НАЧАЛО не зарезервировано не зарезервировано сдержанный
СТАТИСТИКА не зарезервировано не зарезервировано не зарезервировано
СОХРАНЕНО не зарезервировано не зарезервировано не зарезервировано
стратифицировать не зарезервировано не зарезервировано не зарезервировано
СТРУКТУРА не зарезервировано не зарезервировано не зарезервировано
SUBSTR не зарезервировано не зарезервировано не зарезервировано
подстрока не зарезервировано не зарезервировано не зарезервировано
SYNC не зарезервировано не зарезервировано не зарезервировано
TABLE сдержанный не зарезервировано сдержанный
TABLES не зарезервировано не зарезервировано не зарезервировано
TABLESAMPLE не зарезервировано не зарезервировано сдержанный
TBLPROPERTIES не зарезервировано не зарезервировано не зарезервировано
TEMP не зарезервировано не зарезервировано не является ключевым словом
Временный не зарезервировано не зарезервировано не зарезервировано
ПРЕКРАЩЕНО не зарезервировано не зарезервировано не зарезервировано
ЗАТЕМ сдержанный не зарезервировано сдержанный
ВРЕМЯ зарезервированный не зарезервировано сдержанный
TO сдержанный не зарезервировано сдержанный
Касание не зарезервировано не зарезервировано не зарезервировано
TRAILING сдержанный не зарезервировано зарезервированный
ТРАНЗАКЦИЯ не зарезервировано не зарезервировано не зарезервировано
ТРАНЗАКЦИИ не зарезервировано не зарезервировано не зарезервировано
ПРЕОБРАЗОВАНИЕ не зарезервировано не зарезервировано не зарезервировано
TRIM не зарезервировано не зарезервировано не зарезервировано
ИСТИНА не зарезервировано не зарезервировано сдержанный
TRUNCATE не зарезервировано не зарезервировано зарезервировано
TRY_CAST не зарезервировано не зарезервировано не зарезервировано
ТИП не зарезервировано не зарезервировано не зарезервировано
Разархивировать не зарезервировано не зарезервировано не зарезервировано
Безграничный не зарезервировано не зарезервировано не зарезервировано
UNCACHE не зарезервировано не зарезервировано не зарезервировано
союз сдержанный строго не зарезервировано сдержанный
UNIQUE сдержанный не зарезервировано сдержанный
НЕИЗВЕСТНО сдержанный не зарезервировано сдержанный
РАЗБЛОКИРОВАТЬ не зарезервировано не зарезервировано не зарезервировано
UNSET не зарезервировано не зарезервировано не зарезервировано
UPDATE не зарезервировано не зарезервировано сдержанный
ИСПОЛЬЗОВАНИЕ не зарезервировано не зарезервировано не зарезервировано
Пользователь сдержанный не зарезервировано сдержанный
Использование сдержанный строгий-незарезервированный сдержанный
VALUES не зарезервировано не зарезервировано сдержанный
ВИД не зарезервировано не зарезервировано не зарезервировано
VIEWS не зарезервировано не зарезервировано не зарезервировано
Когда сдержанный не зарезервировано сдержанный
WHERE сдержанный не зарезервировано сдержанный
WINDOW не зарезервировано не зарезервировано сдержанный
ВМЕСТЕ С сдержанный не зарезервировано сдержанный
ГОД не зарезервировано не зарезервировано не зарезервировано
ЗОНА не зарезервировано не зарезервировано не зарезервировано