ANSI-efterlevnad

Gäller för:check markerad ja Databricks Runtime

Spark SQL har två alternativ för att stödja kompatibilitet med ANSI SQL-standarden: spark.sql.ansi.enabled och spark.sql.storeAssignmentPolicy.

När spark.sql.ansi.enabled är inställt på trueanvänder Spark SQL en ANSI-kompatibel dialekt i stället för att vara Hive-kompatibel. Spark genererar till exempel ett undantag vid körning i stället för att returnera nullresultat om indata till en SQL-operator/-funktion är ogiltiga. Vissa ANSI-dialektfunktioner kanske inte direkt kommer från ANSI SQL-standarden, men deras beteenden överensstämmer med ANSI SQL-formatmallen.

Dessutom har Spark SQL ett oberoende alternativ för att styra implicita gjutningsbeteenden när rader infogas i en tabell. Gjutningsbeteendena definieras som lagringstilldelningsregler i standarden.

När spark.sql.storeAssignmentPolicy är inställt på ANSIföljer Spark SQL ANSI-lagringstilldelningsreglerna. Det här är en separat konfiguration eftersom standardvärdet är ANSI, medan konfigurationen spark.sql.ansi.enabled är inaktiverad som standard.

I följande tabell sammanfattas beteendet:

Egenskapens namn Standardvärde Innebörd
spark.sql.ansi.enabled falskt När det är sant försöker Spark följa ANSI SQL-specifikationen:

* Genererar ett körningsundanstag om ett spill inträffar i en åtgärd i ett heltal eller decimalfält.
* Förbjuder att använda de reserverade nyckelorden i ANSI SQL som identifierare i SQL-parsern.
spark.sql.storeAssignmentPolicy ANSI När du infogar ett värde i en kolumn med en annan datatyp utför Spark typkonvertering. Det finns tre principer för typen tvångsregler: ANSI, legacyoch strict.

* ANSI: Spark utför typtvånget enligt ANSI SQL. I praktiken är beteendet mestadels detsamma som PostgreSQL. Det tillåter inte vissa orimliga typkonverteringar, till exempel konvertering av sträng till int eller dubbel till booleskt värde.
* legacy: Spark tillåter typtvång så länge det är en giltig Cast, som är mycket lös. Till exempel tillåts konvertering av sträng till int eller double till booleskt värde. Det är också det enda beteendet i Spark 2.x och det är kompatibelt med Hive.
* strict: Spark tillåter inte någon möjlig precisionsförlust eller datatrunkering i typtvång, till exempel är det inte tillåtet att konvertera dubbel till int eller decimal till dubbel.

Följande underavsnitt visar beteendeändringar i aritmetiska åtgärder, typkonverteringar och SQL-parsning när ANSI-läge är aktiverat. För typkonverteringar i Spark SQL finns det tre typer av dem och den här artikeln introducerar dem en i taget: cast, store assignment och type coercion.

Aritmetiska åtgärder

I Spark SQL kontrolleras inte aritmetiska åtgärder som utförs på numeriska typer (med undantag för decimaler) för spill som standard. Det innebär att om en åtgärd orsakar spill är resultatet detsamma med motsvarande åtgärd i ett Java- eller Scala-program (om summan av två heltal till exempel är högre än det maximala värde som kan representeras är resultatet ett negativt tal). Å andra sidan returnerar Spark SQL null för decimala spill. När spark.sql.ansi.enabled är inställt på true och ett spill inträffar i numeriska och intervallaritmetiska åtgärder, genererar det ett aritmetiskt undantag vid körning.

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

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

Kasta

När spark.sql.ansi.enabled är inställt på truegenererar explicit gjutning av CAST syntax ett körningsundantag för olagliga gjutningsmönster som definierats i standarden, till exempel gjutningar från en sträng till ett heltal.

