Compartilhar via


Conformidade com ANSI no Databricks Runtime

Aplica-se a:caixa de seleção marcada Databricks Runtime

Este artigo descreve a conformidade ANSI no Databricks Runtime. Para o modo ANSI no SQL do Databricks, consulte 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 do dialeto ANSI podem não ser diretamente do padrão ANSI SQL, mas seus comportamentos se alinham ao estilo do SQL ANSI.

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 falso Quando true, o Spark tenta estar em conformidade com a especificação ANSI SQL:
  • Gera uma exceção de runtime se ocorrer um estouro em qualquer operação em um campo inteiro ou decimal.
  • Proíbe o uso das palavras-chave reservadas do SQL ANSI como identificadores no analisador do SQL.
spark.sql.storeAssignmentPolicy ANSI (Instituto Nacional Americano de Padrões) 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 o SQL ANSI. 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 um cast válido, que é pouco restrito. 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 nenhuma possível perda de precisão ou truncamento de dados na coerção de tipo, como é o caso da conversão de double para int ou de decimal para double, que não são permitidas.

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:

  • TipoNumérico <=> TipoBooleano
  • TipoString <=> TipoBinário

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 fio Data Timestamp Intervalo Booliano Binário Matriz Mapeamento Estrutura
Numérico S S N N N S N N N N
fio S S S S S S S N N N
Data N S S S N N N N N N
Timestamp N S S S N N N N N N
Intervalo N S N N S N N N N N
Booliano S S N N N S N N N N
Binário S N N N N N S N N N
Matriz N N N N N N N S N N
Mapeamento N N N N N N N N S N
Estrutura 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 de valores de origem não correspondem aos tipos de coluna de destino, o SPARK SQL adiciona automaticamente cláusulas ANSI CAST à INSERT instrução. 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
Curto Curto -> Inteiro -> Longo -> Decimal-> Ponto Flutuante -> Duplo
Int Int -> Long -> Decimal -> Float* -> Double
long Long -> Decimal -> Ponto flutuante* -> Duplo
Decimal Decimal -> Float* -> Duplo
Flutuar Float –> Duplo
Duplo Duplo
Data Data -> Carimbo de data/hora
Timestamp Timestamp
fio fio
Binário Binário
Booliano Booliano
Intervalo Intervalo
Mapeamento Mapa**
Matriz Array**
Estrutura Estrutura
  • 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: Representação gráfica de regras de precedência

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.
  • elt: essa função gera ArrayIndexOutOfBoundsException 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 gera IllegalArgumentException se a entrada não é um dia da semana válido.
  • parse_url: essa função gera IllegalArgumentException se uma cadeia de caracteres de entrada não é uma URL válida.
  • to_date: essa função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou a cadeia de caracteres padrão for inválida.
  • to_timestamp: essa função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou a cadeia de caracteres padrão for inválida.
  • to_unix_timestamp: essa função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou a cadeia de caracteres padrão for inválida.
  • unix_timestamp: essa função falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada ou a cadeia de caracteres 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]: esse operador gera ArrayIndexOutOfBoundsException se está usando índices inválidos.
  • map_col[key]: essa função gera NoSuchElementException quando a chave não existe no mapa.
  • CAST(string_col AS TIMESTAMP): esse operador falhará com uma exceção se a cadeia de caracteres de entrada não puder ser analisada.
  • CAST(string_col AS DATE): esse operador falhará com uma exceção se a cadeia de caracteres de entrada não puder 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 a CAST, exceto pelo fato de que ele retorna o resultado NULL 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 resultado NULL 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 resultado NULL 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 que 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
