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 anziché 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 cast impliciti durante l'archiviazione di 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 proprietà Predefiniti 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, legacye 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 del tipo purché sia un cast valido, che è molto libero. 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 di intervallo, 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 CAST sintassi genera un'eccezione di runtime per i modelli di cast non validi definiti nello standard, ad esempio i cast da una stringa a un numero intero.

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

  • NumericType <=> BooleanType
  • StringType <=> BinaryType

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

SourceTarget Numerico String Data Timestamp: Intervallo Booleano Binario Array Mappa Struct
Numerico S Y N N N Y N N N N
String S Y Y Y Y Y Y N N N
Data N S Y Y N N N N N N
Timestamp: N S Y Y N N N N N N
Intervallo N Y N N Y N N N N N
Booleano S Y N N N Y N N N N
Binario Y N N N N N Y N N N
Array N N N N N N N Y N N
Mappa N N N N N N N N Y N
Struct 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

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 in questo criterio, Spark verifica e rifiuta cast non validi, generando un'eccezione per garantire la qualità dei dati. Ciò significa che se un tentativo di inserimento non riesce a causa di una mancata corrispondenza del tipo, non comporterà la 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.

spark.sql.storeAssignmentPolicy Quando è 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
Short Short -> Int - Long ->> Decimal-> Float* -> Double
Int Int - Long -> Decimal ->> Float* -> Double
Lungo Long - Decimal ->> Float* -> Double
Decimale Decimal -> Float* -> Double
Float Float -> Double
Double Double
Data Data -> Timestamp
Timestamp: Timestamp:
String String
Binario Binario
Booleano Booleano
Intervallo Intervallo
Mappa Mappa**
Array Array**
Struct Struct**
  • Per evitare la perdita di precisione, viene ignorata la 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 dei tipi meno comuni

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 prevedono 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 le espressioni, ad esempio l'espressione case.
  • Derivare i tipi di elemento, chiave o valore per i costruttori di matrice e mapping.