CAST Satsen i Spark ANSI-läge följer syntaxreglerna i avsnitt 6.13 "cast specification" i ISO/IEC 9075-2:2011 Information technology – Database language - SQL – Part 2: Foundation (SQL/Foundation), förutom att det särskilt tillåter följande enkla typkonverteringar som inte tillåts enligt ANSI-standarden:

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

De giltiga kombinationerna av käll- och måldatatypen i ett CAST uttryck anges av följande tabell. "Y" anger att kombinationen är syntaktiskt giltig utan begränsning och "N" anger att kombinationen inte är giltig.

SourceTarget Numerisk Sträng Date Timestamp Intervall Boolesk Binär Matris Karta Struct-datatyp
Numerisk Y Y N N N Y N N N N
Sträng Y Y Y Y Y Y Y N N N
Date N Y Y Y N N N N N N
Timestamp N Y Y Y N N N N N N
Intervall N Y N N Y N N N N N
Boolesk Y Y N N N Y N N N N
Binär Y N N N N N Y N N N
Matris N N N N N N N Y N N
Karta N N N N N N N N Y N
Struct-datatyp 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: invalid input syntax for type numeric: a

> SELECT CAST(2147483648L AS INT);
  error: Casting 2147483648 to int causes overflow

> SELECT CAST(DATE'2020-01-01' AS INT)
  error: cannot resolve 'CAST(DATE '2020-01-01' AS INT)' due to data type mismatch: cannot cast date to int.
To convert values from date to int, you can use function UNIX_DATE instead.

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

-- Examples of store assignment rules
> CREATE TABLE t (v INT);

-- `spark.sql.storeAssignmentPolicy=ANSI`
> INSERT INTO t VALUES ('1');
  error: Cannot write incompatible data to table '`default`.`t`':
- Cannot safely cast 'v': string to int;

-- `spark.sql.storeAssignmentPolicy=LEGACY` (This is a legacy behavior until Spark 2.x)
> INSERT INTO t VALUES ('1');
> SELECT * FROM t;
  1

Butikstilldelning

Som vi nämnde i början, när spark.sql.storeAssignmentPolicy är inställt ANSIpå (vilket är standardvärdet), följer Spark SQL ANSI-lagringstilldelningsreglerna för tabellinfogningar. De giltiga kombinationerna av käll- och måldatatypen i tabellinfogningar anges av följande tabell.

SourceTarget Numerisk Sträng Date Timestamp Intervall Boolesk Binär Matris Karta Struct-datatyp
Numerisk Y Y N N N N N N N N
Sträng N Y N N N N N N N N
Date N Y Y Y N N N N N N
Timestamp N Y Y Y N N N N N N
Intervall N Y N N Y N N N N N
Boolesk N Y N N N Y N N N N
Binär N Y N N N N Y N N N
Matris N N N N N N N Y* N N
Karta N N N N N N N N Y* N
Struct-datatyp N N N N N N N N N Y*
  • För matris-/kart-/structtyper tillämpas kontrollregeln för datatyp rekursivt på dess komponentelement.

Under tabellinfogningen genererar Spark undantag för numeriskt värdes spill.

> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
  error: Casting 2147483648 to int causes overflow

Typtvång

Ange befordran och prioritet

När spark.sql.ansi.enabled är inställt på trueanvänder Spark SQL flera regler som styr hur konflikter mellan datatyper löses. Kärnan i den här konfliktlösningen är typprioritetslistan som definierar om värden för en viss datatyp kan höjas upp till en annan datatyp implicit.

Datatyp prioritetslista (från smalaste till bredaste)
Byte Byte -> Kort -> Int -> Long -> Decimal -> Float* -> Double
Kort Kort -> Int -> Long -> Decimal-> Float* -> Double
Int Int -> Long - Decimal ->> Float* -> Double
Lång Long -> Decimal -> Float* -> Double
Decimal Decimal -> Float* -> Double
Float Flyttal –> dubbel
Double Double
Date Datum –> tidsstämpel
Timestamp Timestamp
Sträng Sträng
Binär Binär
Boolesk Boolesk
Intervall Intervall
Karta Karta**
Matris Array**
Struct-datatyp Struct**
  • För minsta vanliga typmatchningsflöt hoppas vi över för att undvika förlust av precision.

