Condividi tramite


Conformità ANSI in Databricks Runtime

Si applica a:segno di spunta sì Databricks Runtime

Questo articolo descrive la conformità ANSI in Databricks Runtime. Per la modalità ANSI in Databricks SQL, vedere ANSI_MODE.

Spark SQL offre due opzioni per supportare la conformità con lo standard SQL ANSI: spark.sql.ansi.enabled e spark.sql.storeAssignmentPolicy.

Quando spark.sql.ansi.enabled è impostato su true, Spark SQL usa un dialetto conforme ANSI invece di essere conforme a Hive. Ad esempio, Spark genererà un'eccezione in fase di esecuzione anziché restituire risultati Null se gli input a un operatore/funzione SQL non sono validi. Alcune caratteristiche del dialetto ANSI potrebbero non essere direttamente dallo standard SQL ANSI, ma i relativi comportamenti sono allineati allo stile di ANSI SQL.

Spark SQL offre inoltre un'opzione indipendente per controllare i comportamenti di conversione impliciti quando si archivia righe in una tabella. I comportamenti di cast vengono definiti come regole di assegnazione dell'archivio nello standard.

Quando spark.sql.storeAssignmentPolicy è impostato su ANSI, Spark SQL è conforme alle regole di assegnazione dell'archivio ANSI. Si tratta di una configurazione separata perché il valore predefinito è ANSI, mentre la configurazione spark.sql.ansi.enabled è disabilitata per impostazione predefinita.

La tabella seguente riepiloga il comportamento:

Nome della proprietà Predefinito significato
spark.sql.ansi.enabled false Se true, Spark tenta di conformarsi alla specifica SQL ANSI:
  • Genera un'eccezione di runtime se si verifica un overflow in qualsiasi operazione su un campo integer o decimale.
  • Impedisce l'uso delle parole chiave riservate di ANSI SQL come identificatori nel parser SQL.
spark.sql.storeAssignmentPolicy ANSI Quando si archivia un valore in una colonna con un tipo di dati diverso, Spark esegue la conversione dei tipi. Esistono tre criteri per le regole di coercizione dei tipi: ANSI, legacy e strict.
  • ANSI: Spark esegue la coercizione dei tipi in base a ANSI SQL. In pratica, il comportamento è principalmente uguale a PostgreSQL. Non consente alcune conversioni di tipi non gestibili, ad esempio la conversione di string in int o double in boolean.
  • legacy: Spark consente la coercizione dei tipi purché sia un cast valido, che è molto permissivo. Ad esempio, la conversione della stringa in int o double in boolean è consentita. È anche l'unico comportamento in Spark 2.x ed è compatibile con Hive.
  • strict: Spark non consente alcuna possibile perdita di precisione o troncamento dei dati nella coercizione dei tipi, ad esempio la conversione di double in int o decimal in double non è consentita.

Le sottosezioni seguenti presentano modifiche al comportamento nelle operazioni aritmetiche, nelle conversioni dei tipi e nell'analisi SQL quando è abilitata la modalità ANSI. Per le conversioni dei tipi in Spark SQL, sono disponibili tre tipi e questo articolo li introduce uno alla sola: cast, assegnazione di archivi e coercizione dei tipi.

Operazioni aritmetiche

In Spark SQL le operazioni aritmetiche eseguite sui tipi numerici (ad eccezione del decimale) non vengono controllate per impostazione predefinita per gli overflow. Ciò significa che nel caso in cui un'operazione causi overflow, il risultato è lo stesso con l'operazione corrispondente in un programma Java o Scala (ad esempio, se la somma di 2 numeri interi è superiore al valore massimo rappresentabile, il risultato è un numero negativo). Spark SQL restituisce invece null per gli overflow decimali. Quando spark.sql.ansi.enabled è impostato su true e si verifica un overflow in operazioni aritmetiche numeriche e a intervalli, genera un'eccezione aritmetica in fase di esecuzione.

-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
 error: integer overflow

-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
  -2147483648

Cast

Quando spark.sql.ansi.enabled è impostato su true, il cast esplicito tramite la sintassi CAST genera un'eccezione di runtime per i modelli di cast non validi definiti nello standard, ad esempio i cast da una stringa a un intero.

