Conformidade com ANSI no Databricks Runtime
Aplica-se a: Databricks Runtime
Este artigo descreve a conformidade ANSI no Databricks Runtime. Para o modo ANSI no Databricks SQL, confira ANSI_MODE.
O Spark SQL tem duas opções para atuar em conformidade com a norma ANSI SQL: spark.sql.ansi.enabled
e spark.sql.storeAssignmentPolicy
.
Quando spark.sql.ansi.enabled
é definido como true
, o Spark SQL usa um dialeto compatível com a ANSI em vez de ser compatível com o Hive. Por exemplo, o Spark gera uma exceção em runtime em vez de retornar resultados nulos quando as entradas para um operador/função de SQL são inválidas. Alguns recursos de dialeto da ANSI podem não ser diretamente da norma ANSI SQL, mas os comportamentos deles se adaptam ao estilo da ANSI SQL.
Além disso, o Spark SQL tem uma opção independente para controlar comportamentos de conversão implícitos ao armazenar linhas em uma tabela. Os comportamentos de conversão são definidos como regras de atribuição de loja no padrão.
Quando spark.sql.storeAssignmentPolicy
é definido como ANSI
, o Spark SQL está em conformidade com as regras de atribuição de armazenamento da ANSI. Essa é uma configuração separada porque seu valor padrão é ANSI
, enquanto a configuração spark.sql.ansi.enabled
é desabilitada por padrão.
A tabela a seguir resume esse comportamento:
Nome da propriedade | Padrão | Significado |
---|---|---|
spark.sql.ansi.enabled |
false | Quando true, o Spark tenta estar em conformidade com a especificação ANSI SQL: - Lança uma exceção de tempo de execução se ocorrer um estouro em qualquer operação em um campo inteiro ou decimal. - Proíbe o uso das palavras-chave reservadas do ANSI SQL como identificadores no analisador SQL. |
spark.sql.storeAssignmentPolicy |
ANSI | Ao inserir um valor em uma coluna com um tipo de dados diferente, o Spark executa a conversão de tipo. Há três políticas para as regras de coerção de tipo: ANSI , legacy e strict .- ANSI : O Spark executa a coerção de tipo de acordo com a ANSI SQL. Na prática, o comportamento é praticamente igual ao do PostgreSQL. Ele não permite determinadas conversões de tipo que não fazem sentido, como converter a cadeia de caracteres para INT, ou DOUBLE para booliano.- legacy : O Spark permite a coerção de tipo, desde que seja uma conversão válida, que é muito flexível. Por exemplo, a conversão de string para INT ou de DOUBLE para booleano é permitida. Esse também é o único comportamento no Spark 2.x e é compatível com o Hive.- strict : O Spark não permite possíveis perdas de precisão ou truncamento de dados na coerção de tipo, por exemplo, a conversão de DOUBLE para INT ou de decimal para DOUBLE não é permitida. |
As subseções a seguir apresentam alterações de comportamento em operações aritméticas, conversões de tipo e análises de SQL quando o modo ANSI está habilitado. No Spark SQL, há três tipos de conversão de tipo. Este artigo apresentará cada um deles: conversão, atribuição de armazenamento e coerção de tipo.
Operações aritméticas
No Spark SQL, por padrão, não são feitas verificações de estouros nas operações aritméticas executadas em tipos numéricos (com a exceção de decimal).
Isso significa que, se uma operação causa estouros, o resultado é o mesmo com a operação correspondente em um programa Java ou Scala (por exemplo, se a soma de 2 inteiros for maior do que o valor máximo representável, o resultado será um número negativo). Por outro lado, o Spark SQL retorna nulo para estouros decimais.
Quando spark.sql.ansi.enabled
é definido como true
, e um estouro ocorre em operações aritméticas numéricas e de intervalo, ele gera uma exceção aritmética no runtime.
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
Conversão
Quando spark.sql.ansi.enabled
é definido como true
, a conversão explícita pela sintaxe CAST
gera uma exceção de runtime para padrões de conversão ilegais definidos na norma, como conversões de uma cadeia de caracteres para um inteiro.
A cláusula CAST
do modo ANSI do Spark segue as regras de sintaxe da seção 6.13 "especificação de conversão" da ISO/IEC 9075-2:2011 Tecnologia de informação — Linguagens de banco de dados - SQL — Parte 2: Fundação (SQL/Fundação), exceto pelo fato de que ela permite especialmente as seguintes conversões de tipo direta que não são permitidas de acordo com a norma ANSI:
- NumericType <=> BooleanType
- StringType <=> BinaryType
As combinações válidas de tipo de dados de origem e de destino em uma expressão CAST
são fornecidas pela tabela a seguir.
"Y" indica que a combinação é sintaticamente válida sem restrição, e "N" indica que a combinação não é válida.
Origem Destino | Numérico | String | Data | Timestamp | Intervalo | Boolean | Binário | Array | Mapeamento | Struct |
---|---|---|---|---|---|---|---|---|---|---|
Numérico | S | Y | N | N | N | Y | N | N | N | N |
String | S | N | N | N | N | N | Y | N | N | N |
Data | N | S | N | Y | N | N | N | N | N | N |
Timestamp | N | S | N | Y | N | N | N | N | N | N |
Intervalo | N | Y | N | N | Y | N | N | N | N | N |
Boolean | S | Y | N | N | N | Y | N | N | N | N |
Binário | S | N | N | N | N | N | Y | N | N | N |
Array | N | N | N | N | N | N | N | Y | N | N |
Mapeamento | N | N | N | N | N | N | N | N | Y | N |
Struct | N | N | N | N | N | N | N | N | N | S |
-- 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
Atribuição de repositório
O padrão da configuração spark.sql.storeAssignmentPolicy
é ANSI
. Com essa configuração, quando os tipos de dados dos valores de origem não correspondem aos tipos de coluna de destino, o Spark SQL adiciona automaticamente as cláusulas ANSI CAST à instrução INSERT.
Durante a inserção de tabelas no âmbito dessa política, o Spark verifica e rejeita conversões inválidas, gerando uma exceção para garantir a qualidade dos dados. Isso significa que, se uma tentativa de inserção falhar devido a uma incompatibilidade de tipos, isso não resultará em nenhum dado sendo gravado na tabela parcialmente.
Exemplos:
-- 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
Esses exemplos mostram o Spark SQL impedindo que dados incompatíveis sejam inseridos, mantendo, assim, a integridade dos dados.
Quando a spark.sql.storeAssignmentPolicy
estiver configurada como LEGACY
, o Spark SQL será revertido para o comportamento predominante até o Spark 2.x. Nesse modo, em vez de usar ANSI CAST, o módulo aplica operações CAST herdadas. No âmbito dessa política, as conversões inválidas durante inserções de tabelas resultam na inserção de valores NULL ou incorretos em vez de gerar uma exceção.
Exemplos:
-- 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)
Coerção de tipo
Promoção e precedência de tipo
Quando spark.sql.ansi.enabled
é definido como true
, o Spark SQL usa várias regras que administram como os conflitos entre tipos de dados são resolvidos.
No centro dessa resolução de conflitos está a Lista de Precedência de Tipo que define se os valores de um determinado tipo de dados podem ser promovidos para outro tipo de dados de forma implícita.
Tipo de dados | Lista de precedência (da mais restrita para a mais ampla) |
---|---|
Byte | Byte -> Short -> Int -> Long -> Decimal -> Float* -> Double |
Short | Short -> Int -> Long -> Decimal-> Float* -> Double |
Int | Int -> Long -> Decimal -> Float* -> Double |
long | Long -> Decimal -> Float* -> Double |
Decimal | Decimal -> Float* -> Double |
Float | Float -> Double |
Double | Double |
Data | Data -> Carimbo de data/hora |
Timestamp | Timestamp |
String | String |
Binário | Binário |
Boolean | Boolean |
Intervalo | Intervalo |
Mapeamento | Map** |
Array | Array** |
Struct | Struct** |
- Para a resolução de tipo menos comum, float é ignorado para evitar a perda de precisão.
** Para um tipo complexo, a regra de precedência aplica-se recursivamente a seus elementos de componente.
Regras especiais se aplicam ao tipo de cadeia de caracteres e ao NULL não tipado. NULL pode ser promovido para qualquer outro tipo, mas a cadeia de caracteres pode ser promovida a qualquer tipo de dados simples.
Essa é uma representação gráfica da lista de precedência como uma árvore direcionada:
Resolução de tipo menos comum
O tipo menos comum de um conjunto de tipos é o tipo mais estreito acessível da lista de precedência por todos os elementos do conjunto de tipos.
A resolução de tipo mínimo comum é usada para:
- Decidir se uma função que espera um parâmetro de um tipo pode ser chamada usando um argumento de um tipo mais estreito.
- Derivar o tipo de argumento para funções que esperam um tipo de argumento compartilhado para vários parâmetros, como união, menos ou mais.
- Derivar os tipos de operando para operadores como operações aritméticas ou comparações.
- Derivar o tipo de resultado para expressões como a expressão CASE.
- Derivar os tipos de elemento, chave ou valor para construtores array e map.
Regras especiais são aplicadas se o tipo menos comum é resolvido para FLOAT. Com valores de tipo float, se algum tipo é INT, BIGINT ou DECIMAL, o tipo menos comum é enviado para DOUBLE para evitar uma possível perda de dígitos.
-- 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.
Funções do SQL
O comportamento de algumas funções SQL pode ser diferente no modo ANSI (spark.sql.ansi.enabled=true
).
size
: essa função retorna NULL para entrada nula no modo ANSI.element_at
:- Essa função gera
ArrayIndexOutOfBoundsException
quando índices inválidos estão sendo usados. - Essa função gera
NoSuchElementException
quando a chave não existe no mapa.
- Essa função gera
elt
: essa função geraArrayIndexOutOfBoundsException
quando índices inválidos estão sendo usados.make_date
: essa função falha com uma exceção se a data do resultado é inválida.make_timestamp
: essa função falha com uma exceção se o carimbo de data/hora do resultado é inválido.make_interval
: essa função falha com uma exceção se o intervalo do resultado é inválido.next_day
: essa função geraIllegalArgumentException
se a entrada não é um dia da semana válido.parse_url
: essa função geraIllegalArgumentException
se uma cadeia de caracteres de entrada não é uma URL válida.to_date
: essa função falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada ou se a cadeia de caracteres de padrão é inválida.to_timestamp
: essa função falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada ou se a cadeia de caracteres de padrão é inválida.to_unix_timestamp
: essa função falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada ou se a cadeia de caracteres de padrão é inválida.unix_timestamp
: essa função falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada ou se a cadeia de caracteres de padrão é inválida.
Operadores SQL
O comportamento de alguns operadores SQL pode ser diferente no modo ANSI (spark.sql.ansi.enabled=true
).
array_col[index]
: esse operador geraArrayIndexOutOfBoundsException
se está usando índices inválidos.map_col[key]
: essa função geraNoSuchElementException
quando a chave não existe no mapa.CAST(string_col AS TIMESTAMP)
: esse operador falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada.CAST(string_col AS DATE)
: esse operador falha com uma exceção quando a cadeia de caracteres de entrada não pode ser analisada.
Funções úteis no modo ANSI
Quando o modo ANSI está ativado, ele gera exceções para operações inválidas. Você pode usar as funções SQL a seguir para suprimir essas exceções.
try_cast
: idêntico aCAST
, exceto pelo fato de que ele retorna o resultadoNULL
em vez de lançar uma exceção no erro de runtime.try_add
: idêntico ao operador de adição+
, exceto pelo fato de que ele retorna o resultadoNULL
em vez de lançar uma exceção no estouro de valor integral.try_divide
: idêntico ao operador de divisão/
, exceto pelo fato de que ele retorna o resultadoNULL
em vez de lançar uma exceção ao dividir 0.
Palavras-chave de SQL
Quando spark.sql.ansi.enabled
é verdadeiro, o Spark SQL usa o analisador do modo ANSI.
Nesse modo, o Spark SQL tem dois tipos de palavras-chave:
- Palavras-chave reservadas: palavras-chave reservadas e não podem ser usadas como identificadores para tabela, exibição, coluna, função, alias etc.
- Palavras-chave não reservadas: palavras-chave que têm um significado especial apenas em contextos específicos e podem ser usadas como identificadores em outros contextos. Por exemplo,
EXPLAIN SELECT ...
é um comando, mas EXPLAIN pode ser usado como identificadores em outros locais.
Quando o modo ANSI está desabilitado, o Spark SQL tem dois tipos de palavras-chave:
- Palavras-chave não reservadas: a mesma definição de quando o modo ANSI está habilitado.
- Palavras-chave não reservadas estritas: uma versão estrita de palavras-chave não reservadas, que não podem ser usadas como alias de tabela.
Por padrão, spark.sql.ansi.enabled
é falso.
Veja abaixo uma lista de todas as palavras-chave no Spark SQL.
Palavra-chave | Modo ANSI do Spark SQL | Modo Padrão do Spark SQL | SQL-2016 |
---|---|---|---|
ADD | não reservadas | não reservadas | não reservadas |
AFTER | não reservadas | não reservadas | não reservadas |
ALL | reservada | não reservadas | reservada |
ALTER | não reservadas | não reservadas | reservada |
ALWAYS | não reservadas | não reservadas | não reservadas |
ANALISAR | não reservadas | não reservadas | não reservadas |
AND | reservada | não reservadas | reservada |
ANTI | não reservadas | não reservadas estritas | não reservadas |
ANY | reservada | não reservadas | reservada |
ARCHIVE | não reservadas | não reservadas | não reservadas |
ARRAY | não reservadas | não reservadas | reservada |
AS | reservada | não reservadas | reservada |
ASC | não reservadas | não reservadas | não reservadas |
AT | não reservadas | não reservadas | reservada |
AUTHORIZATION | reservada | não reservadas | reservada |
BETWEEN | não reservadas | não reservadas | reservada |
BOTH | reservada | não reservadas | reservada |
BUCKET | não reservadas | não reservadas | não reservadas |
BUCKETS | não reservadas | não reservadas | não reservadas |
BY | não reservadas | não reservadas | reservada |
CACHE | não reservadas | não reservadas | não reservadas |
CASCADE | não reservadas | não reservadas | não reservadas |
CASE | reservada | não reservadas | reservada |
CAST | reservada | não reservadas | reservada |
CHANGE | não reservadas | não reservadas | não reservadas |
CHECK | reservada | não reservadas | reservada |
CLEAR | não reservadas | não reservadas | não reservadas |
CLUSTER | não reservadas | não reservadas | não reservadas |
CLUSTERED | não reservadas | não reservadas | não reservadas |
CODEGEN | não reservadas | não reservadas | não reservadas |
COLLATE | reservada | não reservadas | reservada |
COLLECTION | não reservadas | não reservadas | não reservadas |
COLUMN | reservada | não reservadas | reservada |
COLUMNS | não reservadas | não reservadas | não reservadas |
COMMENT | não reservadas | não reservadas | não reservadas |
COMMIT | não reservadas | não reservadas | reservada |
COMPACT | não reservadas | não reservadas | não reservadas |
COMPACTIONS | não reservadas | não reservadas | não reservadas |
COMPUTE | não reservadas | não reservadas | não reservadas |
CONCATENATE | não reservadas | não reservadas | não reservadas |
CONSTRAINT | reservada | não reservadas | reservada |
COST | não reservadas | não reservadas | não reservadas |
CREATE | reservada | não reservadas | reservada |
CROSS | reservada | não reservadas estritas | reservada |
CUBE | não reservadas | não reservadas | reservada |
CURRENT | não reservadas | não reservadas | reservada |
CURRENT_DATE | reservada | não reservadas | reservada |
CURRENT_TIME | reservada | não reservadas | reservada |
CURRENT_TIMESTAMP | reservada | não reservadas | reservada |
CURRENT_USER | reservada | não reservadas | reservada |
DATA | não reservadas | não reservadas | não reservadas |
DATABASE | não reservadas | não reservadas | não reservadas |
DATABASES | não reservadas | não reservadas | não reservadas |
DAY | não reservadas | não reservadas | não reservadas |
DBPROPERTIES | não reservadas | não reservadas | não reservadas |
DEFINED | não reservadas | não reservadas | não reservadas |
Delete (excluir) | não reservadas | não reservadas | reservada |
DELIMITED | não reservadas | não reservadas | não reservadas |
DESC | não reservadas | não reservadas | não reservadas |
DESCRIBE | não reservadas | não reservadas | reservada |
DFS | não reservadas | não reservadas | não reservadas |
DIRECTORIES | não reservadas | não reservadas | não reservadas |
DIRECTORY | não reservadas | não reservadas | não reservadas |
DISTINTO | reservada | não reservadas | reservada |
DISTRIBUTE | não reservadas | não reservadas | não reservadas |
DIV | não reservadas | não reservadas | não é uma palavra-chave |
DROP | não reservadas | não reservadas | reservada |
ELSE | reservada | não reservadas | reservada |
END | reservada | não reservadas | reservada |
ESCAPE | reservada | não reservadas | reservada |
ESCAPED | não reservadas | não reservadas | não reservadas |
EXCEPT | reservada | não reservadas estritas | reservada |
EXCHANGE | não reservadas | não reservadas | não reservadas |
EXISTS | não reservadas | não reservadas | reservada |
EXPLAIN | não reservadas | não reservadas | não reservadas |
EXPORT | não reservadas | não reservadas | não reservadas |
EXTENDED | não reservadas | não reservadas | não reservadas |
EXTERNAL | não reservadas | não reservadas | reservada |
EXTRACT | não reservadas | não reservadas | reservada |
FALSE | reservada | não reservadas | reservada |
FETCH | reservada | não reservadas | reservada |
FIELDS | não reservadas | não reservadas | não reservadas |
FILTER | reservada | não reservadas | reservada |
FILEFORMAT | não reservadas | não reservadas | não reservadas |
FIRST | não reservadas | não reservadas | não reservadas |
FN | não reservadas | não reservadas | não reservadas |
FOLLOWING | não reservadas | não reservadas | não reservadas |
FOR | reservada | não reservadas | reservada |
FOREIGN | reservada | não reservadas | reservada |
FORMAT | não reservadas | não reservadas | não reservadas |
FORMATTED | não reservadas | não reservadas | não reservadas |
FROM | reservada | não reservadas | reservada |
FULL | reservada | não reservadas estritas | reservada |
FUNCTION | não reservadas | não reservadas | reservada |
FUNCTIONS | não reservadas | não reservadas | não reservadas |
GENERATED | não reservadas | não reservadas | não reservadas |
GLOBAL | não reservadas | não reservadas | reservada |
GRANT | reservada | não reservadas | reservada |
GRANTS | não reservadas | não reservadas | não reservadas |
GROUP | reservada | não reservadas | reservada |
GROUPING | não reservadas | não reservadas | reservada |
HAVING | reservada | não reservadas | reservada |
HOUR | não reservadas | não reservadas | não reservadas |
IF | não reservadas | não reservadas | não é uma palavra-chave |
IGNORE | não reservadas | não reservadas | não reservadas |
IMPORT | não reservadas | não reservadas | não reservadas |
IN | reservada | não reservadas | reservada |
INDEX | não reservadas | não reservadas | não reservadas |
INDEXES | não reservadas | não reservadas | não reservadas |
INNER | reservada | não reservadas estritas | reservada |
INPATH | não reservadas | não reservadas | não reservadas |
INPUTFORMAT | não reservadas | não reservadas | não reservadas |
INSERT | não reservadas | não reservadas | reservada |
INTERSECT | reservada | não reservadas estritas | reservada |
INTERVAL | não reservadas | não reservadas | reservada |
INTO | reservada | não reservadas | reservada |
IS | reservada | não reservadas | reservada |
ITEMS | não reservadas | não reservadas | não reservadas |
JOIN | reservada | não reservadas estritas | reservada |
KEY | não reservadas | não reservadas | não reservadas |
KEYS | não reservadas | não reservadas | não reservadas |
LAST | não reservadas | não reservadas | não reservadas |
LATERAL | reservada | não reservadas estritas | reservada |
LAZY | não reservadas | não reservadas | não reservadas |
LEADING | reservada | não reservadas | reservada |
LEFT | reservada | não reservadas estritas | reservada |
LIKE | não reservadas | não reservadas | reservada |
ILIKE | não reservadas | não reservadas | não reservadas |
LIMIT | não reservadas | não reservadas | não reservadas |
LINES | não reservadas | não reservadas | não reservadas |
LISTA | não reservadas | não reservadas | não reservadas |
LOAD | não reservadas | não reservadas | não reservadas |
LOCAL | não reservadas | não reservadas | reservada |
LOCATION | não reservadas | não reservadas | não reservadas |
LOCK | não reservadas | não reservadas | não reservadas |
LOCKS | não reservadas | não reservadas | não reservadas |
LOGICAL | não reservadas | não reservadas | não reservadas |
MACRO | não reservadas | não reservadas | não reservadas |
MAP | não reservadas | não reservadas | não reservadas |
MATCHED | não reservadas | não reservadas | não reservadas |
MESCLAR | não reservadas | não reservadas | não reservadas |
MINUTE | não reservadas | não reservadas | não reservadas |
MINUS | não reservadas | não reservadas estritas | não reservadas |
MONTH | não reservadas | não reservadas | não reservadas |
MSCK | não reservadas | não reservadas | não reservadas |
NAMESPACE | não reservadas | não reservadas | não reservadas |
NAMESPACES | não reservadas | não reservadas | não reservadas |
NATURAL | reservada | não reservadas estritas | reservada |
Não | não reservadas | não reservadas | reservada |
NOT | reservada | não reservadas | reservada |
NULO | reservada | não reservadas | reservada |
NULLS | não reservadas | não reservadas | não reservadas |
OF | não reservadas | não reservadas | reservada |
ATIVADO | reservada | não reservadas estritas | reservada |
ONLY | reservada | não reservadas | reservada |
OPÇÃO | não reservadas | não reservadas | não reservadas |
OPÇÕES | não reservadas | não reservadas | não reservadas |
OU | reservada | não reservadas | reservada |
ORDER | reservada | não reservadas | reservada |
OUT | não reservadas | não reservadas | reservada |
OUTER | reservada | não reservadas | reservada |
OUTPUTFORMAT | não reservadas | não reservadas | não reservadas |
OVER | não reservadas | não reservadas | não reservadas |
OVERLAPS | reservada | não reservadas | reservada |
OVERLAY | não reservadas | não reservadas | não reservadas |
OVERWRITE | não reservadas | não reservadas | não reservadas |
PARTITION | não reservadas | não reservadas | reservada |
PARTITIONED | não reservadas | não reservadas | não reservadas |
PARTITIONS | não reservadas | não reservadas | não reservadas |
PERCENT | não reservadas | não reservadas | não reservadas |
PIVOT | não reservadas | não reservadas | não reservadas |
PLACING | não reservadas | não reservadas | não reservadas |
POSITION | não reservadas | não reservadas | reservada |
PRECEDING | não reservadas | não reservadas | não reservadas |
PRIMARY | reservada | não reservadas | reservada |
PRINCIPALS | não reservadas | não reservadas | não reservadas |
PROPERTIES | não reservadas | não reservadas | não reservadas |
PURGE | não reservadas | não reservadas | não reservadas |
QUALIFY | reservada | não reservadas | reservada |
QUERY | não reservadas | não reservadas | não reservadas |
RANGE | não reservadas | não reservadas | reservada |
RECIPIENT | não reservadas | não reservadas | não reservadas |
RECIPIENTS | não reservadas | não reservadas | não reservadas |
RECORDREADER | não reservadas | não reservadas | não reservadas |
RECORDWRITER | não reservadas | não reservadas | não reservadas |
RECOVER | não reservadas | não reservadas | não reservadas |
REDUCE | não reservadas | não reservadas | não reservadas |
REFERENCES | reservada | não reservadas | reservada |
REFRESH | não reservadas | não reservadas | não reservadas |
REGEXP | não reservadas | não reservadas | não é uma palavra-chave |
REMOVE | não reservadas | não reservadas | não reservadas |
RENAME | não reservadas | não reservadas | não reservadas |
REPAIR | não reservadas | não reservadas | não reservadas |
REPLACE | não reservadas | não reservadas | não reservadas |
RESET | não reservadas | não reservadas | não reservadas |
RESPECT | não reservadas | não reservadas | não reservadas |
RESTRICT | não reservadas | não reservadas | não reservadas |
REVOKE | não reservadas | não reservadas | reservada |
RIGHT | reservada | não reservadas estritas | reservada |
RLIKE | não reservadas | não reservadas | não reservadas |
ROLE | não reservadas | não reservadas | não reservadas |
ROLES | não reservadas | não reservadas | não reservadas |
ROLLBACK | não reservadas | não reservadas | reservada |
ROLLUP | não reservadas | não reservadas | reservada |
ROW | não reservadas | não reservadas | reservada |
ROWS | não reservadas | não reservadas | reservada |
SCHEMA | não reservadas | não reservadas | não reservadas |
SCHEMAS | não reservadas | não reservadas | não é uma palavra-chave |
SECOND | não reservadas | não reservadas | não reservadas |
SELECT | reservada | não reservadas | reservada |
SEMI | não reservadas | não reservadas estritas | não reservadas |
SEPARATED | não reservadas | não reservadas | não reservadas |
SERDE | não reservadas | não reservadas | não reservadas |
SERDEPROPERTIES | não reservadas | não reservadas | não reservadas |
SESSION_USER | reservada | não reservadas | reservada |
SET | não reservadas | não reservadas | reservada |
SETS | não reservadas | não reservadas | não reservadas |
SHARE | não reservadas | não reservadas | não reservadas |
SHARES | não reservadas | não reservadas | não reservadas |
SHOW | não reservadas | não reservadas | não reservadas |
SKEWED | não reservadas | não reservadas | não reservadas |
SOME | reservada | não reservadas | reservada |
SORT | não reservadas | não reservadas | não reservadas |
SORTED | não reservadas | não reservadas | não reservadas |
START | não reservadas | não reservadas | reservada |
STATISTICS | não reservadas | não reservadas | não reservadas |
STORED | não reservadas | não reservadas | não reservadas |
STRATIFY | não reservadas | não reservadas | não reservadas |
STRUCT | não reservadas | não reservadas | não reservadas |
SUBSTR | não reservadas | não reservadas | não reservadas |
SUBSTRING | não reservadas | não reservadas | não reservadas |
SINCRONIZAR | não reservadas | não reservadas | não reservadas |
TABLE | reservada | não reservadas | reservada |
TABLES | não reservadas | não reservadas | não reservadas |
TABLESAMPLE | não reservadas | não reservadas | reservada |
TBLPROPERTIES | não reservadas | não reservadas | não reservadas |
TEMP | não reservadas | não reservadas | não é uma palavra-chave |
TEMPORARY | não reservadas | não reservadas | não reservadas |
TERMINATED | não reservadas | não reservadas | não reservadas |
THEN | reservada | não reservadas | reservada |
TIME | reservada | não reservadas | reservada |
TO | reservada | não reservadas | reservada |
TOUCH | não reservadas | não reservadas | não reservadas |
TRAILING | reservada | não reservadas | reservada |
TRANSACTION | não reservadas | não reservadas | não reservadas |
TRANSACTIONS | não reservadas | não reservadas | não reservadas |
TRANSFORM | não reservadas | não reservadas | não reservadas |
TRIM | não reservadas | não reservadas | não reservadas |
TRUE | não reservadas | não reservadas | reservada |
TRUNCATE | não reservadas | não reservadas | reservada |
TRY_CAST | não reservadas | não reservadas | não reservadas |
TYPE | não reservadas | não reservadas | não reservadas |
DESARQUIVAR | não reservadas | não reservadas | não reservadas |
UNBOUNDED | não reservadas | não reservadas | não reservadas |
UNCACHE | não reservadas | não reservadas | não reservadas |
UNION | reservada | não reservadas estritas | reservada |
UNIQUE | reservada | não reservadas | reservada |
DESCONHECIDO | reservada | não reservadas | reservada |
UNLOCK | não reservadas | não reservadas | não reservadas |
UNSET | não reservadas | não reservadas | não reservadas |
UPDATE | não reservadas | não reservadas | reservada |
USE | não reservadas | não reservadas | não reservadas |
USER | reservada | não reservadas | reservada |
USING | reservada | não reservadas estritas | reservada |
VALUES | não reservadas | não reservadas | reservada |
VIEW | não reservadas | não reservadas | não reservadas |
VIEWS | não reservadas | não reservadas | não reservadas |
WHEN | reservada | não reservadas | reservada |
WHERE | reservada | não reservadas | reservada |
WINDOW | não reservadas | não reservadas | reservada |
WITH | reservada | não reservadas | reservada |
YEAR | não reservadas | não reservadas | não reservadas |
ZONE | não reservadas | não reservadas | não reservadas |