Le regole speciali vengono applicate se il tipo meno comune viene risolto in FLOAT. Con i valori di tipo float, se uno dei tipi è INT, BIGINT o DECIMAL, viene eseguito il push del tipo meno comune 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 ArrayIndexOutOfBoundsException un'eccezione se si usano indici non validi.
    • Questa funzione genera NoSuchElementException un'eccezione se la chiave non esiste nella mappa.
  • elt: questa funzione genera ArrayIndexOutOfBoundsException un'eccezione 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 genera IllegalArgumentException un'eccezione se una stringa di input non è un URL valido.
  • to_date: questa funzione ha esito negativo con un'eccezione se la stringa di input non può essere analizzata o la stringa del criterio non è valida.
  • to_timestamp: questa funzione ha esito negativo con un'eccezione se la stringa di input non può essere analizzata o la stringa del criterio non è valida.
  • to_unix_timestamp: questa funzione ha esito negativo con un'eccezione se la stringa di input non può essere analizzata o la stringa del criterio non è valida.
  • unix_timestamp: questa funzione ha esito negativo con un'eccezione se la stringa di input non può essere analizzata o la stringa del criterio 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 ArrayIndexOutOfBoundsException usano indici non validi.
  • map_col[key]: questo operatore genera un'eccezione NoSuchElementException se la chiave non esiste nella mappa.
  • CAST(string_col AS TIMESTAMP): questo operatore non riesce con un'eccezione se non è possibile analizzare la stringa di input.
  • CAST(string_col AS DATE): questo operatore non riesce con un'eccezione se non è possibile analizzare la stringa di input.

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 NULL il risultato anziché generare un'eccezione sull'overflow del 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 strict-non riservate: una versione rigorosa di parole chiave non riservate, che non può essere usata 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
ADD non riservato non riservato non riservato
DOPO non riservato non riservato non riservato
ALL reserved non riservato reserved
ALTER non riservato non riservato reserved
SEMPRE non riservato non riservato non riservato
ANALISI non riservato non riservato non riservato
E reserved non riservato reserved
ANTI non riservato strict-non-reserved non riservato
QUALSIASI reserved non riservato reserved
ARCHIVE non riservato non riservato non riservato
ARRAY non riservato non riservato reserved
AS reserved non riservato reserved
ASC non riservato non riservato non riservato
AT non riservato non riservato reserved
AUTHORIZATION reserved non riservato reserved
BETWEEN non riservato non riservato reserved
BOTH reserved non riservato reserved
SECCHIO non riservato non riservato non riservato
SECCHI non riservato non riservato non riservato
BY non riservato non riservato reserved
CACHE non riservato non riservato non riservato
CASCADE non riservato non riservato non riservato
CASE reserved non riservato reserved
CAST reserved non riservato reserved
CHANGE non riservato non riservato non riservato
CHECK reserved non riservato reserved
CLEAR non riservato non riservato non riservato
GRAPPOLO non riservato non riservato non riservato
CLUSTERED non riservato non riservato non riservato
CODEGEN non riservato non riservato non riservato
COLLATE reserved non riservato reserved
COLLECTION non riservato non riservato non riservato
COLUMN reserved non riservato reserved
COLUMNS non riservato non riservato non riservato
COMMENT non riservato non riservato non riservato
COMMIT non riservato non riservato reserved
COMPATTO non riservato non riservato non riservato
COMPATTAZIONI non riservato non riservato non riservato
COMPUTE non riservato non riservato non riservato
CONCATENATE non riservato non riservato non riservato
CONSTRAINT reserved non riservato reserved
COSTO non riservato non riservato non riservato
CREATE reserved non riservato reserved
CROSS reserved strict-non-reserved reserved
CUBE non riservato non riservato reserved
CURRENT non riservato non riservato reserved
CURRENT_DATE reserved non riservato reserved
CURRENT_TIME reserved non riservato reserved
CURRENT_TIMESTAMP reserved non riservato reserved
CURRENT_USER reserved non riservato reserved
DATI non riservato non riservato non riservato
DATABASE non riservato non riservato non riservato
DATABASE non riservato non riservato non riservato
DAY non riservato non riservato non riservato
DBPROPERTIES non riservato non riservato non riservato
DEFINITO non riservato non riservato non riservato
DELETE non riservato non riservato reserved
DELIMITATO non riservato non riservato non riservato
DESC non riservato non riservato non riservato
DESCRIBE non riservato non riservato reserved
DFS non riservato non riservato non riservato
DIRECTORY non riservato non riservato non riservato
DIRECTORY non riservato non riservato non riservato
DISTINCT reserved non riservato reserved
DISTRIBUIRE non riservato non riservato non riservato
DIV non riservato non riservato non una parola chiave
DROP non riservato non riservato reserved
ELSE reserved non riservato reserved
END reserved non riservato reserved
ESCAPE reserved non riservato reserved
SFUGGITO non riservato non riservato non riservato
EXCEPT reserved strict-non-reserved reserved
EXCHANGE non riservato non riservato non riservato
EXISTS non riservato non riservato reserved
EXPLAIN non riservato non riservato non riservato
EXPORT non riservato non riservato non riservato
EXTENDED non riservato non riservato non riservato
EXTERNAL non riservato non riservato reserved
EXTRACT non riservato non riservato reserved
FALSE reserved non riservato reserved
FETCH reserved non riservato reserved
CAMPI non riservato non riservato non riservato
FILTER reserved non riservato reserved
FILEFORMAT non riservato non riservato non riservato
FIRST non riservato non riservato non riservato
FN non riservato non riservato non riservato
SEGUENTE non riservato non riservato non riservato
FOR reserved non riservato reserved
FOREIGN reserved non riservato reserved
FORMAT non riservato non riservato non riservato
FORMATTATO non riservato non riservato non riservato
FROM reserved non riservato reserved
FULL reserved strict-non-reserved reserved
FUNCTION non riservato non riservato reserved
FUNZIONI non riservato non riservato non riservato
GENERATED non riservato non riservato non riservato
GLOBAL non riservato non riservato reserved
GRANT reserved non riservato reserved
SOVVENZIONI non riservato non riservato non riservato
GROUP reserved non riservato reserved
GROUPING non riservato non riservato reserved
HAVING reserved non riservato reserved
HOUR non riservato non riservato non riservato
IF non riservato non riservato non una parola chiave
IGNORE non riservato non riservato non riservato
IMPORT non riservato non riservato non riservato
IN reserved non riservato reserved
INDEX non riservato non riservato non riservato
INDICI non riservato non riservato non riservato
INNER reserved strict-non-reserved reserved
INPATH non riservato non riservato non riservato
INPUTFORMAT non riservato non riservato non riservato
INSERT … non riservato non riservato reserved
INTERSECT reserved strict-non-reserved reserved
INTERVAL non riservato non riservato reserved
INTO reserved non riservato reserved
IS reserved non riservato reserved
ELEMENTI non riservato non riservato non riservato
JOIN reserved strict-non-reserved reserved
KEY non riservato non riservato non riservato
CHIAVI non riservato non riservato non riservato
LAST non riservato non riservato non riservato
LATERAL reserved strict-non-reserved reserved
PIGRO non riservato non riservato non riservato
LEADING reserved non riservato reserved
LEFT reserved strict-non-reserved reserved
LIKE non riservato non riservato reserved
ILIKE non riservato non riservato non riservato
LIMIT non riservato non riservato non riservato
POEMA non riservato non riservato non riservato
INSERZIONE non riservato non riservato non riservato
LOAD non riservato non riservato non riservato
LOCAL non riservato non riservato reserved
LOCATION non riservato non riservato non riservato
LOCK non riservato non riservato non riservato
BLOCCHI non riservato non riservato non riservato
LOGICA non riservato non riservato non riservato
MACRO non riservato non riservato non riservato
MAP non riservato non riservato non riservato
ABBINATO non riservato non riservato non riservato
MERGE non riservato non riservato non riservato
MINUTE non riservato non riservato non riservato
MENO non riservato strict-non-reserved 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
NATURAL reserved strict-non-reserved reserved
NO non riservato non riservato reserved
NOT reserved non riservato reserved
NULL reserved non riservato reserved
NULLS non riservato non riservato non riservato
OF non riservato non riservato reserved
In... reserved strict-non-reserved reserved
ONLY reserved non riservato reserved
OPTION non riservato non riservato non riservato
OPTIONS non riservato non riservato non riservato
OPPURE reserved non riservato reserved
ORDER reserved non riservato reserved
OUT non riservato non riservato reserved
OUTER reserved non riservato reserved
OUTPUTFORMAT non riservato non riservato non riservato
OVER non riservato non riservato non riservato
OVERLAPS reserved non riservato reserved
OVERLAY non riservato non riservato non riservato
SOVRASCRIVERE non riservato non riservato non riservato
Partizione non riservato non riservato reserved
PARTITIONED non riservato non riservato non riservato
PARTIZIONI non riservato non riservato non riservato
PERCENT non riservato non riservato non riservato
PIVOT non riservato non riservato non riservato
PIAZZAMENTO non riservato non riservato non riservato
POSITION non riservato non riservato reserved
PRECEDENTE non riservato non riservato non riservato
PRIMARY reserved non riservato reserved
ENTITÀ non riservato non riservato non riservato
PROPERTIES non riservato non riservato non riservato
PURGE non riservato non riservato non riservato
QUALIFICARE reserved non riservato reserved
QUERY non riservato non riservato non riservato
RANGE non riservato non riservato reserved
DESTINATARIO non riservato non riservato non riservato
DESTINATARI non riservato non riservato non riservato
RECORDREADER non riservato non riservato non riservato
RECORDWRITER non riservato non riservato non riservato
RECUPERARE non riservato non riservato non riservato
REDUCE non riservato non riservato non riservato
REFERENCES reserved non riservato reserved
REFRESH non riservato non riservato non riservato
REGEXP non riservato non riservato non una parola chiave
REMOVE non riservato non riservato non riservato
RENAME non riservato non riservato non riservato
REPAIR 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
RESTRICT non riservato non riservato non riservato
REVOKE non riservato non riservato reserved
RIGHT reserved strict-non-reserved reserved
RLIKE non riservato non riservato non riservato
ROLE non riservato non riservato non riservato
RUOLI non riservato non riservato non riservato
ROLLBACK non riservato non riservato reserved
ROLLUP non riservato non riservato reserved
ROW non riservato non riservato reserved
ROWS non riservato non riservato reserved
SCHEMA non riservato non riservato non riservato
SCHEMI non riservato non riservato non una parola chiave
SECOND non riservato non riservato non riservato
SELECT reserved non riservato reserved
MEZZO non riservato strict-non-reserved 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 reserved non riservato reserved
SET non riservato non riservato reserved
SETS non riservato non riservato non riservato
CONDIVIDI non riservato non riservato non riservato
CONDIVISIONI non riservato non riservato non riservato
SHOW non riservato non riservato non riservato
RITORTO non riservato non riservato non riservato
SOME reserved non riservato reserved
SORT non riservato non riservato non riservato
ASSORTITO non riservato non riservato non riservato
AVVIA non riservato non riservato reserved
STATISTICS non riservato non riservato non riservato
MEMORIZZATO non riservato non riservato non riservato
STRATIFICARE non riservato non riservato non riservato
STRUCT non riservato non riservato non riservato
SUBSTR non riservato non riservato non riservato
SUBSTRING non riservato non riservato non riservato
SYNC non riservato non riservato non riservato
TABLE reserved non riservato reserved
TABLES non riservato non riservato non riservato
TABLESAMPLE non riservato non riservato reserved
TBLPROPERTIES non riservato non riservato non riservato
TEMP non riservato non riservato non una parola chiave
TEMPORARY non riservato non riservato non riservato
TERMINATO non riservato non riservato non riservato
THEN reserved non riservato reserved
ORA reserved non riservato reserved
TO reserved non riservato reserved
TOCCARE non riservato non riservato non riservato
TRAILING reserved non riservato reserved
TRANSACTION non riservato non riservato non riservato
TRANSACTIONS 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 reserved
TRUNCATE non riservato non riservato reserved
TRY_CAST non riservato non riservato non riservato
TIPO non riservato non riservato non riservato
UNARCHIVE non riservato non riservato non riservato
ILLIMITATO non riservato non riservato non riservato
UNCACHE non riservato non riservato non riservato
UNION reserved strict-non-reserved reserved
UNIQUE reserved non riservato reserved
SCONOSCIUTO reserved non riservato reserved
UNLOCK non riservato non riservato non riservato
ANNULLATA non riservato non riservato non riservato
UPDATE non riservato non riservato reserved
USE non riservato non riservato non riservato
USER reserved non riservato reserved
USING reserved strict-non-reserved reserved
VALUES non riservato non riservato reserved
VIEW non riservato non riservato non riservato
VIEWS non riservato non riservato non riservato
Quando… reserved non riservato reserved
WHERE reserved non riservato reserved
WINDOW non riservato non riservato reserved
WITH reserved non riservato reserved
YEAR non riservato non riservato non riservato
ZONE non riservato non riservato non riservato