La CAST clausola della modalità Spark ANSI segue le regole di sintassi della sezione 6.13 "specifica del cast" in ISO/IEC 9075-2:2011 Information Technology - Linguaggi di database - SQL - Parte 2: Foundation (SQL/Foundation). Consente specificatamente le seguenti conversioni di tipi semplici che non sono consentite in base allo standard ANSI:

  • NumericType <=> BooleanType
  • TipoStringa <=> TipoBinario

Le combinazioni valide del tipo di dati di origine e di destinazione in un'espressione CAST sono fornite dalla tabella seguente. "Y" indica che la combinazione è sintatticamente valida senza restrizione e "N" indica che la combinazione non è valida.

SourceTarget Numerico Stringa Data Marca temporale Intervallo Booleano Binario Array Mappa Struct
Numerico Y Y N N N S N N N N
String Y S S Y N N N
Data N Y N N N N N N
Data e ora: N Y N N N N N N
Intervallo N N N S N N N N N
Booleano S N N N S N N N N
Binario S N N N N N Y N N N
Array N N N N N N N N N
Mappa 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

Assegnazione dello Store

L'impostazione spark.sql.storeAssignmentPolicy predefinita è ANSI. Con questa impostazione, quando i tipi di dati dei valori di origine non corrispondono ai tipi di colonna di destinazione, Spark SQL aggiunge automaticamente clausole CAST ANSI all'istruzione INSERT. Durante l'inserimento di tabelle secondo questa politica, Spark verifica e rifiuta conversioni non valide, generando un'eccezione per garantire la qualità dei dati. Questo significa che, se un tentativo di inserimento fallisce a causa di una discrepanza di tipo, non porterà alla scrittura parziale dei dati nella tabella.

Esempi:

-- 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

Questi esempi mostrano Spark SQL che impedisce l'inserimento di dati incompatibili, mantenendo così l'integrità dei dati.

Quando il spark.sql.storeAssignmentPolicy è impostato su LEGACY, Spark SQL ripristina il comportamento prevalente fino a Spark 2.x. In questa modalità, invece di usare ANSI CAST, applica le operazioni CAST legacy. In questo criterio, i cast non validi durante gli inserimenti di tabelle comportano l'inserimento di valori NULL o valori non corretti, anziché generare un'eccezione. Esempi:

-- 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)

Coercizione dei tipi

Promozione e precedenza dei tipi

Quando spark.sql.ansi.enabled è impostato su true, Spark SQL usa diverse regole che regolano il modo in cui vengono risolti i conflitti tra i tipi di dati. Al centro di questa risoluzione dei conflitti è l'elenco di precedenza dei tipi che definisce se i valori di un determinato tipo di dati possono essere promossi in modo implicito a un altro tipo di dati.

Tipo di dati elenco di precedenza(da più stretto a più largo)
Byte Byte -> Short -> Int -> Long -> Decimal -> Float* -> Double
Breve Short -> Int - Long ->> Decimal-> Float* -> Double
Int Int - Long -> Decimal ->> Float* -> Double
Lungo Long - Decimal ->> Float* -> Double
Decimale Decimal -> Float* -> Double
Galleggiare Float -> Double
Doppio Doppio
Data Data -> Marcatempo
Marca temporale Marca temporale
String String
Binario Binario
Booleano Booleano
Intervallo Intervallo
Mappa Mappa**
Array Array**
Struttura Struct**
  • Per evitare la perdita di precisione, il tipo float viene ignorato nella risoluzione dei tipi meno comune.

** Per un tipo complesso, la regola di precedenza si applica in modo ricorsivo ai relativi elementi componenti.

Le regole speciali si applicano al tipo String e ai valori NULL non tipizzato. Un valore NULL può essere alzato di livello a qualsiasi altro tipo, mentre un valore String può essere promosso a qualsiasi tipo di dati semplice.

Si tratta di una rappresentazione grafica dell'elenco di precedenza come albero diretto: rappresentazione grafica delle regole di precedenza

Risoluzione del tipo meno comune

Il tipo meno comune di un set di tipi è il tipo più stretto raggiungibile dall'elenco di precedenza da tutti gli elementi del set di tipi.

