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


Соответствие 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, то в SQL Spark используется диалект, совместимый с ANSI, а не с Hive. Например, при недопустимых входных данных оператора SQL или функции Spark вызывает исключение во время выполнения, а не возвращает результаты NULL. Некоторые возможности диалекта ANSI могут не соответствовать стандарту SQL ANSI, но их поведение соответствует стилю SQL ANSI.

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

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

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

Имя свойства По умолчанию. Значение
spark.sql.ansi.enabled false Если значение равно true, Spark пытается обеспечить соответствие спецификации SQL ANSI:

* Вызывает исключение времени выполнения, если в любой операции с целочисленным или десятичным полем возникает переполнение.
* Запрещает использование зарезервированных ключевых слов SQL ANSI в качестве идентификаторов в средстве синтаксического анализа SQL.
spark.sql.storeAssignmentPolicy ANSI При сохранении значения в столбец с другим типом данных Spark выполняет преобразование типов. Существуют три политики для правил приведения типов: ANSI, legacy и strict.

* ANSI — Spark выполняет приведение типов в соответствии с SQL ANSI. На практике поведение в основном совпадает с PostgreSQL. Запрещены некоторые неоправданные преобразования типов, такие как преобразование строки в int или double в boolean.
* legacy — Spark позволяет приведение типов, если оно является допустимым приведением, которое очень свободное. Например, допускается преобразование строки в int или double в boolean. Это также является единственным поведением в Spark 2.x и совместимо с Hive.
* strict — Spark не допускает какой-либо потери точности или усечения данных при приведении типов, например преобразование double в int или decimal в double не допускается.

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

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

В SQL Spark арифметическая операции с числовыми типами (кроме decimal) по умолчанию не проверяются на переполнение. Это означает, что если операция приводит к переполнению, результат будет таким же, как и соответствующая операция в программе Java или Scala (например, если сумма 2 целых чисел превышает максимальное значение, которое может быть представлено, результатом будет отрицательное число). С другой стороны, SQL Spark возвращает значение NULL для переполнений типа decimal. Если для параметра 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

Cost

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

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

  • NumericType <=> BooleanType
  • StringType <=> BinaryType

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

Исходный/целевой Числовое Строка Дата Метка времени Интервал Логический Binary Массив Карта Структура
Числовое Y Y N N N Y N N N N
Строка Y Y Y Y Y Y Y N N N
Дата N Y Y Y N N N N N N
Метка времени N Y 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 Y 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, Sql Spark возвращает поведение, распространенное до 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, SQL Spark использует несколько правил, определяющих способ разрешения конфликтов между типами данных. В основе этого разрешения конфликтов лежит список приоритетов типов, который определяет, можно ли передать значения данного типа данных в другой тип данных неявным образом.

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

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

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

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

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

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

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

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

Если наименьший общий тип разрешается в FLOAT, применяются специальные правила. При использовании значений типа 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.

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