** För en komplex typ gäller prioritetsregeln rekursivt för dess komponentelement.

Särskilda regler gäller för strängtypen och otypade NULL. En NULL kan höjas upp till vilken annan typ som helst, medan en sträng kan höjas upp till valfri enkel datatyp.

Det här är en grafisk beskrivning av prioritetslistan som ett riktat träd: Grafisk representation av prioritetsregler

Minsta vanliga typmatchning

Den minst vanliga typen från en uppsättning typer är den smalaste typen som kan nås från prioritetslistan av alla element i uppsättningen av typer.

Den minsta vanliga typmatchningen används för att:

  • Bestäm om en funktion som förväntar sig en parameter av en typ kan anropas med ett argument av en smalare typ.
  • Härled argumenttypen för funktioner som förväntar sig en delad argumenttyp för flera parametrar, till exempel coalesce, least eller greatest.
  • Härled operandtyperna för operatorer som aritmetiska åtgärder eller jämförelser.
  • Härled resultattypen för uttryck som skiftlägesuttrycket.
  • Härled element-, nyckel- eller värdetyperna för matris- och kartkonstruktorer.

Särskilda regler tillämpas om den minst vanliga typen matchar FLOAT. Med flyttalstypvärden, om någon av typerna är INT, BIGINT eller DECIMAL, pushas den minst vanliga typen till DOUBLE för att undvika potentiell förlust av siffror.

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

SQL-funktioner

Beteendet för vissa SQL-funktioner kan vara annorlunda i ANSI-läge (spark.sql.ansi.enabled=true).

  • size: Den här funktionen returnerar null för null-indata under ANSI-läge.
  • element_at:
    • Den här funktionen genererar ArrayIndexOutOfBoundsException om du använder ogiltiga index.
    • Den här funktionen genererar NoSuchElementException om nyckeln inte finns på kartan.
  • elt: Den här funktionen genererar ArrayIndexOutOfBoundsException om du använder ogiltiga index.
  • make_date: Den här funktionen misslyckas med ett undantag om resultatdatumet är ogiltigt.
  • make_timestamp: Den här funktionen misslyckas med ett undantag om resultattidsstämpeln är ogiltig.
  • make_interval: Den här funktionen misslyckas med ett undantag om resultatintervallet är ogiltigt.
  • next_day: Den här funktionen genererar IllegalArgumentException om indata inte är en giltig veckodag.
  • parse_url: Den här funktionen utlöser IllegalArgumentException om en indatasträng inte är en giltig URL.
  • to_date: Den här funktionen misslyckas med ett undantag om indatasträngen inte kan parsas eller om mönstersträngen är ogiltig.
  • to_timestamp: Den här funktionen misslyckas med ett undantag om indatasträngen inte kan parsas eller om mönstersträngen är ogiltig.
  • to_unix_timestamp: Den här funktionen misslyckas med ett undantag om indatasträngen inte kan parsas eller om mönstersträngen är ogiltig.
  • unix_timestamp: Den här funktionen misslyckas med ett undantag om indatasträngen inte kan parsas eller om mönstersträngen är ogiltig.

SQL-operatorer

Beteendet för vissa SQL-operatorer kan vara annorlunda under ANSI-läge (spark.sql.ansi.enabled=true).

  • array_col[index]: Den här operatorn genererar ArrayIndexOutOfBoundsException om du använder ogiltiga index.
  • map_col[key]: Den här operatorn genererar NoSuchElementException om nyckeln inte finns på kartan.
  • CAST(string_col AS TIMESTAMP): Den här operatorn misslyckas med ett undantag om indatasträngen inte kan parsas.
  • CAST(string_col AS DATE): Den här operatorn misslyckas med ett undantag om indatasträngen inte kan parsas.

Användbara funktioner för ANSI-läge