La risoluzione dei tipi meno comune viene usata per:

  • Decidere se una funzione che prevede un parametro di un tipo può essere richiamata usando un argomento di un tipo più stretto.
  • Derivare il tipo di argomento per le funzioni che richiedono un tipo di argomento condiviso per più parametri, ad esempio coalesce, least o greatest.
  • Derivare i tipi di operando per operatori quali operazioni aritmetiche o confronti.
  • Derivare il tipo di risultato per espressioni come l'espressione 'case'.
  • Derivare i tipi di elemento, chiave o valore per i costruttori di array e mappa.

Le regole speciali vengono applicate se il tipo meno comune viene risolto in FLOAT. Con i valori float, se uno dei tipi è INT, BIGINT o DECIMAL, il tipo meno comune viene convertito in DOUBLE per evitare la potenziale perdita di cifre.

-- 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.

Funzioni SQL

Il comportamento di alcune funzioni SQL può essere diverso in modalità ANSI (spark.sql.ansi.enabled=true).

  • size: questa funzione restituisce null per l'input Null in modalità ANSI.
  • element_at:
    • Questa funzione genera un'eccezione ArrayIndexOutOfBoundsException se si usano indici non validi.
    • Questa funzione genera un'eccezione NoSuchElementException se la chiave non esiste nella mappa.
  • Questa funzione elt genera ArrayIndexOutOfBoundsException se si usano indici non validi.
  • make_date: questa funzione ha esito negativo con un'eccezione se la data del risultato non è valida.
  • make_timestamp: questa funzione ha esito negativo con un'eccezione se il timestamp del risultato non è valido.
  • make_interval: questa funzione ha esito negativo con un'eccezione se l'intervallo di risultati non è valido.
  • next_day: questa funzione genera IllegalArgumentException se l'input non è un giorno valido della settimana.
  • parse_url: Questa funzione lancia IllegalArgumentException se una stringa di input non è un URL valido.
  • to_date: questa funzione fallisce con un'eccezione se la stringa di input non può essere analizzata o la stringa del pattern non è valida.
  • to_timestamp: Questa funzione fallisce con un'eccezione se la stringa di input non può essere analizzata o la stringa del modello non è valida.
  • to_unix_timestamp: questa funzione genera un'eccezione se la stringa di input non può essere interpretata o la stringa di pattern non è valida.
  • unix_timestamp: questa funzione fallisce con un'eccezione se la stringa di input non può essere analizzata o la stringa del modello non è valida.

Operatori SQL

Il comportamento di alcuni operatori SQL può essere diverso in modalità ANSI (spark.sql.ansi.enabled=true).

  • array_col[index]: questo operatore genera un'eccezione se si utilizzano indici non validi ArrayIndexOutOfBoundsException.
  • map_col[key]: Questo operatore genera un'eccezione NoSuchElementException se la chiave non esiste nella mappa.
  • CAST(string_col AS TIMESTAMP): Questo operatore produce un'eccezione se non riesce ad analizzare la stringa di input.
  • CAST(string_col AS DATE): questo operatore genera un'eccezione se la stringa di input non può essere interpretata.

Funzioni utili per la modalità ANSI

Quando la modalità ANSI è attivata, genera eccezioni per le operazioni non valide. È possibile usare le funzioni SQL seguenti per eliminare tali eccezioni.

  • try_cast: identico a CAST, ad eccezione del fatto che restituisce NULL il risultato anziché generare un'eccezione in caso di errore di runtime.
  • try_add: identico all'operatore +add, ad eccezione del fatto che restituisce il NULL risultato anziché generare un'eccezione per overflow di valore integrale.
  • try_divide: identico all'operatore /di divisione , ad eccezione del fatto che restituisce NULL il risultato anziché generare un'eccezione per la divisione di 0.

Parole chiave SQL

Se spark.sql.ansi.enabled è true, Spark SQL userà il parser in modalità ANSI. In questa modalità Spark SQL include due tipi di parole chiave:

  • Parole chiave riservate: parole chiave riservate e che non possono essere usate come identificatori per tabella, vista, colonna, funzione, alias e così via.
  • Parole chiave non riservate: parole chiave che hanno un significato speciale solo in contesti specifici e possono essere usate come identificatori in altri contesti. Ad esempio, EXPLAIN SELECT ... è un comando, ma EXPLAIN può essere usato come identificatori in altre posizioni.

Quando la modalità ANSI è disabilitata, Spark SQL ha due tipi di parole chiave:

  • Parole chiave non riservate: stessa definizione di quella abilitata per la modalità ANSI.
  • Parole chiave strettamente non riservate: una versione rigorosa di parole chiave non riservate, che non possono essere usate come alias di tabella.