Ключевое слово Режим ANSI Spark SQL Режим SQL Spark по умолчанию SQL-2016
ADD не зарезервировано не зарезервировано не зарезервировано
ПОСЛЕ не зарезервировано не зарезервировано не зарезервировано
ВСЕ скрытный не зарезервировано скрытный
ИЗМЕНИТЬ не зарезервировано не зарезервировано скрытный
ALWAYS не зарезервировано не зарезервировано не зарезервировано
Анализ  не зарезервировано не зарезервировано не зарезервировано
И скрытный не зарезервировано скрытный
ANTI не зарезервировано не зарезервировано, строгая версия не зарезервировано
ЛЮБАЯ скрытный не зарезервировано скрытный
АРХИВ не зарезервировано не зарезервировано не зарезервировано
ARRAY не зарезервировано не зарезервировано скрытный
AS скрытный не зарезервировано скрытный
ASC не зарезервировано не зарезервировано не зарезервировано
AT не зарезервировано не зарезервировано скрытный
AUTHORIZATION скрытный не зарезервировано скрытный
BETWEEN не зарезервировано не зарезервировано скрытный
BOTH скрытный не зарезервировано скрытный
BUCKET не зарезервировано не зарезервировано не зарезервировано
BUCKETS не зарезервировано не зарезервировано не зарезервировано
BY не зарезервировано не зарезервировано скрытный
CACHE не зарезервировано не зарезервировано не зарезервировано
CASCADE не зарезервировано не зарезервировано не зарезервировано
Затраты скрытный не зарезервировано скрытный
CAST скрытный не зарезервировано скрытный
ПО ЦЕННЫМ БУМАГАМ не зарезервировано не зарезервировано не зарезервировано
ПРОВЕРКА скрытный не зарезервировано скрытный
ОЧИСТИТЬ не зарезервировано не зарезервировано не зарезервировано
CLUSTER не зарезервировано не зарезервировано не зарезервировано
CLUSTERED не зарезервировано не зарезервировано не зарезервировано
CODEGEN не зарезервировано не зарезервировано не зарезервировано
COLLATE скрытный не зарезервировано скрытный
COLLECTION не зарезервировано не зарезервировано не зарезервировано
СТОЛБЕЦ скрытный не зарезервировано скрытный
СТОЛБЦЫ не зарезервировано не зарезервировано не зарезервировано
КОММЕНТАРИЙ не зарезервировано не зарезервировано не зарезервировано
COMMIT не зарезервировано не зарезервировано скрытный
COMPACT не зарезервировано не зарезервировано не зарезервировано
COMPACTIONS не зарезервировано не зарезервировано не зарезервировано
СРЕДА ВЫПОЛНЕНИЯ ПРИЛОЖЕНИЙ не зарезервировано не зарезервировано не зарезервировано
CONCATENATE не зарезервировано не зарезервировано не зарезервировано
ОГРАНИЧЕНИЯ скрытный не зарезервировано скрытный
COST не зарезервировано не зарезервировано не зарезервировано
CREATE скрытный не зарезервировано скрытный
CROSS скрытный не зарезервировано, строгая версия скрытный
CUBE не зарезервировано не зарезервировано скрытный
ТЕКУЩИЙ не зарезервировано не зарезервировано скрытный
CURRENT_DATE скрытный не зарезервировано скрытный
CURRENT_TIME скрытный не зарезервировано скрытный
CURRENT_TIMESTAMP скрытный не зарезервировано скрытный
CURRENT_USER скрытный не зарезервировано скрытный
ДАННЫЕ не зарезервировано не зарезервировано не зарезервировано
DATABASE не зарезервировано не зарезервировано не зарезервировано
БАЗЫ ДАННЫХ не зарезервировано не зарезервировано не зарезервировано
не зарезервировано не зарезервировано не зарезервировано
DBPROPERTIES не зарезервировано не зарезервировано не зарезервировано
DEFINED не зарезервировано не зарезервировано не зарезервировано
DELETE не зарезервировано не зарезервировано скрытный
DELIMITED не зарезервировано не зарезервировано не зарезервировано
DESC не зарезервировано не зарезервировано не зарезервировано
DESCRIBE не зарезервировано не зарезервировано скрытный
DFS не зарезервировано не зарезервировано не зарезервировано
DIRECTORIES не зарезервировано не зарезервировано не зарезервировано
КАТАЛОГ не зарезервировано не зарезервировано не зарезервировано
DISTINCT скрытный не зарезервировано скрытный
DISTRIBUTE не зарезервировано не зарезервировано не зарезервировано
DIV не зарезервировано не зарезервировано не является ключевым словом
DROP не зарезервировано не зарезервировано скрытный
ELSE скрытный не зарезервировано скрытный
END скрытный не зарезервировано скрытный
ESCAPE скрытный не зарезервировано скрытный
ESCAPED не зарезервировано не зарезервировано не зарезервировано
ИСКЛЮЧЕНИЯ скрытный не зарезервировано, строгая версия скрытный
EXCHANGE не зарезервировано не зарезервировано не зарезервировано
EXISTS не зарезервировано не зарезервировано скрытный
EXPLAIN не зарезервировано не зарезервировано не зарезервировано
EXPORT не зарезервировано не зарезервировано не зарезервировано
EXTENDED не зарезервировано не зарезервировано не зарезервировано
EXTERNAL не зарезервировано не зарезервировано скрытный
EXTRACT не зарезервировано не зарезервировано скрытный
FALSE скрытный не зарезервировано скрытный
FETCH скрытный не зарезервировано скрытный
ПОЛЯ не зарезервировано не зарезервировано не зарезервировано
ФИЛЬТР скрытный не зарезервировано скрытный
FILEFORMAT не зарезервировано не зарезервировано не зарезервировано
FIRST не зарезервировано не зарезервировано не зарезервировано
ЛО не зарезервировано не зарезервировано не зарезервировано
FOLLOWING не зарезервировано не зарезервировано не зарезервировано
FOR скрытный не зарезервировано скрытный
FOREIGN скрытный не зарезервировано скрытный
FORMAT не зарезервировано не зарезервировано не зарезервировано
FORMATTED не зарезервировано не зарезервировано не зарезервировано
FROM скрытный не зарезервировано скрытный
FULL скрытный не зарезервировано, строгая версия скрытный
FUNCTION не зарезервировано не зарезервировано скрытный
ФУНКЦИИ не зарезервировано не зарезервировано не зарезервировано
GENERATED не зарезервировано не зарезервировано не зарезервировано
Глобальные не зарезервировано не зарезервировано скрытный
GRANT скрытный не зарезервировано скрытный
GRANTS не зарезервировано не зарезервировано не зарезервировано
ГРУППА скрытный не зарезервировано скрытный
ГРУППИРОВАНИЕ не зарезервировано не зарезервировано скрытный
HAVING скрытный не зарезервировано скрытный
HOUR не зарезервировано не зарезервировано не зарезервировано
ЕСЛИ не зарезервировано не зарезервировано не является ключевым словом
IGNORE не зарезервировано не зарезервировано не зарезервировано
ИМПОРТ не зарезервировано не зарезервировано не зарезервировано
В скрытный не зарезервировано скрытный
ИНДЕКС не зарезервировано не зарезервировано не зарезервировано
INDEXES не зарезервировано не зарезервировано не зарезервировано
INNER скрытный не зарезервировано, строгая версия скрытный
INPATH не зарезервировано не зарезервировано не зарезервировано
INPUTFORMAT не зарезервировано не зарезервировано не зарезервировано
ВСТАВИТЬ не зарезервировано не зарезервировано скрытный
INTERSECT скрытный не зарезервировано, строгая версия скрытный
INTERVAL не зарезервировано не зарезервировано скрытный
INTO скрытный не зарезервировано скрытный
IS скрытный не зарезервировано скрытный
ЭЛЕМЕНТЫ не зарезервировано не зарезервировано не зарезервировано
JOIN скрытный не зарезервировано, строгая версия скрытный
КЛЮЧ не зарезервировано не зарезервировано не зарезервировано
KEYS не зарезервировано не зарезервировано не зарезервировано
LAST не зарезервировано не зарезервировано не зарезервировано
LATERAL скрытный не зарезервировано, строгая версия скрытный
LAZY не зарезервировано не зарезервировано не зарезервировано
LEADING скрытный не зарезервировано скрытный
LEFT скрытный не зарезервировано, строгая версия скрытный
LIKE не зарезервировано не зарезервировано скрытный
ILIKE не зарезервировано не зарезервировано не зарезервировано
LIMIT не зарезервировано не зарезервировано не зарезервировано
LINES не зарезервировано не зарезервировано не зарезервировано
LIST не зарезервировано не зарезервировано не зарезервировано
LOAD не зарезервировано не зарезервировано не зарезервировано
ЛОКАЛЬНО не зарезервировано не зарезервировано скрытный
LOCATION не зарезервировано не зарезервировано не зарезервировано
LOCK не зарезервировано не зарезервировано не зарезервировано
БЛОКИРОВКИ не зарезервировано не зарезервировано не зарезервировано
ЛОГИЧЕСКАЯ не зарезервировано не зарезервировано не зарезервировано
MACRO не зарезервировано не зарезервировано не зарезервировано
MAP не зарезервировано не зарезервировано не зарезервировано
MATCHED не зарезервировано не зарезервировано не зарезервировано
MERGE не зарезервировано не зарезервировано не зарезервировано
MINUTE не зарезервировано не зарезервировано не зарезервировано
MINUS не зарезервировано не зарезервировано, строгая версия не зарезервировано
MONTH не зарезервировано не зарезервировано не зарезервировано
MSCK; не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВО ИМЕН не зарезервировано не зарезервировано не зарезервировано
ПРОСТРАНСТВА ИМЕН не зарезервировано не зарезервировано не зарезервировано
NATURAL скрытный не зарезервировано, строгая версия скрытный
Нет не зарезервировано не зарезервировано скрытный
Логическое НЕ скрытный не зарезервировано скрытный
NULL скрытный не зарезервировано скрытный
NULLS не зарезервировано не зарезервировано не зарезервировано
OF не зарезервировано не зарезервировано скрытный
DNS скрытный не зарезервировано, строгая версия скрытный
РЕГИСТРАНТОВ скрытный не зарезервировано скрытный
OPTION не зарезервировано не зарезервировано не зарезервировано
ПАРАМЕТРЫ не зарезервировано не зарезервировано не зарезервировано
ИЛИ скрытный не зарезервировано скрытный
ORDER скрытный не зарезервировано скрытный
ДАННЫЕ не зарезервировано не зарезервировано скрытный
OUTER скрытный не зарезервировано скрытный
OUTPUTFORMAT не зарезервировано не зарезервировано не зарезервировано
OVER не зарезервировано не зарезервировано не зарезервировано
OVERLAPS скрытный не зарезервировано скрытный
OVERLAY не зарезервировано не зарезервировано не зарезервировано
OVERWRITE не зарезервировано не зарезервировано не зарезервировано
СЕКЦИЯ не зарезервировано не зарезервировано скрытный
PARTITIONED не зарезервировано не зарезервировано не зарезервировано
РАЗДЕЛЫ не зарезервировано не зарезервировано не зарезервировано
ПРОЦЕНТ не зарезервировано не зарезервировано не зарезервировано
PIVOT не зарезервировано не зарезервировано не зарезервировано
PLACING не зарезервировано не зарезервировано не зарезервировано
POSITION не зарезервировано не зарезервировано скрытный
PRECEDING не зарезервировано не зарезервировано не зарезервировано
ОСНОВНОЙ скрытный не зарезервировано скрытный
PRINCIPALS не зарезервировано не зарезервировано не зарезервировано
СВОЙСТВА не зарезервировано не зарезервировано не зарезервировано
PURGE не зарезервировано не зарезервировано не зарезервировано
QUALIFY скрытный не зарезервировано скрытный
QUERY не зарезервировано не зарезервировано не зарезервировано
RANGE не зарезервировано не зарезервировано скрытный
ПОЛУЧАТЕЛЬ не зарезервировано не зарезервировано не зарезервировано
ПОЛУЧАТЕЛЕЙ не зарезервировано не зарезервировано не зарезервировано
RECORDREADER не зарезервировано не зарезервировано не зарезервировано
RECORDWRITER не зарезервировано не зарезервировано не зарезервировано
RECOVER не зарезервировано не зарезервировано не зарезервировано
REDUCE не зарезервировано не зарезервировано не зарезервировано
ССЫЛКИ скрытный не зарезервировано скрытный
ОБНОВЛЕНИЕ не зарезервировано не зарезервировано не зарезервировано
REGEXP не зарезервировано не зарезервировано не является ключевым словом
УДАЛИТЬ не зарезервировано не зарезервировано не зарезервировано
RENAME не зарезервировано не зарезервировано не зарезервировано
REPAIR не зарезервировано не зарезервировано не зарезервировано
ЗАМЕНИТЬ не зарезервировано не зарезервировано не зарезервировано
СБРОСИТЬ не зарезервировано не зарезервировано не зарезервировано
RESPECT не зарезервировано не зарезервировано не зарезервировано
RESTRICT не зарезервировано не зарезервировано не зарезервировано
REVOKE не зарезервировано не зарезервировано скрытный
RIGHT скрытный не зарезервировано, строгая версия скрытный
RLIKE не зарезервировано не зарезервировано не зарезервировано
РОЛЬ не зарезервировано не зарезервировано не зарезервировано
РОЛИ не зарезервировано не зарезервировано не зарезервировано
ROLLBACK не зарезервировано не зарезервировано скрытный
ROLLUP не зарезервировано не зарезервировано скрытный
ROW не зарезервировано не зарезервировано скрытный
СТРОКИ не зарезервировано не зарезервировано скрытный
СХЕМА не зарезервировано не зарезервировано не зарезервировано
SCHEMAS не зарезервировано не зарезервировано не является ключевым словом
ВТОРОЙ не зарезервировано не зарезервировано не зарезервировано
SELECT скрытный не зарезервировано скрытный
SEMI не зарезервировано не зарезервировано, строгая версия не зарезервировано
SEPARATED не зарезервировано не зарезервировано не зарезервировано
SERDE не зарезервировано не зарезервировано не зарезервировано
SERDEPROPERTIES не зарезервировано не зарезервировано не зарезервировано
SESSION_USER скрытный не зарезервировано скрытный
SET не зарезервировано не зарезервировано скрытный
SETS не зарезервировано не зарезервировано не зарезервировано
ОБЩИЙ ДОСТУП не зарезервировано не зарезервировано не зарезервировано
ОБЩИЕ ПАПКИ не зарезервировано не зарезервировано не зарезервировано
SHOW не зарезервировано не зарезервировано не зарезервировано
SKEWED не зарезервировано не зарезервировано не зарезервировано
SOME скрытный не зарезервировано скрытный
СОРТИРОВКА не зарезервировано не зарезервировано не зарезервировано
SORTED не зарезервировано не зарезервировано не зарезервировано
НАЧАЛО не зарезервировано не зарезервировано скрытный
STATISTICS не зарезервировано не зарезервировано не зарезервировано
STORED не зарезервировано не зарезервировано не зарезервировано
STRATIFY не зарезервировано не зарезервировано не зарезервировано
STRUCT не зарезервировано не зарезервировано не зарезервировано
SUBSTR не зарезервировано не зарезервировано не зарезервировано
SUBSTRING не зарезервировано не зарезервировано не зарезервировано
СИНХРОННЫЙ не зарезервировано не зарезервировано не зарезервировано
TABLE скрытный не зарезервировано скрытный
ТАБЛИЦЫ не зарезервировано не зарезервировано не зарезервировано
TABLESAMPLE не зарезервировано не зарезервировано скрытный
TBLPROPERTIES не зарезервировано не зарезервировано не зарезервировано
TEMP не зарезервировано не зарезервировано не является ключевым словом
TEMPORARY не зарезервировано не зарезервировано не зарезервировано
ПРЕКРАЩЕНО не зарезервировано не зарезервировано не зарезервировано
THEN скрытный не зарезервировано скрытный
TIME скрытный не зарезервировано скрытный
TO скрытный не зарезервировано скрытный
TOUCH не зарезервировано не зарезервировано не зарезервировано
TRAILING скрытный не зарезервировано скрытный
ТРАНЗАКЦИЯ не зарезервировано не зарезервировано не зарезервировано
ТРАНЗАКЦИИ не зарезервировано не зарезервировано не зарезервировано
ПРЕОБРАЗОВАНИЕ не зарезервировано не зарезервировано не зарезервировано
TRIM не зарезервировано не зарезервировано не зарезервировано
TRUE не зарезервировано не зарезервировано скрытный
TRUNCATE не зарезервировано не зарезервировано скрытный
TRY_CAST не зарезервировано не зарезервировано не зарезервировано
ТИП не зарезервировано не зарезервировано не зарезервировано
UNARCHIVE не зарезервировано не зарезервировано не зарезервировано
UNBOUNDED не зарезервировано не зарезервировано не зарезервировано
UNCACHE не зарезервировано не зарезервировано не зарезервировано
UNION скрытный не зарезервировано, строгая версия скрытный
UNIQUE скрытный не зарезервировано скрытный
НЕИЗВЕСТНО скрытный не зарезервировано скрытный
UNLOCK не зарезервировано не зарезервировано не зарезервировано
UNSET не зарезервировано не зарезервировано не зарезервировано
UPDATE не зарезервировано не зарезервировано скрытный
USE не зарезервировано не зарезервировано не зарезервировано
Пользователь скрытный не зарезервировано скрытный
USING скрытный не зарезервировано, строгая версия скрытный
ЗНАЧЕНИЯ не зарезервировано не зарезервировано скрытный
ВИД не зарезервировано не зарезервировано не зарезервировано
VIEWS не зарезервировано не зарезервировано не зарезервировано
Если... скрытный не зарезервировано скрытный
WHERE скрытный не зарезервировано скрытный
ОКНО не зарезервировано не зарезервировано скрытный
ВМЕСТЕ С скрытный не зарезервировано скрытный
YEAR не зарезервировано не зарезервировано не зарезервировано
ZONE не зарезервировано не зарезервировано не зарезервировано