ADICIONAR não reservadas não reservadas não reservadas
DEPOIS não reservadas não reservadas não reservadas
TODOS reservada não reservadas reservada
ALTERAR não reservadas não reservadas reservada
SEMPRE não reservadas não reservadas não reservadas
ANALISAR não reservadas não reservadas não reservadas
E reservada não reservadas reservada
ANTI não reservadas não reservadas estritas não reservadas
QUALQUER reservada não reservadas reservada
ARQUIVO não reservadas não reservadas não reservadas
ARRAY não reservadas não reservadas reservada
COMO reservada não reservadas reservada
ASC não reservadas não reservadas não reservadas
EM não reservadas não reservadas reservada
AUTORIZAÇÃO reservada não reservadas reservada
ENTRE não reservadas não reservadas reservada
AMBOS reservada não reservadas reservada
BALDE não reservadas não reservadas não reservadas
BALDES não reservadas não reservadas não reservadas
POR não reservadas não reservadas reservada
cache não reservadas não reservadas não reservadas
CASCATA não reservadas não reservadas não reservadas
CASO reservada não reservadas reservada
ELENCO reservada não reservadas reservada
MUDAR não reservadas não reservadas não reservadas
VERIFICAR reservada não reservadas reservada
CLARO não reservadas não reservadas não reservadas
CLUSTER não reservadas não reservadas não reservadas
CLUSTERIZADO não reservadas não reservadas não reservadas
CODEGEN não reservadas não reservadas não reservadas
COTEJAR reservada não reservadas reservada
COLEÇÃO 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
COMENTÁRIO não reservadas não reservadas não reservadas
EXECUTAR não reservadas não reservadas reservada
COMPACTO não reservadas não reservadas não reservadas
COMPACTAÇÕES não reservadas não reservadas não reservadas
CALCULAR não reservadas não reservadas não reservadas
CONCATENAR não reservadas não reservadas não reservadas
CONSTRAINT reservada não reservadas reservada
CUSTO não reservadas não reservadas não reservadas
CRIAR reservada não reservadas reservada
CRUZ reservada não reservadas estritas reservada
CUBO não reservadas não reservadas reservada
ATUAL não reservadas não reservadas reservada
CURRENT_DATE reservada não reservadas reservada
HORA_ATUAL reservada não reservadas reservada
CURRENT_TIMESTAMP reservada não reservadas reservada
USUÁRIO_ATUAL reservada não reservadas reservada
DADOS não reservadas não reservadas não reservadas
BASE DE DADOS não reservadas não reservadas não reservadas
BANCOS DE DADOS não reservadas não reservadas não reservadas
DIA não reservadas não reservadas não reservadas
DBPROPERTIES não reservadas não reservadas não reservadas
DEFINIDO não reservadas não reservadas não reservadas
Delete (excluir) não reservadas não reservadas reservada
DELIMITADO não reservadas não reservadas não reservadas
DESC não reservadas não reservadas não reservadas
DESCREVER não reservadas não reservadas reservada
DFS não reservadas não reservadas não reservadas
DIRETÓRIOS não reservadas não reservadas não reservadas
DIRETÓRIO não reservadas não reservadas não reservadas
DISTINTO reservada não reservadas reservada
DISTRIBUIR não reservadas não reservadas não reservadas
DIV não reservadas não reservadas não é uma palavra-chave
Deixar cair não reservadas não reservadas reservada
SENÃO reservada não reservadas reservada
FIM reservada não reservadas reservada
ESCAPAR reservada não reservadas reservada
ESCAPOU não reservadas não reservadas não reservadas
EXCETO reservada não reservadas estritas reservada
TROCA não reservadas não reservadas não reservadas
EXISTE não reservadas não reservadas reservada
EXPLAIN não reservadas não reservadas não reservadas
EXPORTAÇÃO não reservadas não reservadas não reservadas
PROLONGADO não reservadas não reservadas não reservadas
EXTERNO não reservadas não reservadas reservada
Extrato não reservadas não reservadas reservada
FALSO reservada não reservadas reservada
BUSCAR reservada não reservadas reservada
CAMPOS não reservadas não reservadas não reservadas
FILTRO reservada não reservadas reservada
FORMATO DE ARQUIVO não reservadas não reservadas não reservadas
PRIMEIRO não reservadas não reservadas não reservadas
FN não reservadas não reservadas não reservadas
SEGUINTE não reservadas não reservadas não reservadas
PARA reservada não reservadas reservada
ESTRANGEIRO reservada não reservadas reservada
FORMATO não reservadas não reservadas não reservadas
FORMATADO não reservadas não reservadas não reservadas
DE reservada não reservadas reservada
CHEIO reservada não reservadas estritas reservada
FUNÇÃO não reservadas não reservadas reservada
FUNÇÕES não reservadas não reservadas não reservadas
GERADO não reservadas não reservadas não reservadas
MUNDIAL não reservadas não reservadas reservada
GRANT reservada não reservadas reservada
BOLSAS não reservadas não reservadas não reservadas
GRUPO reservada não reservadas reservada
AGRUPAMENTO não reservadas não reservadas reservada
HAVING reservada não reservadas reservada
HORA não reservadas não reservadas não reservadas
SE não reservadas não reservadas não é uma palavra-chave
IGNORAR não reservadas não reservadas não reservadas
IMPORTAR não reservadas não reservadas não reservadas
EM reservada não reservadas reservada
ÍNDICE não reservadas não reservadas não reservadas
ÍNDICES não reservadas não reservadas não reservadas
INTERNO reservada não reservadas estritas reservada
INPATH não reservadas não reservadas não reservadas
FORMATO DE ENTRADA não reservadas não reservadas não reservadas
INSERT não reservadas não reservadas reservada
CRUZAR-SE reservada não reservadas estritas reservada
INTERVALO não reservadas não reservadas reservada
EM reservada não reservadas reservada
É reservada não reservadas reservada
ITENS não reservadas não reservadas não reservadas
JOIN reservada não reservadas estritas reservada
JSON não reservadas não reservadas não reservadas
CHAVE não reservadas não reservadas não reservadas
CHAVES não reservadas não reservadas não reservadas
ÚLTIMO não reservadas não reservadas não reservadas
Lateral reservada não reservadas estritas reservada
PREGUIÇOSO não reservadas não reservadas não reservadas
ENTRELINHA reservada não reservadas reservada
ESQUERDA reservada não reservadas estritas reservada
GOSTAR 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
LINHAS não reservadas não reservadas não reservadas
LIST não reservadas não reservadas não reservadas
CARGA não reservadas não reservadas não reservadas
LOCAL não reservadas não reservadas reservada
LOCALIZAÇÃO não reservadas não reservadas não reservadas
FECHADURA não reservadas não reservadas não reservadas
FECHADURAS não reservadas não reservadas não reservadas
LÓGICO não reservadas não reservadas não reservadas
MACRO não reservadas não reservadas não reservadas
Mapa não reservadas não reservadas não reservadas
COMBINADO não reservadas não reservadas não reservadas
MESCLAR não reservadas não reservadas não reservadas
MINUTO não reservadas não reservadas não reservadas
MENOS não reservadas não reservadas estritas não reservadas
MÊS 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
NÃO reservada não reservadas reservada
NULO reservada não reservadas reservada
NULOS não reservadas não reservadas não reservadas
DE não reservadas não reservadas reservada
ATIVADO reservada não reservadas estritas reservada
SOMENTE 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
ORDEM reservada não reservadas reservada
FORA não reservadas não reservadas reservada
EXTERNO reservada não reservadas reservada
Formato de Saída não reservadas não reservadas não reservadas
ENCERRADO não reservadas não reservadas não reservadas
SOBREPOSIÇÕES reservada não reservadas reservada
sobreposição não reservadas não reservadas não reservadas
SOBRESCREVER não reservadas não reservadas não reservadas
PARTITION não reservadas não reservadas reservada
PARTICIONADA não reservadas não reservadas não reservadas
PARTIÇÕES não reservadas não reservadas não reservadas
POR CENTO não reservadas não reservadas não reservadas
PIVOT não reservadas não reservadas não reservadas
COLOCAÇÃO não reservadas não reservadas não reservadas
POSIÇÃO não reservadas não reservadas reservada
ANTERIOR não reservadas não reservadas não reservadas
PRIMÁRIO reservada não reservadas reservada
PRINCÍPIOS não reservadas não reservadas não reservadas
PROPRIEDADES não reservadas não reservadas não reservadas
LIMPAR não reservadas não reservadas não reservadas
QUALIFY reservada não reservadas reservada
CONSULTA não reservadas não reservadas não reservadas
GAMA não reservadas não reservadas reservada
DESTINATÁRIO não reservadas não reservadas não reservadas
RECIPIENTS não reservadas não reservadas não reservadas
Leitor de Registros não reservadas não reservadas não reservadas
Escritor de Registros não reservadas não reservadas não reservadas
RECUPERAR não reservadas não reservadas não reservadas
REDUZIR não reservadas não reservadas não reservadas
REFERÊNCIAS 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
RENOMEAR não reservadas não reservadas não reservadas
REPARAR não reservadas não reservadas não reservadas
SUBSTITUIR não reservadas não reservadas não reservadas
RESET não reservadas não reservadas não reservadas
RESPEITO não reservadas não reservadas não reservadas
RESTRINGIR não reservadas não reservadas não reservadas
REVOKE não reservadas não reservadas reservada
CERTO reservada não reservadas estritas reservada
RLIKE não reservadas não reservadas não reservadas
FUNÇÃO não reservadas não reservadas não reservadas
Funções não reservadas não reservadas não reservadas
REVERSÃO não reservadas não reservadas reservada
Consolidação não reservadas não reservadas reservada
LINHA não reservadas não reservadas reservada
LINHAS não reservadas não reservadas reservada
SCHEMA não reservadas não reservadas não reservadas
ESQUEMAS não reservadas não reservadas não é uma palavra-chave
SEGUNDO 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
SEPARADO 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
USUÁRIO_DA_SESSÃO reservada não reservadas reservada
SET não reservadas não reservadas reservada
CONJUNTOS não reservadas não reservadas não reservadas
COMPARTILHAR não reservadas não reservadas não reservadas
SHARES não reservadas não reservadas não reservadas
PROGRAMA não reservadas não reservadas não reservadas
DISTORCIDA não reservadas não reservadas não reservadas
ALGUNS reservada não reservadas reservada
ORDENAR não reservadas não reservadas não reservadas
CLASSIFICADOS não reservadas não reservadas não reservadas
COMEÇAR não reservadas não reservadas reservada
ESTATÍSTICA não reservadas não reservadas não reservadas
ARMAZENADO não reservadas não reservadas não reservadas
ESTRATIFICAR não reservadas não reservadas não reservadas
ESTRUTURA não reservadas não reservadas não reservadas
SUBSTR não reservadas não reservadas não reservadas
SUBSEQUÊNCIA não reservadas não reservadas não reservadas
SYNC 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
TEMPORÁRIO não reservadas não reservadas não reservadas
TERMINADA não reservadas não reservadas não reservadas
ENTÃO reservada não reservadas reservada
TEMPO reservada não reservadas reservada
PARA reservada não reservadas reservada
TOCAR não reservadas não reservadas não reservadas
ATRÁS reservada não reservadas reservada
TRANSAÇÃO não reservadas não reservadas não reservadas
TRANSAÇÕES não reservadas não reservadas não reservadas
TRANSFORMAR não reservadas não reservadas não reservadas
APARAR não reservadas não reservadas não reservadas
VERDADEIRO não reservadas não reservadas reservada
TRUNCAR não reservadas não reservadas reservada
TRY_CAST não reservadas não reservadas não reservadas
Tipo não reservadas não reservadas não reservadas
DESARQUIVAR não reservadas não reservadas não reservadas
ILIMITADO não reservadas não reservadas não reservadas
Limpar cache não reservadas não reservadas não reservadas
UNIÃO reservada não reservadas estritas reservada
ÚNICO reservada não reservadas reservada
DESCONHECIDO reservada não reservadas reservada
DESBLOQUEAR não reservadas não reservadas não reservadas
NÃO DEFINIDO não reservadas não reservadas não reservadas
UPDATE não reservadas não reservadas reservada
USAR não reservadas não reservadas não reservadas
UTILIZADOR reservada não reservadas reservada
USANDO reservada não reservadas estritas reservada
VALUES não reservadas não reservadas reservada
VISUALIZAR não reservadas não reservadas não reservadas
VIEWS não reservadas não reservadas não reservadas
QUANDO reservada não reservadas reservada
WHERE reservada não reservadas reservada
WINDOW não reservadas não reservadas reservada
COM reservada não reservadas reservada
ANO não reservadas não reservadas não reservadas
ZONA não reservadas não reservadas não reservadas