Per impostazione predefinita spark.sql.ansi.enabled, è false.

Di seguito è riportato un elenco di tutte le parole chiave in Spark SQL.

Parola chiave Modalità ANSI di Spark SQL Modalità predefinita di Spark SQL SQL-2016
AGGIUNGI non riservato non riservato non riservato
DOPO non riservato non riservato non riservato
TUTTI riservato non riservato riservato
ALTER non riservato non riservato riservato
SEMPRE non riservato non riservato non riservato
ANALISI non riservato non riservato non riservato
E riservato non riservato riservato
ANTI non riservato strettamente non riservato non riservato
QUALSIASI riservato non riservato riservato
ARCHIVIO non riservato non riservato non riservato
ARRAY non riservato non riservato riservato
AS riservato non riservato riservato
ASC non riservato non riservato non riservato
AT non riservato non riservato riservato
AUTORIZZAZIONE riservato non riservato riservato
BETWEEN non riservato non riservato riservato
BOTH riservato non riservato riservato
SECCHIO non riservato non riservato non riservato
SECCHI non riservato non riservato non riservato
BY non riservato non riservato riservato
CACHE non riservato non riservato non riservato
CASCADE non riservato non riservato non riservato
CASE riservato non riservato riservato
CAST riservato non riservato riservato
CAMBIO non riservato non riservato non riservato
VERIFICA riservato non riservato riservato
Chiaro non riservato non riservato non riservato
RAGGRUPPAMENTO non riservato non riservato non riservato
raggruppato non riservato non riservato non riservato
CODEGEN non riservato non riservato non riservato
COLLATE riservato non riservato riservato
COLLEZIONE non riservato non riservato non riservato
COLUMN riservato non riservato riservato
COLUMNS non riservato non riservato non riservato
COMMENTO non riservato non riservato non riservato
COMMIT non riservato non riservato riservato
COMPATTO non riservato non riservato non riservato
COMPATTAZIONI non riservato non riservato non riservato
Calcolo non riservato non riservato non riservato
CONCATENATE non riservato non riservato non riservato
CONSTRAINT riservato non riservato riservato
COSTO non riservato non riservato non riservato
CREA riservato non riservato riservato
CROSS riservato strict-non-reserved riservato
Cubo non riservato non riservato riservato
CURRENT non riservato non riservato riservato
DATA_CORRENTE riservato non riservato riservato
ORA_CORRENTE riservato non riservato riservato
CURRENT_TIMESTAMP riservato non riservato riservato
UTENTE_CORRENTE riservato non riservato riservato
DATI non riservato non riservato non riservato
DATABASE non riservato non riservato non riservato
DATABASES non riservato non riservato non riservato
GIORNO non riservato non riservato non riservato
DBPROPERTIES non riservato non riservato non riservato
DEFINITO non riservato non riservato non riservato
ELIMINA non riservato non riservato riservato
DELIMITATO non riservato non riservato non riservato
DESC non riservato non riservato non riservato
DESCRIBE non riservato non riservato riservato
DFS non riservato non riservato non riservato
DIRECTORY non riservato non riservato non riservato
Elenco non riservato non riservato non riservato
Distinto riservato non riservato riservato
DISTRIBUIRE non riservato non riservato non riservato
DIV non riservato non riservato non una parola chiave
DROP non riservato non riservato riservato
ALTRIMENTI riservato non riservato riservato
END riservato non riservato riservato
SCAPPO riservato non riservato riservato
SFUGGITO non riservato non riservato non riservato
ECCETTO riservato rigidamente non riservato riservato
Scambio non riservato non riservato non riservato
ESISTE non riservato non riservato riservato
EXPLAIN non riservato non riservato non riservato
ESPORTAZIONE non riservato non riservato non riservato
ESTESO non riservato non riservato non riservato
ESTERNO non riservato non riservato riservato
ESTRATTO non riservato non riservato riservato
FALSO riservato non riservato riservato
FETCH riservato non riservato riservato
CAMPI non riservato non riservato non riservato
FILTRO riservato non riservato riservato
Formato di file non riservato non riservato non riservato
PRIMO non riservato non riservato non riservato
FN non riservato non riservato non riservato
SEGUENTE non riservato non riservato non riservato
FOR riservato non riservato riservato
STRANIERO riservato non riservato riservato
FORMATO non riservato non riservato non riservato
FORMATTATO non riservato non riservato non riservato
FROM riservato non riservato riservato
Completo riservato rigido-non-riservato riservato
FUNZIONE non riservato non riservato riservato
FUNZIONI non riservato non riservato non riservato
GENERATO non riservato non riservato non riservato
GLOBAL non riservato non riservato riservato
GRANT riservato non riservato riservato
SOVVENZIONI non riservato non riservato non riservato
GRUPPO riservato non riservato riservato
RAGGRUPPAMENTO non riservato non riservato riservato
HAVING riservato non riservato riservato
ORA non riservato non riservato non riservato
IF non riservato non riservato non una parola chiave
IGNORE non riservato non riservato non riservato
Importazione non riservato non riservato non riservato
IN riservato non riservato riservato
INDEX non riservato non riservato non riservato
INDICI non riservato non riservato non riservato
interno riservato strict-non-riservato riservato
INPATH non riservato non riservato non riservato
INPUTFORMAT non riservato non riservato non riservato
INSERT non riservato non riservato riservato
INTERSECT riservato rigoroso-non-riservato riservato
INTERVALLO non riservato non riservato riservato
INTO riservato non riservato riservato
IS riservato non riservato riservato
ELEMENTI non riservato non riservato non riservato
JOIN riservato rigido-non-riservato riservato
JSON non riservato non riservato non riservato
KEY non riservato non riservato non riservato
CHIAVI non riservato non riservato non riservato
ULTIMO non riservato non riservato non riservato
LATERALE riservato rigido-non-riservato riservato
PIGRO non riservato non riservato non riservato
LEADING riservato non riservato riservato
Sinistra riservato rigido-non-riservato riservato
MI PIACE non riservato non riservato riservato
ILIKE non riservato non riservato non riservato
LIMIT non riservato non riservato non riservato
POEMA non riservato non riservato non riservato
LIST non riservato non riservato non riservato
LOAD non riservato non riservato non riservato
LOCAL non riservato non riservato riservato
LOCATION non riservato non riservato non riservato
BLOCCO non riservato non riservato non riservato
BLOCCHI non riservato non riservato non riservato
LOGICO non riservato non riservato non riservato
MACRO non riservato non riservato non riservato
MAPPA non riservato non riservato non riservato
ABBINATO non riservato non riservato non riservato
Unisci non riservato non riservato non riservato
MINUTI non riservato non riservato non riservato
MENO non riservato stretto-non-riservato non riservato
MONTH non riservato non riservato non riservato
MSCK non riservato non riservato non riservato
NAMESPACE non riservato non riservato non riservato
SPAZI DEI NOMI non riservato non riservato non riservato
NATURALE riservato rigido-non-riservato riservato
NO non riservato non riservato riservato
NON riservato non riservato riservato
NULL riservato non riservato riservato
Valori Nulli non riservato non riservato non riservato
OF non riservato non riservato riservato
In... riservato rigido-non-riservato riservato
SOLO riservato non riservato riservato
OPZIONE non riservato non riservato non riservato
OPZIONI non riservato non riservato non riservato
OPPURE riservato non riservato riservato
ORDINE riservato non riservato riservato
Fuori non riservato non riservato riservato
esterno riservato non riservato riservato
OUTPUTFORMAT non riservato non riservato non riservato
OVER non riservato non riservato non riservato
Sovrapposizioni riservato non riservato riservato
sovrapposizione non riservato non riservato non riservato
SOVRASCRIVERE non riservato non riservato non riservato
PARTITION non riservato non riservato riservato
PARTIZIONATO non riservato non riservato non riservato
PARTIZIONI non riservato non riservato non riservato
PERCENTO non riservato non riservato non riservato
PIVOT non riservato non riservato non riservato
POSIZIONAMENTO non riservato non riservato non riservato
posizione non riservato non riservato riservato
PRECEDENTE non riservato non riservato non riservato
Principale riservato non riservato riservato
PRINCIPALI non riservato non riservato non riservato
PROPRIETÀ non riservato non riservato non riservato
PURGE non riservato non riservato non riservato
QUALIFY riservato non riservato riservato
Ricerca non riservato non riservato non riservato
RANGE non riservato non riservato riservato
DESTINATARIO non riservato non riservato non riservato
RECIPIENTS non riservato non riservato non riservato
RECORDREADER non riservato non riservato non riservato
Scrittore di Record non riservato non riservato non riservato
RECUPERARE non riservato non riservato non riservato
RIDURRE non riservato non riservato non riservato
RIFERIMENTI riservato non riservato riservato
REFRESH non riservato non riservato non riservato
REGEXP non riservato non riservato non una parola chiave
REMOVE non riservato non riservato non riservato
Rinomina non riservato non riservato non riservato
RIPARARE non riservato non riservato non riservato
REPLACE non riservato non riservato non riservato
RESET non riservato non riservato non riservato
RISPETTO non riservato non riservato non riservato
Restringere non riservato non riservato non riservato
REVOKE non riservato non riservato riservato
RIGHT riservato stretto-non-riservato riservato
RLIKE non riservato non riservato non riservato
RUOLO non riservato non riservato non riservato
RUOLI non riservato non riservato non riservato
ROLLBACK non riservato non riservato riservato
Aggregazione non riservato non riservato riservato
ROW non riservato non riservato riservato
ROWS non riservato non riservato riservato
SCHEMA non riservato non riservato non riservato
SCHEMI non riservato non riservato non una parola chiave
Secondo non riservato non riservato non riservato
SELECT riservato non riservato riservato
SEMI non riservato strettamente non riservato non riservato
SEPARATO non riservato non riservato non riservato
SERDE non riservato non riservato non riservato
SERDEPROPERTIES non riservato non riservato non riservato
SESSION_USER riservato non riservato riservato
SET non riservato non riservato riservato
Gruppi non riservato non riservato non riservato
CONDIVIDI non riservato non riservato non riservato
SHARES non riservato non riservato non riservato
Spettacolo non riservato non riservato non riservato
RITORTO non riservato non riservato non riservato
ALCUNI riservato non riservato riservato
SORT non riservato non riservato non riservato
ORDINATO non riservato non riservato non riservato
AVVIA non riservato non riservato riservato
STATISTICHE non riservato non riservato non riservato
MEMORIZZATO non riservato non riservato non riservato
STRATIFICARE non riservato non riservato non riservato
Struttura non riservato non riservato non riservato
SUBSTR non riservato non riservato non riservato
sottostringa non riservato non riservato non riservato
SYNC non riservato non riservato non riservato
TABLE riservato non riservato riservato
TABLES non riservato non riservato non riservato
TABLESAMPLE non riservato non riservato riservato
TBLPROPERTIES non riservato non riservato non riservato
TEMP non riservato non riservato non una parola chiave
TEMPORANEO non riservato non riservato non riservato
TERMINATO non riservato non riservato non riservato
THEN riservato non riservato riservato
TEMPO riservato non riservato riservato
TO riservato non riservato riservato
TOCCARE non riservato non riservato non riservato
Seguente riservato non riservato riservato
TRANSAZIONE non riservato non riservato non riservato
TRANSAZIONI non riservato non riservato non riservato
TRASFORMAZIONE non riservato non riservato non riservato
TRIM non riservato non riservato non riservato
TRUE non riservato non riservato riservato
TRUNCATE non riservato non riservato riservato
TRY_CAST non riservato non riservato non riservato
TIPO non riservato non riservato non riservato
Disarchivia non riservato non riservato non riservato
ILLIMITATO non riservato non riservato non riservato
UNCACHE non riservato non riservato non riservato
UNIONE riservato strettamente non riservato riservato
UNIQUE riservato non riservato riservato
SCONOSCIUTO riservato non riservato riservato
SBLOCCA non riservato non riservato non riservato
ANNULLATA non riservato non riservato non riservato
UPDATE non riservato non riservato riservato
Uso non riservato non riservato non riservato
UTENTE riservato non riservato riservato
USANDO riservato rigoroso-non-riservato riservato
VALUES non riservato non riservato riservato
VISTA non riservato non riservato non riservato
VIEWS non riservato non riservato non riservato
Quando riservato non riservato riservato
WHERE riservato non riservato riservato
WINDOW non riservato non riservato riservato
CON riservato non riservato riservato
ANNO non riservato non riservato non riservato
ZONE non riservato non riservato non riservato