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, consulte ANSI_MODE.
O Spark SQL tem duas opções para dar suporte à conformidade com o padrão 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 ANSI em vez de ser compatível com Hive. Por exemplo, o Spark lançará uma exceção no tempo de execução em vez de retornar resultados nulos se as entradas para um operador/função SQL forem inválidas. Alguns recursos do dialeto ANSI podem não ser diretamente do padrão ANSI SQL, mas seus comportamentos se alinham com o estilo do ANSI SQL.
Além disso, o Spark SQL tem uma opção independente para controlar comportamentos de transmissão implícitos ao armazenar linhas em uma tabela. Os comportamentos de transmissão são definidos como regras de atribuição de armazenamento no padrão.
Quando spark.sql.storeAssignmentPolicy
definido como ANSI
, o Spark SQL está em conformidade com as regras de atribuição de armazenamento ANSI. Esta é uma configuração separada porque seu valor padrão é ANSI
, enquanto a configuração spark.sql.ansi.enabled
está desabilitada por padrão.
A tabela a seguir resume o comportamento:
Nome de Propriedade | Predefinido | Significado |
---|---|---|
spark.sql.ansi.enabled |
false | Quando verdadeiro, 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 armazenar um valor em uma coluna com um tipo de dados diferente, o Spark executa a conversão de tipo. Existem três políticas para o tipo de regras de coerção: ANSI , legacy , e strict .- ANSI : O Spark executa a coerção de tipo de acordo com ANSI SQL. Na prática, o comportamento é basicamente o mesmo do PostgreSQL. Ele não permite certas conversões de tipo irracionais, como a conversão de string para int ou double para booleano.- legacy : Spark permite o tipo de coerção, desde que seja um Cast válido, que é muito solto. Por exemplo, a conversão de string em int ou double em boolean é permitida. É também o único comportamento no Spark 2.x e é compatível com o Hive.- strict : O Spark não permite qualquer possível perda de precisão ou truncamento de dados na coerção de tipo, por exemplo, a conversão de duplo para int ou decimal para duplo não é permitida. |
As subseções a seguir apresentam alterações de comportamento em operações aritméticas, conversões de tipo e análise SQL quando o modo ANSI está habilitado. Para conversões de tipo no Spark SQL, existem três tipos deles e este artigo irá apresentá-los um a um: cast, atribuição de armazenamento e coerção de tipo.
Operações aritméticas
No Spark SQL, as operações aritméticas executadas em tipos numéricos (com exceção do decimal) não são verificadas quanto a estouros por padrão.
Isso significa que, no caso de uma operação causar 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 é um número negativo). Por outro lado, o Spark SQL retorna null para estouros decimais.
Quando spark.sql.ansi.enabled
é definido como true
e ocorre um estouro em operações aritméticas numéricas e intervalares, ele lança uma exceção aritmética no tempo de execução.
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
Cost
Quando spark.sql.ansi.enabled
definido como true
, a conversão explícita por CAST
sintaxe lança uma exceção de tempo de execução para padrões de conversão ilegais definidos no padrão, como transmissões de uma cadeia de caracteres para um inteiro.
A CAST
cláusula do modo Spark ANSI segue as regras de sintaxe da seção 6.13 "cast specification" na ISO/IEC 9075-2:2011 Tecnologia da informação — Linguagens de banco de dados - SQL — Parte 2: Foundation (SQL/Foundation), exceto que permite especialmente as seguintes conversões de tipo diretas que não são permitidas de acordo com o padrão ANSI:
- NumericType <=> BooleanType
- StringType <=> BinaryType
As combinações válidas de tipo de dados de origem e destino em uma CAST
expressão são dadas pela tabela a seguir.
"Y" indica que a combinação é sintaticamente válida sem restrições e "N" indica que a combinação não é válida.
SourceTarget | Numérico | String | Date | Carimbo de Data/Hora | Intervalo | Boolean | Binário | Matriz | Mapa | Estrutura |
---|---|---|---|---|---|---|---|---|---|---|
Numérico | Y | Y | N | N | N | Y | N | N | N | N |
String | Y | Y | Y | Y | Y | Y | Y | N | N | N |
Date | N | Y | Y | Y | N | N | N | N | N | N |
Carimbo de Data/Hora | N | Y | Y | Y | N | N | N | N | N | N |
Intervalo | N | Y | N | N | Y | N | N | N | N | N |
Boolean | Y | Y | N | N | N | Y | N | N | N | N |
Binário | Y | N | N | N | N | N | Y | N | N | N |
Matriz | N | N | N | N | N | N | N | Y | N | N |
Mapa | N | N | N | N | N | N | N | N | Y | N |
Estrutura | 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
Atribuição de loja
O padrão da configuração spark.sql.storeAssignmentPolicy
é .ANSI
Com essa configuração, quando os tipos de dados de valores de origem não correspondem aos tipos de coluna de destino, o Spark SQL adiciona automaticamente cláusulas ANSI CAST à instrução INSERT.
Durante a inserção da tabela sob essa política, o Spark verifica e rejeita transmissões inválidas, lançando uma exceção para garantir a qualidade dos dados. Isso significa que, se uma tentativa de inserção falhar devido a uma incompatibilidade de tipo, isso não resultará em nenhum dado sendo parcialmente gravado na tabela.
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
Estes exemplos mostram o Spark SQL impedindo que dados incompatíveis sejam inseridos, mantendo assim a integridade dos dados.
Quando o é definido como LEGACY
, o spark.sql.storeAssignmentPolicy
Spark SQL reverte para o comportamento predominante até o Spark 2.x. Neste modo, em vez de usar ANSI CAST, ele aplica operações CAST herdadas. Sob essa política, conversões inválidas durante inserções de tabela resultam em valores NULL ou valores incorretos sendo inseridos, em vez de lançar 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)
Tipo de coerção
Promoção de tipo e precedência
Quando spark.sql.ansi.enabled
definido como true
, o Spark SQL usa várias regras que regem 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 implicitamente.
Tipo de dados | lista de precedências (da mais estreita para a mais larga) |
---|---|
Byte | Byte - Curto -> Int -> Longo -> Decimal -> Float* -> Duplo> |
Curto | Curto -> Int -> Longo -> Decimal-> Float* -> Duplo |
Int | Int -> Longo -> Decimal -> Float* -> Duplo |
Longo | Longo -> Decimal -> Float* -> Duplo |
Decimal | Decimal -> Float* -> Duplo |
Float | Flutuador -> Duplo |
Duplo | Duplo |
Date | Data -> Carimbo de data/hora |
Carimbo de Data/Hora | Carimbo de Data/Hora |
String | String |
Binário | Binário |
Boolean | Boolean |
Intervalo | Intervalo |
Mapa | Mapa** |
Matriz | Matriz** |
Estrutura | Estrutura** |
- Para o tipo menos comum, o flutuador de resolução é ignorado para evitar perda de precisão.
** Para um tipo complexo, a regra de precedência aplica-se recursivamente aos seus elementos componentes.
Aplicam-se regras especiais para o tipo String e NULL não tipado. Um NULL pode ser promovido para qualquer outro tipo, enquanto um String pode ser promovido para qualquer tipo de dados simples.
Esta é uma representação gráfica da lista de precedências 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 a partir da lista de precedência por todos os elementos do conjunto de tipos.
A resolução de tipo menos comum é usada para:
- Decida se uma função que espera um parâmetro de um tipo pode ser invocada usando um argumento de um tipo mais restrito.
- Derive o tipo de argumento para funções que esperam um tipo de argumento compartilhado para vários parâmetros, como coalesce, menor ou maior.
- Derive os tipos de operando para operadores, como operações aritméticas ou comparações.
- Derive o tipo de resultado para expressões como a expressão de maiúsculas e minúsculas.
- Derive os tipos de elemento, chave ou valor para construtores de matriz e mapa.
Regras especiais são aplicadas se o tipo menos comum resolver para FLOAT. Com valores de tipo float, se qualquer um dos tipos for INT, BIGINT ou DECIMAL, o tipo menos comum é empurrado para DOUBLE para evitar a perda potencial 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 SQL
O comportamento de algumas funções SQL pode ser diferente no modo ANSI (spark.sql.ansi.enabled=true
).
size
: Esta função retorna null para entrada nula no modo ANSI.element_at
:- Esta função lança
ArrayIndexOutOfBoundsException
se estiver usando índices inválidos. - Esta função lança se a
NoSuchElementException
chave não existir no mapa.
- Esta função lança
elt
: Esta função lançaArrayIndexOutOfBoundsException
se estiver usando índices inválidos.make_date
: Esta função falha com uma exceção se a data do resultado for inválida.make_timestamp
: Esta função falhará com uma exceção se o carimbo de data/hora do resultado for inválido.make_interval
: Esta função falha com uma exceção se o intervalo de resultados for inválido.next_day
: Esta função é lançada se aIllegalArgumentException
entrada não for um dia válido da semana.parse_url
: Esta função é lançada se uma string deIllegalArgumentException
entrada não for uma url válida.to_date
: Esta função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou se a cadeia de caracteres de padrão for inválida.to_timestamp
: Esta função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou se a cadeia de caracteres de padrão for inválida.to_unix_timestamp
: Esta função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou se a cadeia de caracteres de padrão for inválida.unix_timestamp
: Esta função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou se a cadeia de caracteres de padrão for inválida.
Operadores SQL
O comportamento de alguns operadores SQL pode ser diferente no modo ANSI (spark.sql.ansi.enabled=true
).
array_col[index]
: Este operador lançaArrayIndexOutOfBoundsException
se estiver usando índices inválidos.map_col[key]
: Este operador lança se aNoSuchElementException
chave não existir no mapa.CAST(string_col AS TIMESTAMP)
: Este operador falha com uma exceção se a cadeia de caracteres de entrada não puder ser analisada.CAST(string_col AS DATE)
: Este operador falha com uma exceção se a cadeia de caracteres de entrada não puder ser analisada.
Funções úteis para o modo ANSI
Quando o modo ANSI está ativado, ele lança exceções para operações inválidas. Você pode usar as seguintes funções SQL para suprimir essas exceções.
try_cast
: idêntico aoCAST
, exceto que ele retornaNULL
resultado em vez de lançar uma exceção no erro de tempo de execução.try_add
: idêntico ao operador+
add , exceto que ele retornaNULL
resultado em vez de lançar uma exceção no estouro de valor integral.try_divide
: idêntico ao operador/
de divisão, exceto que ele retornaNULL
resultado em vez de lançar uma exceção na divisão 0.
Palavras-chave SQL
Quando spark.sql.ansi.enabled
for true, o Spark SQL usará o analisador de modo ANSI.
Neste modo, o Spark SQL tem dois tipos de palavras-chave:
- Palavras-chave reservadas: palavras-chave que são reservadas e não podem ser usadas como identificadores para tabela, visualização, coluna, função, alias, etc.
- Palavras-chave não reservadas: Palavras-chave que têm um significado especial apenas em contextos particulares e podem ser usadas como identificadores em outros contextos. Por exemplo,
EXPLAIN SELECT ...
é um comando, mas EXPLAIN pode ser usado como identificadores em outros lugares.
Quando o modo ANSI está desativado, o Spark SQL tem dois tipos de palavras-chave:
- Palavras-chave não reservadas: mesma definição que aquela em que o modo ANSI foi ativado.
- Palavras-chave estritas não reservadas: 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
, é false.
Abaixo está 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 |
---|---|---|---|
ADICIONAR | não reservado | não reservado | não reservado |
DEPOIS | não reservado | não reservado | não reservado |
TODOS | reservado | não reservado | reservado |
ALTERAR | não reservado | não reservado | reservado |
SEMPRE | não reservado | não reservado | não reservado |
ANALISAR | não reservado | não reservado | não reservado |
AND | reservado | não reservado | reservado |
ANTI | não reservado | estrito-não reservado | não reservado |
QUALQUER | reservado | não reservado | reservado |
ARQUIVO | não reservado | não reservado | não reservado |
MATRIZ | não reservado | não reservado | reservado |
AS | reservado | não reservado | reservado |
A | não reservado | não reservado | não reservado |
AT | não reservado | não reservado | reservado |
AUTORIZAÇÃO | reservado | não reservado | reservado |
BETWEEN | não reservado | não reservado | reservado |
AMBOS | reservado | não reservado | reservado |
BALDE | não reservado | não reservado | não reservado |
BALDES | não reservado | não reservado | não reservado |
BY | não reservado | não reservado | reservado |
CACHE | não reservado | não reservado | não reservado |
CASCATA | não reservado | não reservado | não reservado |
CASE | reservado | não reservado | reservado |
CAST | reservado | não reservado | reservado |
MUDANÇA | não reservado | não reservado | não reservado |
VERIFICAR | reservado | não reservado | reservado |
LIMPAR | não reservado | não reservado | não reservado |
AGLOMERAÇÃO | não reservado | não reservado | não reservado |
AGRUPADOS | não reservado | não reservado | não reservado |
CODEGEN | não reservado | não reservado | não reservado |
COLISÃO | reservado | não reservado | reservado |
COLEÇÃO | não reservado | não reservado | não reservado |
COLUNA | reservado | não reservado | reservado |
COLUNAS | não reservado | não reservado | não reservado |
COMENTAR | não reservado | não reservado | não reservado |
COMPROMETER-SE | não reservado | não reservado | reservado |
COMPACTO | não reservado | não reservado | não reservado |
COMPAÇÕES | não reservado | não reservado | não reservado |
COMPUTAÇÃO | não reservado | não reservado | não reservado |
CONCATENAR | não reservado | não reservado | não reservado |
RESTRIÇÃO | reservado | não reservado | reservado |
CUSTO | não reservado | não reservado | não reservado |
CREATE | reservado | não reservado | reservado |
CRUZAMENTO | reservado | estrito-não reservado | reservado |
CUBO | não reservado | não reservado | reservado |
ATUAL | não reservado | não reservado | reservado |
CURRENT_DATE | reservado | não reservado | reservado |
CURRENT_TIME | reservado | não reservado | reservado |
CURRENT_TIMESTAMP | reservado | não reservado | reservado |
CURRENT_USER | reservado | não reservado | reservado |
DADOS | não reservado | não reservado | não reservado |
BASE DE DADOS | não reservado | não reservado | não reservado |
BASES DE DADOS | não reservado | não reservado | não reservado |
DAY | não reservado | não reservado | não reservado |
DBPROPERTIES | não reservado | não reservado | não reservado |
DEFINIDO | não reservado | não reservado | não reservado |
DELETE | não reservado | não reservado | reservado |
DELIMITADO | não reservado | não reservado | não reservado |
DESC | não reservado | não reservado | não reservado |
DESCREVER | não reservado | não reservado | reservado |
DFS | não reservado | não reservado | não reservado |
DIRETÓRIOS | não reservado | não reservado | não reservado |
DIRETÓRIO | não reservado | não reservado | não reservado |
DISTINTOS | reservado | não reservado | reservado |
DISTRIBUIR | não reservado | não reservado | não reservado |
DIV | não reservado | não reservado | não é uma palavra-chave |
DROP | não reservado | não reservado | reservado |
OUTROS | reservado | não reservado | reservado |
FIM | reservado | não reservado | reservado |
FUGA | reservado | não reservado | reservado |
ESCAPOU | não reservado | não reservado | não reservado |
EXCETO | reservado | estrito-não reservado | reservado |
CÂMBIO | não reservado | não reservado | não reservado |
EXISTE | não reservado | não reservado | reservado |
EXPLAIN | não reservado | não reservado | não reservado |
EXPORTAÇÃO | não reservado | não reservado | não reservado |
EXTENDED | não reservado | não reservado | não reservado |
EXTERNA | não reservado | não reservado | reservado |
EXTRATO | não reservado | não reservado | reservado |
FALSE | reservado | não reservado | reservado |
FETCH | reservado | não reservado | reservado |
CAMPOS | não reservado | não reservado | não reservado |
FILTRAR | reservado | não reservado | reservado |
FORMATO DE FICHEIRO | não reservado | não reservado | não reservado |
FIRST | não reservado | não reservado | não reservado |
FN | não reservado | não reservado | não reservado |
SEGUINTES | não reservado | não reservado | não reservado |
PARA | reservado | não reservado | reservado |
ESTRANGEIROS | reservado | não reservado | reservado |
FORMATO | não reservado | não reservado | não reservado |
FORMATADO | não reservado | não reservado | não reservado |
FROM | reservado | não reservado | reservado |
COMPLETO | reservado | estrito-não reservado | reservado |
FUNÇÃO | não reservado | não reservado | reservado |
FUNCTIONS | não reservado | não reservado | não reservado |
GERADO | não reservado | não reservado | não reservado |
GLOBAL | não reservado | não reservado | reservado |
GRANT | reservado | não reservado | reservado |
SUBVENÇÕES | não reservado | não reservado | não reservado |
GRUPO | reservado | não reservado | reservado |
AGRUPAMENTO | não reservado | não reservado | reservado |
HAVING | reservado | não reservado | reservado |
HORA | não reservado | não reservado | não reservado |
IF | não reservado | não reservado | não é uma palavra-chave |
IGNORE | não reservado | não reservado | não reservado |
IMPORTAÇÃO | não reservado | não reservado | não reservado |
IN | reservado | não reservado | reservado |
INDEX | não reservado | não reservado | não reservado |
ÍNDICES | não reservado | não reservado | não reservado |
INTERIOR | reservado | estrito-não reservado | reservado |
INPATH | não reservado | não reservado | não reservado |
INPUTFORMAT | não reservado | não reservado | não reservado |
INSERT | não reservado | não reservado | reservado |
INTERSECT | reservado | estrito-não reservado | reservado |
INTERVALO | não reservado | não reservado | reservado |
INTO | reservado | não reservado | reservado |
IS | reservado | não reservado | reservado |
PONTOS | não reservado | não reservado | não reservado |
JOIN | reservado | estrito-não reservado | reservado |
CHAVE | não reservado | não reservado | não reservado |
CHAVES | não reservado | não reservado | não reservado |
LAST | não reservado | não reservado | não reservado |
LATERAIS | reservado | estrito-não reservado | reservado |
Preguiçoso | não reservado | não reservado | não reservado |
LIDERANDO | reservado | não reservado | reservado |
LEFT | reservado | estrito-não reservado | reservado |
GOSTAR | não reservado | não reservado | reservado |
ILIKE | não reservado | não reservado | não reservado |
LIMITE | não reservado | não reservado | não reservado |
LINHAS | não reservado | não reservado | não reservado |
LISTA | não reservado | não reservado | não reservado |
CARREGAR | não reservado | não reservado | não reservado |
LOCAIS | não reservado | não reservado | reservado |
LOCALIZAÇÃO | não reservado | não reservado | não reservado |
BLOQUEIO | não reservado | não reservado | não reservado |
FECHADURAS | não reservado | não reservado | não reservado |
LÓGICO | não reservado | não reservado | não reservado |
MACRO | não reservado | não reservado | não reservado |
MAPA | não reservado | não reservado | não reservado |
CORRESPONDIDO | não reservado | não reservado | não reservado |
MESCLAR | não reservado | não reservado | não reservado |
MINUTO | não reservado | não reservado | não reservado |
MENOS | não reservado | estrito-não reservado | não reservado |
MONTH | não reservado | não reservado | não reservado |
MSCK | não reservado | não reservado | não reservado |
ESPAÇO PARA NOMES | não reservado | não reservado | não reservado |
ESPAÇOS PARA NOMES | não reservado | não reservado | não reservado |
NATURAL | reservado | estrito-não reservado | reservado |
Não | não reservado | não reservado | reservado |
NOT | reservado | não reservado | reservado |
NULL | reservado | não reservado | reservado |
NULOS | não reservado | não reservado | não reservado |
OF | não reservado | não reservado | reservado |
ON | reservado | estrito-não reservado | reservado |
APENAS | reservado | não reservado | reservado |
OPTION | não reservado | não reservado | não reservado |
OPTIONS | não reservado | não reservado | não reservado |
OU | reservado | não reservado | reservado |
ENCOMENDA | reservado | não reservado | reservado |
SAÍDAS | não reservado | não reservado | reservado |
EXTERIOR | reservado | não reservado | reservado |
OUTPUTFORMAT | não reservado | não reservado | não reservado |
MAIS DE | não reservado | não reservado | não reservado |
SOBREPOSIÇÕES | reservado | não reservado | reservado |
SOBREPOSIÇÃO | não reservado | não reservado | não reservado |
SUBSTITUIR | não reservado | não reservado | não reservado |
PARTIÇÃO | não reservado | não reservado | reservado |
PARTICIONADO | não reservado | não reservado | não reservado |
PARTIÇÕES | não reservado | não reservado | não reservado |
PERCENTAGEM | não reservado | não reservado | não reservado |
PIVÔ | não reservado | não reservado | não reservado |
COLOCAÇÃO | não reservado | não reservado | não reservado |
POSIÇÃO | não reservado | não reservado | reservado |
PRECEDENTES | não reservado | não reservado | não reservado |
PRIMÁRIO | reservado | não reservado | reservado |
PRINCÍPIOS | não reservado | não reservado | não reservado |
PROPRIEDADES | não reservado | não reservado | não reservado |
PURGA | não reservado | não reservado | não reservado |
QUALIFICAR | reservado | não reservado | reservado |
CONSULTA | não reservado | não reservado | não reservado |
GAMA | não reservado | não reservado | reservado |
DESTINATÁRIO | não reservado | não reservado | não reservado |
DESTINATÁRIOS | não reservado | não reservado | não reservado |
LEITOR DE REGISTOS | não reservado | não reservado | não reservado |
RECORDISTA | não reservado | não reservado | não reservado |
RECUPERAR | não reservado | não reservado | não reservado |
REDUZIR | não reservado | não reservado | não reservado |
REFERÊNCIAS | reservado | não reservado | reservado |
REFRESH | não reservado | não reservado | não reservado |
REGEXP | não reservado | não reservado | não é uma palavra-chave |
REMOVER | não reservado | não reservado | não reservado |
RENAME | não reservado | não reservado | não reservado |
REPARAÇÃO | não reservado | não reservado | não reservado |
REPLACE | não reservado | não reservado | não reservado |
RESET | não reservado | não reservado | não reservado |
RESPEITO | não reservado | não reservado | não reservado |
RESTRINGIR | não reservado | não reservado | não reservado |
REVOKE | não reservado | não reservado | reservado |
RIGHT | reservado | estrito-não reservado | reservado |
SEMELHANTE | não reservado | não reservado | não reservado |
FUNÇÃO | não reservado | não reservado | não reservado |
FUNÇÕES | não reservado | não reservado | não reservado |
REVERSÃO | não reservado | não reservado | reservado |
ROLLUP | não reservado | não reservado | reservado |
LINHA | não reservado | não reservado | reservado |
LINHAS | não reservado | não reservado | reservado |
ESQUEMA | não reservado | não reservado | não reservado |
ESQUEMAS | não reservado | não reservado | não é uma palavra-chave |
SEGUNDO | não reservado | não reservado | não reservado |
SELECIONAR | reservado | não reservado | reservado |
SEMI | não reservado | estrito-não reservado | não reservado |
SEPARADOS | não reservado | não reservado | não reservado |
SERDE | não reservado | não reservado | não reservado |
SERDEPROPRIEDADES | não reservado | não reservado | não reservado |
SESSION_USER | reservado | não reservado | reservado |
SET | não reservado | não reservado | reservado |
CONJUNTOS | não reservado | não reservado | não reservado |
PARTILHAR | não reservado | não reservado | não reservado |
AÇÕES | não reservado | não reservado | não reservado |
PROGRAMA | não reservado | não reservado | não reservado |
ENVIESADO | não reservado | não reservado | não reservado |
ALGUNS | reservado | não reservado | reservado |
ORDENAR | não reservado | não reservado | não reservado |
ORDENADO | não reservado | não reservado | não reservado |
INICIAR | não reservado | não reservado | reservado |
ESTATÍSTICA | não reservado | não reservado | não reservado |
CONSERVADO | não reservado | não reservado | não reservado |
ESTRATIFICAR | não reservado | não reservado | não reservado |
ESTRUTURA | não reservado | não reservado | não reservado |
SUBSTR | não reservado | não reservado | não reservado |
SUBSTRING | não reservado | não reservado | não reservado |
SINCRONIZAÇÃO | não reservado | não reservado | não reservado |
TABELA | reservado | não reservado | reservado |
TABELAS | não reservado | não reservado | não reservado |
EXEMPLO TABLESAMPLE | não reservado | não reservado | reservado |
TBLPROPERTIES | não reservado | não reservado | não reservado |
TEMP | não reservado | não reservado | não é uma palavra-chave |
TEMPORÁRIO | não reservado | não reservado | não reservado |
RESCINDIDO | não reservado | não reservado | não reservado |
EM SEGUIDA, | reservado | não reservado | reservado |
TIME | reservado | não reservado | reservado |
TO | reservado | não reservado | reservado |
TOCAR | não reservado | não reservado | não reservado |
ATRÁS | reservado | não reservado | reservado |
TRANSAÇÃO | não reservado | não reservado | não reservado |
TRANSAÇÕES | não reservado | não reservado | não reservado |
TRANSFORMAR | não reservado | não reservado | não reservado |
TRIM | não reservado | não reservado | não reservado |
TRUE | não reservado | não reservado | reservado |
TRUNCATE | não reservado | não reservado | reservado |
TRY_CAST | não reservado | não reservado | não reservado |
TIPO | não reservado | não reservado | não reservado |
NÃO ARQUIVAR | não reservado | não reservado | não reservado |
ILIMITADO | não reservado | não reservado | não reservado |
UNCACHE | não reservado | não reservado | não reservado |
UNION | reservado | estrito-não reservado | reservado |
ÚNICO | reservado | não reservado | reservado |
DESCONHECIDO | reservado | não reservado | reservado |
DESBLOQUEAR | não reservado | não reservado | não reservado |
NÃO DEFINIDO | não reservado | não reservado | não reservado |
ATUALIZAR | não reservado | não reservado | reservado |
USE | não reservado | não reservado | não reservado |
UTILIZADOR | reservado | não reservado | reservado |
UTILIZAÇÃO | reservado | estrito-não reservado | reservado |
VALORES | não reservado | não reservado | reservado |
VER | não reservado | não reservado | não reservado |
MODOS DE EXIBIÇÃO | não reservado | não reservado | não reservado |
Quando… | reservado | não reservado | reservado |
WHERE | reservado | não reservado | reservado |
JANELA | não reservado | não reservado | reservado |
WITH | reservado | não reservado | reservado |
YEAR | não reservado | não reservado | não reservado |
ZONA | não reservado | não reservado | não reservado |