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

Область применения:check marked yes 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, отменить изменения 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, 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 можно преобразовать в любой простой тип данных.

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

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

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

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

  • Чтобы решить, можно ли вызвать функцию, ожидающую параметр определенного типа, с помощью аргумента более узкого типа.
  • Чтобы создать производный тип аргумента для функций, которые ожидают тип общего аргумента для нескольких параметров, например 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 не зарезервировано не зарезервировано не зарезервировано