När ANSI-läget är aktiverat utlöser det undantag för ogiltiga åtgärder. Du kan använda följande SQL-funktioner för att förhindra sådana undantag.

  • try_cast: identisk med CAST, förutom att det returnerar NULL resultat i stället för att utlösa ett undantag vid körningsfel.
  • try_add: identisk med add-operatorn +, förutom att den returnerar NULL resultat i stället för att utlösa ett undantag för ett heltalsvärdesspill.
  • try_divide: identisk med divisionsoperatorn /, förutom att den returnerar NULL resultat i stället för att utlösa ett undantag vid uppdelning av 0.

SQL-nyckelord

När spark.sql.ansi.enabled är sant använder Spark SQL ANSI-lägesparsern. I det här läget har Spark SQL två typer av nyckelord:

  • Reserverade nyckelord: Nyckelord som är reserverade och inte kan användas som identifierare för tabell, vy, kolumn, funktion, alias osv.
  • Icke-reserverade nyckelord: Nyckelord som har en särskild betydelse endast i vissa kontexter och som kan användas som identifierare i andra kontexter. Är till exempel EXPLAIN SELECT ... ett kommando, men EXPLAIN kan användas som identifierare på andra platser.

När ANSI-läget är inaktiverat har Spark SQL två typer av nyckelord:

  • Icke-reserverade nyckelord: Samma definition som när ANSI-läget aktiveras.
  • Strikt icke-reserverade nyckelord: En strikt version av icke-reserverade nyckelord som inte kan användas som tabellalias.

Som standard spark.sql.ansi.enabled är falskt.

Nedan visas en lista över alla nyckelord i Spark SQL.

Sökord Spark SQL
ANSI-läge
Spark SQL
Standardläge
SQL-2016
ADD icke-reserverad icke-reserverad icke-reserverad
EFTER icke-reserverad icke-reserverad icke-reserverad
ALL Reserverade icke-reserverad Reserverade
ALTER icke-reserverad icke-reserverad Reserverade
ALLTID icke-reserverad icke-reserverad icke-reserverad
ANALYSERA icke-reserverad icke-reserverad icke-reserverad
AND Reserverade icke-reserverad Reserverade
ANTI icke-reserverad strikt icke-reserverad icke-reserverad
NÅGON Reserverade icke-reserverad Reserverade
ARKIV icke-reserverad icke-reserverad icke-reserverad
ARRAY icke-reserverad icke-reserverad Reserverade
AS Reserverade icke-reserverad Reserverade
ASC icke-reserverad icke-reserverad icke-reserverad
AT icke-reserverad icke-reserverad Reserverade
AUKTORISERING Reserverade icke-reserverad Reserverade
BETWEEN icke-reserverad icke-reserverad Reserverade
BÅDE Reserverade icke-reserverad Reserverade
HINK icke-reserverad icke-reserverad icke-reserverad
HINKAR icke-reserverad icke-reserverad icke-reserverad
BY icke-reserverad icke-reserverad Reserverade
CACHE icke-reserverad icke-reserverad icke-reserverad
CASCADE icke-reserverad icke-reserverad icke-reserverad
CASE Reserverade icke-reserverad Reserverade
CAST Reserverade icke-reserverad Reserverade
ÄNDRA icke-reserverad icke-reserverad icke-reserverad
KONTROLLERA Reserverade icke-reserverad Reserverade
TYDLIG icke-reserverad icke-reserverad icke-reserverad
KLUSTER icke-reserverad icke-reserverad icke-reserverad
KLUSTRADE icke-reserverad icke-reserverad icke-reserverad
CODEGEN icke-reserverad icke-reserverad icke-reserverad
SORTERA Reserverade icke-reserverad Reserverade
SAMLING icke-reserverad icke-reserverad icke-reserverad
KOLUMN Reserverade icke-reserverad Reserverade
KOLUMNER icke-reserverad icke-reserverad icke-reserverad
COMMENT icke-reserverad icke-reserverad icke-reserverad
BEGÅ icke-reserverad icke-reserverad Reserverade
KOMPAKT icke-reserverad icke-reserverad icke-reserverad
KOMPRIMERING icke-reserverad icke-reserverad icke-reserverad
BERÄKNA icke-reserverad icke-reserverad icke-reserverad
CONCATENATE icke-reserverad icke-reserverad icke-reserverad
BEGRÄNSNING Reserverade icke-reserverad Reserverade
KOSTNAD icke-reserverad icke-reserverad icke-reserverad
CREATE Reserverade icke-reserverad Reserverade
CROSS Reserverade strikt icke-reserverad Reserverade
KUB icke-reserverad icke-reserverad Reserverade
NUVARANDE icke-reserverad icke-reserverad Reserverade
CURRENT_DATE Reserverade icke-reserverad Reserverade
CURRENT_TIME Reserverade icke-reserverad Reserverade
CURRENT_TIMESTAMP Reserverade icke-reserverad Reserverade
CURRENT_USER Reserverade icke-reserverad Reserverade
DATA icke-reserverad icke-reserverad icke-reserverad
DATABASE icke-reserverad icke-reserverad icke-reserverad
DATABASER icke-reserverad icke-reserverad icke-reserverad
DAY icke-reserverad icke-reserverad icke-reserverad
DBPROPERTIES icke-reserverad icke-reserverad icke-reserverad
DEFINIERAS icke-reserverad icke-reserverad icke-reserverad
DELETE icke-reserverad icke-reserverad Reserverade
AVGRÄNSADE icke-reserverad icke-reserverad icke-reserverad
DESC icke-reserverad icke-reserverad icke-reserverad
BESKRIVA icke-reserverad icke-reserverad Reserverade
DFS icke-reserverad icke-reserverad icke-reserverad
KATALOGER icke-reserverad icke-reserverad icke-reserverad
KATALOG icke-reserverad icke-reserverad icke-reserverad
DISTINKTA Reserverade icke-reserverad Reserverade
DISTRIBUERA icke-reserverad icke-reserverad icke-reserverad
DIV icke-reserverad icke-reserverad inte ett nyckelord
DROP icke-reserverad icke-reserverad Reserverade
ANNAT Reserverade icke-reserverad Reserverade
SLUTET Reserverade icke-reserverad Reserverade
FLY Reserverade icke-reserverad Reserverade
FLYDDE icke-reserverad icke-reserverad icke-reserverad
EXCEPT Reserverade strikt icke-reserverad Reserverade
EXCHANGE icke-reserverad icke-reserverad icke-reserverad
FINNS icke-reserverad icke-reserverad Reserverade
EXPLAIN icke-reserverad icke-reserverad icke-reserverad
EXPORT icke-reserverad icke-reserverad icke-reserverad
UTÖKAD icke-reserverad icke-reserverad icke-reserverad
EXTERNA icke-reserverad icke-reserverad Reserverade
EXTRACT icke-reserverad icke-reserverad Reserverade
FALSE Reserverade icke-reserverad Reserverade
HÄMTA Reserverade icke-reserverad Reserverade
FÄLT icke-reserverad icke-reserverad icke-reserverad
FILTRERA Reserverade icke-reserverad Reserverade
FILFORMAT icke-reserverad icke-reserverad icke-reserverad
FIRST icke-reserverad icke-reserverad icke-reserverad
FN icke-reserverad icke-reserverad icke-reserverad
FÖLJANDE icke-reserverad icke-reserverad icke-reserverad
FÖR Reserverade icke-reserverad Reserverade
UTLÄNDSK Reserverade icke-reserverad Reserverade
FORMAT icke-reserverad icke-reserverad icke-reserverad
FORMATERAD icke-reserverad icke-reserverad icke-reserverad
FROM Reserverade icke-reserverad Reserverade
FULL Reserverade strikt icke-reserverad Reserverade
FUNKTION icke-reserverad icke-reserverad Reserverade
FUNKTIONER icke-reserverad icke-reserverad icke-reserverad
GENERERAS icke-reserverad icke-reserverad icke-reserverad
GLOBAL icke-reserverad icke-reserverad Reserverade
GRANT Reserverade icke-reserverad Reserverade
BIDRAG icke-reserverad icke-reserverad icke-reserverad
GRUPP Reserverade icke-reserverad Reserverade
GRUPPERING icke-reserverad icke-reserverad Reserverade
HAVING Reserverade icke-reserverad Reserverade
HOUR icke-reserverad icke-reserverad icke-reserverad
IF icke-reserverad icke-reserverad inte ett nyckelord
IGNORE icke-reserverad icke-reserverad icke-reserverad
IMPORTERA icke-reserverad icke-reserverad icke-reserverad
IN Reserverade icke-reserverad Reserverade
INDEX icke-reserverad icke-reserverad icke-reserverad
INDEX icke-reserverad icke-reserverad icke-reserverad
INRE Reserverade strikt icke-reserverad Reserverade
INPATH icke-reserverad icke-reserverad icke-reserverad
INPUTFORMAT icke-reserverad icke-reserverad icke-reserverad
INSERT icke-reserverad icke-reserverad Reserverade
INTERSECT Reserverade strikt icke-reserverad Reserverade
INTERVALL icke-reserverad icke-reserverad Reserverade
INTO Reserverade icke-reserverad Reserverade
IS Reserverade icke-reserverad Reserverade
OBJEKT icke-reserverad icke-reserverad icke-reserverad
JOIN Reserverade strikt icke-reserverad Reserverade
NYCKEL icke-reserverad icke-reserverad icke-reserverad
NYCKLAR icke-reserverad icke-reserverad icke-reserverad
LAST icke-reserverad icke-reserverad icke-reserverad
LATERALA Reserverade strikt icke-reserverad Reserverade
LATA icke-reserverad icke-reserverad icke-reserverad
LEDANDE Reserverade icke-reserverad Reserverade
LEFT Reserverade strikt icke-reserverad Reserverade
LIKE icke-reserverad icke-reserverad Reserverade
ILIKE icke-reserverad icke-reserverad icke-reserverad
GRÄNS icke-reserverad icke-reserverad icke-reserverad
LINJER icke-reserverad icke-reserverad icke-reserverad
LISTA icke-reserverad icke-reserverad icke-reserverad
LADDA icke-reserverad icke-reserverad icke-reserverad
LOCAL icke-reserverad icke-reserverad Reserverade
PLATS icke-reserverad icke-reserverad icke-reserverad
LÅSA icke-reserverad icke-reserverad icke-reserverad
LÅS icke-reserverad icke-reserverad icke-reserverad
LOGISKA icke-reserverad icke-reserverad icke-reserverad
MAKRO icke-reserverad icke-reserverad icke-reserverad
KARTA icke-reserverad icke-reserverad icke-reserverad
MATCHADE icke-reserverad icke-reserverad icke-reserverad
SAMMANFOGA icke-reserverad icke-reserverad icke-reserverad
MINUTE icke-reserverad icke-reserverad icke-reserverad
MINUS icke-reserverad strikt icke-reserverad icke-reserverad
MONTH icke-reserverad icke-reserverad icke-reserverad
MSCK icke-reserverad icke-reserverad icke-reserverad
NAMNOMRÅDE icke-reserverad icke-reserverad icke-reserverad
NAMNOMRÅDEN icke-reserverad icke-reserverad icke-reserverad
NATURLIGA Reserverade strikt icke-reserverad Reserverade
NO icke-reserverad icke-reserverad Reserverade
NOT Reserverade icke-reserverad Reserverade
NULL Reserverade icke-reserverad Reserverade
NULL icke-reserverad icke-reserverad icke-reserverad
AV icke-reserverad icke-reserverad Reserverade
ON Reserverade strikt icke-reserverad Reserverade
BARA Reserverade icke-reserverad Reserverade
ALTERNATIVET icke-reserverad icke-reserverad icke-reserverad
ALTERNATIV icke-reserverad icke-reserverad icke-reserverad
ELLER Reserverade icke-reserverad Reserverade
ORDNING Reserverade icke-reserverad Reserverade
UT icke-reserverad icke-reserverad Reserverade
YTTRE Reserverade icke-reserverad Reserverade
OUTPUTFORMAT icke-reserverad icke-reserverad icke-reserverad
ÖVER icke-reserverad icke-reserverad icke-reserverad
ÖVERLAPPNINGAR Reserverade icke-reserverad Reserverade
OVERLAY icke-reserverad icke-reserverad icke-reserverad
SKRIV ÖVER icke-reserverad icke-reserverad icke-reserverad
PARTITION icke-reserverad icke-reserverad Reserverade
PARTITIONERAD icke-reserverad icke-reserverad icke-reserverad
PARTITIONER icke-reserverad icke-reserverad icke-reserverad
PROCENT icke-reserverad icke-reserverad icke-reserverad
PIVOT icke-reserverad icke-reserverad icke-reserverad
UTSLÄPPANDE icke-reserverad icke-reserverad icke-reserverad
POSITION icke-reserverad icke-reserverad Reserverade
FÖREGÅENDE icke-reserverad icke-reserverad icke-reserverad
PRIMÄRA Reserverade icke-reserverad Reserverade
HUVUDMÄN icke-reserverad icke-reserverad icke-reserverad
EGENSKAPER icke-reserverad icke-reserverad icke-reserverad
RENSA icke-reserverad icke-reserverad icke-reserverad
KVALIFICERA SIG Reserverade icke-reserverad Reserverade
FRÅGA icke-reserverad icke-reserverad icke-reserverad
UTBUD icke-reserverad icke-reserverad Reserverade
MOTTAGAREN icke-reserverad icke-reserverad icke-reserverad
MOTTAGARE icke-reserverad icke-reserverad icke-reserverad
RECORDREADER icke-reserverad icke-reserverad icke-reserverad
RECORDWRITER icke-reserverad icke-reserverad icke-reserverad
ÅTERSTÄLLA icke-reserverad icke-reserverad icke-reserverad
MINSKA icke-reserverad icke-reserverad icke-reserverad
REFERENSLISTA Reserverade icke-reserverad Reserverade
REFRESH icke-reserverad icke-reserverad icke-reserverad
REGEXP icke-reserverad icke-reserverad inte ett nyckelord
TA BORT icke-reserverad icke-reserverad icke-reserverad
RENAME icke-reserverad icke-reserverad icke-reserverad
REPARATION icke-reserverad icke-reserverad icke-reserverad
REPLACE icke-reserverad icke-reserverad icke-reserverad
RESET icke-reserverad icke-reserverad icke-reserverad
RESPEKT icke-reserverad icke-reserverad icke-reserverad
BEGRÄNSA icke-reserverad icke-reserverad icke-reserverad
REVOKE icke-reserverad icke-reserverad Reserverade
RIGHT Reserverade strikt icke-reserverad Reserverade
RLIKE icke-reserverad icke-reserverad icke-reserverad
ROLL icke-reserverad icke-reserverad icke-reserverad
ROLLER icke-reserverad icke-reserverad icke-reserverad
ROLLBACK icke-reserverad icke-reserverad Reserverade
ROLLUP icke-reserverad icke-reserverad Reserverade
ROW icke-reserverad icke-reserverad Reserverade
RADER icke-reserverad icke-reserverad Reserverade
SCHEMAT icke-reserverad icke-reserverad icke-reserverad
SCHEMAN icke-reserverad icke-reserverad inte ett nyckelord
SECOND icke-reserverad icke-reserverad icke-reserverad
SELECT Reserverade icke-reserverad Reserverade
SEMI icke-reserverad strikt icke-reserverad icke-reserverad
SEPARERADE icke-reserverad icke-reserverad icke-reserverad
SERDE icke-reserverad icke-reserverad icke-reserverad
SERDEPROPERTIES icke-reserverad icke-reserverad icke-reserverad
SESSION_USER Reserverade icke-reserverad Reserverade
SET icke-reserverad icke-reserverad Reserverade
UPPSÄTTNINGAR icke-reserverad icke-reserverad icke-reserverad
Dela icke-reserverad icke-reserverad icke-reserverad
AKTIER icke-reserverad icke-reserverad icke-reserverad
VISA icke-reserverad icke-reserverad icke-reserverad
SKEV icke-reserverad icke-reserverad icke-reserverad
NÅGRA Reserverade icke-reserverad Reserverade
SORTERA icke-reserverad icke-reserverad icke-reserverad
SORTERADE icke-reserverad icke-reserverad icke-reserverad
BÖRJA icke-reserverad icke-reserverad Reserverade
STATISTIK icke-reserverad icke-reserverad icke-reserverad
LAGRAS icke-reserverad icke-reserverad icke-reserverad
STRATIFY icke-reserverad icke-reserverad icke-reserverad
STRUCT icke-reserverad icke-reserverad icke-reserverad
SUBSTR icke-reserverad icke-reserverad icke-reserverad
SUBSTRING icke-reserverad icke-reserverad icke-reserverad
SYNC icke-reserverad icke-reserverad icke-reserverad
TABELL Reserverade icke-reserverad Reserverade
TABELLER icke-reserverad icke-reserverad icke-reserverad
TABLESAMPLE icke-reserverad icke-reserverad Reserverade
TBLPROPERTIES icke-reserverad icke-reserverad icke-reserverad
TEMP icke-reserverad icke-reserverad inte ett nyckelord
TILLFÄLLIGA icke-reserverad icke-reserverad icke-reserverad
AVSLUTAS icke-reserverad icke-reserverad icke-reserverad
SEDAN Reserverade icke-reserverad Reserverade
TIME Reserverade icke-reserverad Reserverade
TO Reserverade icke-reserverad Reserverade
TOUCH icke-reserverad icke-reserverad icke-reserverad
AVSLUTANDE Reserverade icke-reserverad Reserverade
TRANSAKTIONEN icke-reserverad icke-reserverad icke-reserverad
TRANSAKTIONER icke-reserverad icke-reserverad icke-reserverad
OMVANDLA icke-reserverad icke-reserverad icke-reserverad
TRIM icke-reserverad icke-reserverad icke-reserverad
TRUE icke-reserverad icke-reserverad Reserverade
TRUNCATE icke-reserverad icke-reserverad Reserverade
TRY_CAST icke-reserverad icke-reserverad icke-reserverad
TYP icke-reserverad icke-reserverad icke-reserverad
UNARCHIVE icke-reserverad icke-reserverad icke-reserverad
OBEGRÄNSAD icke-reserverad icke-reserverad icke-reserverad
UNCACHE icke-reserverad icke-reserverad icke-reserverad
UNION Reserverade strikt icke-reserverad Reserverade
UNIK Reserverade icke-reserverad Reserverade
UNKNOWN Reserverade icke-reserverad Reserverade
LÅSA UPP icke-reserverad icke-reserverad icke-reserverad
INAKTIVERA icke-reserverad icke-reserverad icke-reserverad
UPDATE icke-reserverad icke-reserverad Reserverade
USE icke-reserverad icke-reserverad icke-reserverad
USER Reserverade icke-reserverad Reserverade
ANVÄNDA Reserverade strikt icke-reserverad Reserverade
VALUES icke-reserverad icke-reserverad Reserverade
Visa icke-reserverad icke-reserverad icke-reserverad
VISNINGAR icke-reserverad icke-reserverad icke-reserverad
NÄR Reserverade icke-reserverad Reserverade
WHERE Reserverade icke-reserverad Reserverade
FÖNSTRET icke-reserverad icke-reserverad Reserverade
WITH Reserverade icke-reserverad Reserverade
YEAR icke-reserverad icke-reserverad icke-reserverad
ZON icke-reserverad icke-reserverad icke-reserverad