ANSI-naleving in Databricks Runtime

Van toepassing op:check marked yes Databricks Runtime

In dit artikel wordt ANSI-naleving in Databricks Runtime beschreven. Zie ANSI_MODE voor ansi-modus in Databricks SQL.

Spark SQL heeft twee opties ter ondersteuning van naleving van de ANSI SQL-standaard: spark.sql.ansi.enabled en spark.sql.storeAssignmentPolicy.

Wanneer spark.sql.ansi.enabled dit is ingesteld true, gebruikt Spark SQL een ANSI-compatibel dialect in plaats van hive-compatibel te zijn. Spark genereert bijvoorbeeld een uitzondering tijdens runtime in plaats van null-resultaten te retourneren als de invoer voor een SQL-operator/-functie ongeldig is. Sommige ANSI-dialectfuncties zijn mogelijk niet rechtstreeks afkomstig van de ANSI SQL-standaard, maar hun gedrag is afgestemd op de stijl van ANSI SQL.

Bovendien heeft Spark SQL een onafhankelijke optie voor het beheren van impliciet cast-gedrag bij het opslaan van rijen in een tabel. Het cast-gedrag wordt gedefinieerd als winkeltoewijzingsregels in de standaard.

Wanneer spark.sql.storeAssignmentPolicy dit is ingesteld ANSI, voldoet Spark SQL aan de ANSI-archieftoewijzingsregels. Dit is een afzonderlijke configuratie omdat de standaardwaarde is ANSI, terwijl de configuratie spark.sql.ansi.enabled standaard is uitgeschakeld.

De volgende tabel bevat een overzicht van het gedrag:

Eigenschapsnaam Standaardinstelling Betekenis
spark.sql.ansi.enabled false Wanneer waar, probeert Spark te voldoen aan de ANSI SQL-specificatie:

* Genereert een runtime-uitzondering als er een overloop plaatsvindt in een bewerking op een geheel getal of een decimaal veld.
* Verbiedt het gebruik van de gereserveerde trefwoorden van ANSI SQL als id's in de SQL-parser.
spark.sql.storeAssignmentPolicy ANSI Wanneer u een waarde opslaat in een kolom met een ander gegevenstype, voert Spark typeconversie uit. Er zijn drie beleidsregels voor de typecoderingsregels: ANSI, legacyen strict.

* ANSI: Spark voert het type coercion uit volgens ANSI SQL. In de praktijk is het gedrag meestal hetzelfde als PostgreSQL. Het staat bepaalde onredelijke typeconversies toe, zoals het converteren van tekenreeks naar int of dubbel naar booleaanse waarde.
* legacy: Spark staat het type coercion toe zolang het een geldige Cast is, wat erg los is. Het converteren van tekenreeks naar int of dubbel naar booleaanse waarde is bijvoorbeeld toegestaan. Het is ook het enige gedrag in Spark 2.x en is compatibel met Hive.
* strict: Spark staat geen mogelijk precisieverlies of afkapping van gegevens toe in typebeperking, bijvoorbeeld het converteren van dubbel naar int of decimaal naar dubbel is niet toegestaan.

In de volgende subsecties worden gedragswijzigingen in rekenkundige bewerkingen, typeconversies en SQL-parsering weergegeven wanneer de ANSI-modus is ingeschakeld. Voor typeconversies in Spark SQL zijn er drie soorten en in dit artikel worden ze één voor één geïntroduceerd: cast, opslagtoewijzing en type coercion.

Rekenkundige bewerkingen

In Spark SQL worden rekenkundige bewerkingen die worden uitgevoerd op numerieke typen (met uitzondering van decimalen) niet standaard gecontroleerd op overloop. Dit betekent dat als een bewerking overloop veroorzaakt, het resultaat hetzelfde is met de bijbehorende bewerking in een Java- of Scala-programma (bijvoorbeeld als de som van 2 gehele getallen hoger is dan de maximumwaarde die kan worden weergegeven, is het resultaat een negatief getal). Aan de andere kant retourneert Spark SQL null voor decimale overloop. Wanneer spark.sql.ansi.enabled deze is ingesteld true op en er een overloop plaatsvindt in numerieke en intervalberekeningsbewerkingen, wordt er tijdens runtime een rekenkundige uitzondering gegenereerd.

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

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

Cast

Wanneer spark.sql.ansi.enabled dit is ingesteld trueop, genereert expliciete cast-conversie door CAST syntaxis een runtime-uitzondering voor illegale cast-patronen die zijn gedefinieerd in de standaard, zoals casts van een tekenreeks naar een geheel getal.

De CAST component van de Spark ANSI-modus volgt de syntaxisregels van sectie 6.13 "cast-specificatie" in ISO/IEC 9075-2:2011 Information technology — Database languages - SQL — Part 2: Foundation (SQL/Foundation), behalve dat het speciaal de volgende eenvoudige typeconversies toestaat die niet zijn toegestaan volgens de ANSI-standaard:

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

De geldige combinaties van het bron- en doelgegevenstype in een CAST expressie worden gegeven door de volgende tabel. "Y" geeft aan dat de combinatie syntactisch geldig is zonder beperking en "N" geeft aan dat de combinatie ongeldig is.

SourceTarget Numeriek String Datum Tijdstempel Interval Booleaanse waarde Binary Matrix Overzicht Struct
Numeriek J Y N N N Y N N N N
String J J J J J J Y N N N
Datum N J J Y N N N N N N
Tijdstempel N J J Y N N N N N N
Interval N Y N N Y N N N N N
Booleaanse waarde J Y N N N Y N N N N
Binary J N N N N N Y N N N
Matrix N N N N N N N Y N N
Overzicht N N N N N N N N Y N
Struct N N N N N N N N N J
-- 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

Toewijzing opslaan

De instelling spark.sql.storeAssignmentPolicy wordt standaard ingesteld op ANSI. Wanneer met deze instelling de gegevenstypen van bronwaarden niet overeenkomen met de doelkolomtypen, voegt Spark SQL automatisch ANSI CAST-componenten toe aan de INSERT-instructie. Tijdens het invoegen van tabellen onder dit beleid controleert Spark op ongeldige casts en weigert deze een uitzondering om gegevenskwaliteit te garanderen. Dit betekent dat als een invoegpoging mislukt omdat een type niet overeenkomt, er geen gegevens naar de tabel worden geschreven.

Voorbeelden:

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

In deze voorbeelden ziet u dat Spark SQL voorkomt dat incompatibele gegevens worden ingevoegd, waardoor de gegevensintegriteit behouden blijft.

Wanneer de spark.sql.storeAssignmentPolicy instellingen zijn ingesteld LEGACY, wordt Spark SQL teruggezet naar het gedrag dat op Spark 2.x voorkomt. In deze modus worden verouderde CAST-bewerkingen toegepast in plaats van ANSI CAST te gebruiken. Onder dit beleid leiden ongeldige casts tijdens tabelinvoegingen ertoe dat NULL-waarden of onjuiste waarden worden ingevoegd, in plaats van een uitzondering te genereren. Voorbeelden:

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

Type coercion

Niveauverhoging en prioriteit typen

Wanneer spark.sql.ansi.enabled dit is ingesteld true, gebruikt Spark SQL verschillende regels die bepalen hoe conflicten tussen gegevenstypen worden opgelost. De kern van deze conflictoplossing is de lijst typeprioriteit waarmee wordt gedefinieerd of waarden van een bepaald gegevenstype impliciet kunnen worden gepromoveerd naar een ander gegevenstype.

Gegevenstype prioriteitslijst (van smal naar breedst)
Byte Byte -> Kort - Int ->> Lang -> Decimaal -> Float* -> Dubbel
Kort Short -> Int -> Long -> Decimal-> Float* -> Double
Int Int -> Lang - Decimaal ->> Float* -> Dubbel
Lang Lang - Decimaal ->> Float* -> Dubbel
Decimal Decimaal -> float* -> dubbel
Float Float -> dubbel
Dubbel Dubbel
Datum Datum -> tijdstempel
Tijdstempel Tijdstempel
String String
Binary Binary
Booleaanse waarde Booleaanse waarde
Interval Interval
Overzicht Kaart**
Matrix Array**
Struct Struct**
  • Voor de minst gangbare resolutie float van het type wordt overgeslagen om verlies van precisie te voorkomen.

** Voor een complex type wordt de prioriteitsregel recursief toegepast op de onderdeelelementen.

Speciale regels zijn van toepassing op het tekenreekstype en niet-getypte NULL. Een NULL kan worden gepromoveerd naar elk ander type, terwijl een tekenreeks kan worden gepromoveerd naar elk eenvoudig gegevenstype.

Dit is een grafische weergave van de prioriteitslijst als een omgeleide boomstructuur: Graphical representation of precedence rules

Minst algemene typeomzetting

Het minst voorkomende type van een set typen is het smalste type dat bereikbaar is vanuit de prioriteitslijst door alle elementen van de set typen.

De minst gangbare typeresolutie wordt gebruikt voor:

  • Bepaal of een functie die een parameter van een type verwacht, kan worden aangeroepen met behulp van een argument van een smaller type.
  • Leid het argumenttype af voor functies die een gedeeld argumenttype verwachten voor meerdere parameters, zoals coalesce, least of grootste.
  • De operandtypen afleiden voor operators zoals rekenkundige bewerkingen of vergelijkingen.
  • Het resultaattype afleiden voor expressies zoals de case-expressie.
  • De element-, sleutel- of waardetypen afleiden voor matrix- en kaartconstructors.

Er worden speciale regels toegepast als het minst gangbare type wordt omgezet in FLOAT. Als een van de typen INT, BIGINT of DECIMAL is, wordt met floattypewaarden het minst gangbare type naar DOUBLE gepusht om mogelijk verlies van cijfers te voorkomen.

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

Het gedrag van sommige SQL-functies kan verschillen onder de ANSI-modus (spark.sql.ansi.enabled=true).

  • size: Deze functie retourneert null voor null-invoer in de ANSI-modus.
  • element_at:
    • Deze functie genereert ArrayIndexOutOfBoundsException als u ongeldige indexen gebruikt.
    • Deze functie genereert NoSuchElementException als de sleutel niet bestaat in de kaart.
  • elt: Deze functie genereert ArrayIndexOutOfBoundsException als u ongeldige indexen gebruikt.
  • make_date: Deze functie mislukt met een uitzondering als de resultaatdatum ongeldig is.
  • make_timestamp: Deze functie mislukt met een uitzondering als de tijdstempel van het resultaat ongeldig is.
  • make_interval: Deze functie mislukt met een uitzondering als het resultaatinterval ongeldig is.
  • next_day: Deze functie genereert IllegalArgumentException als invoer geen geldige dag van de week is.
  • parse_url: Deze functie genereert IllegalArgumentException als een invoertekenreeks geen geldige URL is.
  • to_date: Deze functie mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd of de patroontekenreeks ongeldig is.
  • to_timestamp: Deze functie mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd of de patroontekenreeks ongeldig is.
  • to_unix_timestamp: Deze functie mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd of de patroontekenreeks ongeldig is.
  • unix_timestamp: Deze functie mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd of de patroontekenreeks ongeldig is.

SQL-operators

Het gedrag van sommige SQL-operators kan verschillen in de ANSI-modus (spark.sql.ansi.enabled=true).

  • array_col[index]: Deze operator genereert ArrayIndexOutOfBoundsException als er ongeldige indexen worden gebruikt.
  • map_col[key]: Deze operator genereert NoSuchElementException als de sleutel niet bestaat in de kaart.
  • CAST(string_col AS TIMESTAMP): Deze operator mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd.
  • CAST(string_col AS DATE): Deze operator mislukt met een uitzondering als de invoertekenreeks niet kan worden geparseerd.

Nuttige functies voor ANSI-modus

Wanneer de ANSI-modus is ingeschakeld, genereert deze uitzonderingen voor ongeldige bewerkingen. U kunt de volgende SQL-functies gebruiken om dergelijke uitzonderingen te onderdrukken.

  • try_cast: identiek aan CAST, behalve dat het retourneert NULL , resulteert in plaats van een uitzondering op runtime-fout te genereren.
  • try_add: identiek aan de operator +voor toevoegen, behalve dat deze resulteert NULL in plaats van een uitzondering op een overloop van integrale waarden te genereren.
  • try_divide: identiek aan de divisieoperator /, behalve dat het resultaat retourneert NULL in plaats van een uitzondering op het delen van 0.

SQL-trefwoorden

Wanneer spark.sql.ansi.enabled is waar, gebruikt Spark SQL de ANSI-modusparser. In deze modus heeft Spark SQL twee soorten trefwoorden:

  • Gereserveerde trefwoorden: trefwoorden die zijn gereserveerd en die niet kunnen worden gebruikt als id's voor tabel, weergave, kolom, functie, alias, enzovoort.
  • Niet-gereserveerde trefwoorden: trefwoorden met een speciale betekenis alleen in bepaalde contexten en kunnen worden gebruikt als id's in andere contexten. Is bijvoorbeeld EXPLAIN SELECT ... een opdracht, maar UITLEG kan worden gebruikt als id's op andere plaatsen.

Wanneer de ANSI-modus is uitgeschakeld, heeft Spark SQL twee soorten trefwoorden:

  • Niet-gereserveerde trefwoorden: dezelfde definitie als de definitie wanneer de ANSI-modus is ingeschakeld.
  • Strikt niet-gereserveerde trefwoorden: een strikte versie van niet-gereserveerde trefwoorden, die niet als tabelalias kunnen worden gebruikt.

spark.sql.ansi.enabled Standaard is onwaar.

Hieronder ziet u een lijst met alle trefwoorden in Spark SQL.

Trefwoord Spark SQL ANSI-modus Standaardmodus voor Spark SQL SQL-2016
ADD niet gereserveerd niet gereserveerd niet gereserveerd
NA niet gereserveerd niet gereserveerd niet gereserveerd
ALL Gereserveerd niet gereserveerd Gereserveerd
WIJZIGEN niet gereserveerd niet gereserveerd Gereserveerd
ALTIJD niet gereserveerd niet gereserveerd niet gereserveerd
ANALYSEREN niet gereserveerd niet gereserveerd niet gereserveerd
EN Gereserveerd niet gereserveerd Gereserveerd
ANTI niet gereserveerd strikt niet-gereserveerd niet gereserveerd
WILLEKEURIG Gereserveerd niet gereserveerd Gereserveerd
ARCHIEF niet gereserveerd niet gereserveerd niet gereserveerd
ARRAY niet gereserveerd niet gereserveerd Gereserveerd
AS Gereserveerd niet gereserveerd Gereserveerd
ASC niet gereserveerd niet gereserveerd niet gereserveerd
AT niet gereserveerd niet gereserveerd Gereserveerd
VERGUNNING Gereserveerd niet gereserveerd Gereserveerd
BETWEEN niet gereserveerd niet gereserveerd Gereserveerd
ZOWEL Gereserveerd niet gereserveerd Gereserveerd
EMMER niet gereserveerd niet gereserveerd niet gereserveerd
EMMERS niet gereserveerd niet gereserveerd niet gereserveerd
BY niet gereserveerd niet gereserveerd Gereserveerd
CACHE niet gereserveerd niet gereserveerd niet gereserveerd
TRAPSGEWIJZE niet gereserveerd niet gereserveerd niet gereserveerd
CASE Gereserveerd niet gereserveerd Gereserveerd
CAST Gereserveerd niet gereserveerd Gereserveerd
WIJZIGEN niet gereserveerd niet gereserveerd niet gereserveerd
CONTROLEREN Gereserveerd niet gereserveerd Gereserveerd
CLEAR niet gereserveerd niet gereserveerd niet gereserveerd
CLUSTER niet gereserveerd niet gereserveerd niet gereserveerd
GECLUSTERDE niet gereserveerd niet gereserveerd niet gereserveerd
CODEGEN niet gereserveerd niet gereserveerd niet gereserveerd
SORTEREN Gereserveerd niet gereserveerd Gereserveerd
COLLECTIE niet gereserveerd niet gereserveerd niet gereserveerd
KOLOM Gereserveerd niet gereserveerd Gereserveerd
KOLOMMEN niet gereserveerd niet gereserveerd niet gereserveerd
OPMERKING niet gereserveerd niet gereserveerd niet gereserveerd
COMMIT niet gereserveerd niet gereserveerd Gereserveerd
COMPACT niet gereserveerd niet gereserveerd niet gereserveerd
COMPRESSIES niet gereserveerd niet gereserveerd niet gereserveerd
COMPUTING niet gereserveerd niet gereserveerd niet gereserveerd
TEKST.SAMENVOEGEN niet gereserveerd niet gereserveerd niet gereserveerd
BEPERKING Gereserveerd niet gereserveerd Gereserveerd
KOSTEN niet gereserveerd niet gereserveerd niet gereserveerd
CREATE Gereserveerd niet gereserveerd Gereserveerd
KRUIS Gereserveerd strikt niet-gereserveerd Gereserveerd
KUBUS niet gereserveerd niet gereserveerd Gereserveerd
HUIDIGE niet gereserveerd niet gereserveerd Gereserveerd
CURRENT_DATE Gereserveerd niet gereserveerd Gereserveerd
CURRENT_TIME Gereserveerd niet gereserveerd Gereserveerd
CURRENT_TIMESTAMP Gereserveerd niet gereserveerd Gereserveerd
CURRENT_USER Gereserveerd niet gereserveerd Gereserveerd
GEGEVENS niet gereserveerd niet gereserveerd niet gereserveerd
DATABASE niet gereserveerd niet gereserveerd niet gereserveerd
DATABASES niet gereserveerd niet gereserveerd niet gereserveerd
DAY niet gereserveerd niet gereserveerd niet gereserveerd
DBPROPERTIES niet gereserveerd niet gereserveerd niet gereserveerd
GEDEFINIEERD niet gereserveerd niet gereserveerd niet gereserveerd
DELETE niet gereserveerd niet gereserveerd Gereserveerd
GESCHEIDEN niet gereserveerd niet gereserveerd niet gereserveerd
DESC niet gereserveerd niet gereserveerd niet gereserveerd
DESCRIBE niet gereserveerd niet gereserveerd Gereserveerd
DFS niet gereserveerd niet gereserveerd niet gereserveerd
MAPPEN niet gereserveerd niet gereserveerd niet gereserveerd
DIRECTORY niet gereserveerd niet gereserveerd niet gereserveerd
VERSCHILLENDE Gereserveerd niet gereserveerd Gereserveerd
DISTRIBUEREN niet gereserveerd niet gereserveerd niet gereserveerd
DIV niet gereserveerd niet gereserveerd geen trefwoord
DROP niet gereserveerd niet gereserveerd Gereserveerd
ANDERS Gereserveerd niet gereserveerd Gereserveerd
EINDE Gereserveerd niet gereserveerd Gereserveerd
ONTSNAPPEN Gereserveerd niet gereserveerd Gereserveerd
ONTSNAPTE niet gereserveerd niet gereserveerd niet gereserveerd
BEHALVE Gereserveerd strikt niet-gereserveerd Gereserveerd
EXCHANGE niet gereserveerd niet gereserveerd niet gereserveerd
BESTAAT niet gereserveerd niet gereserveerd Gereserveerd
EXPLAIN niet gereserveerd niet gereserveerd niet gereserveerd
EXPORTEREN niet gereserveerd niet gereserveerd niet gereserveerd
UITGEBREID niet gereserveerd niet gereserveerd niet gereserveerd
EXTERN niet gereserveerd niet gereserveerd Gereserveerd
EXTRACT niet gereserveerd niet gereserveerd Gereserveerd
FALSE Gereserveerd niet gereserveerd Gereserveerd
HALEN Gereserveerd niet gereserveerd Gereserveerd
VELDEN niet gereserveerd niet gereserveerd niet gereserveerd
FILTEREN Gereserveerd niet gereserveerd Gereserveerd
BESTANDSOPMAAK niet gereserveerd niet gereserveerd niet gereserveerd
FIRST niet gereserveerd niet gereserveerd niet gereserveerd
FN niet gereserveerd niet gereserveerd niet gereserveerd
VOLGENDE niet gereserveerd niet gereserveerd niet gereserveerd
VOOR Gereserveerd niet gereserveerd Gereserveerd
BUITENLANDSE Gereserveerd niet gereserveerd Gereserveerd
FORMAAT niet gereserveerd niet gereserveerd niet gereserveerd
GEFORMATTEERD niet gereserveerd niet gereserveerd niet gereserveerd
FROM Gereserveerd niet gereserveerd Gereserveerd
VOLLEDIGE Gereserveerd strikt niet-gereserveerd Gereserveerd
FUNCTIE niet gereserveerd niet gereserveerd Gereserveerd
FUNCTIES niet gereserveerd niet gereserveerd niet gereserveerd
GEGENEREERD niet gereserveerd niet gereserveerd niet gereserveerd
WERELDWIJD niet gereserveerd niet gereserveerd Gereserveerd
GRANT Gereserveerd niet gereserveerd Gereserveerd
SUBSIDIES niet gereserveerd niet gereserveerd niet gereserveerd
GROEP Gereserveerd niet gereserveerd Gereserveerd
GROEPEREN niet gereserveerd niet gereserveerd Gereserveerd
HAVING Gereserveerd niet gereserveerd Gereserveerd
UUR niet gereserveerd niet gereserveerd niet gereserveerd
ALS niet gereserveerd niet gereserveerd geen trefwoord
IGNORE niet gereserveerd niet gereserveerd niet gereserveerd
IMPORTEREN niet gereserveerd niet gereserveerd niet gereserveerd
IN Gereserveerd niet gereserveerd Gereserveerd
INDEX niet gereserveerd niet gereserveerd niet gereserveerd
INDEXEN niet gereserveerd niet gereserveerd niet gereserveerd
INNERLIJKE Gereserveerd strikt niet-gereserveerd Gereserveerd
INPATH niet gereserveerd niet gereserveerd niet gereserveerd
INPUTFORMAT niet gereserveerd niet gereserveerd niet gereserveerd
INSERT niet gereserveerd niet gereserveerd Gereserveerd
INTERSECT Gereserveerd strikt niet-gereserveerd Gereserveerd
INTERVAL niet gereserveerd niet gereserveerd Gereserveerd
INTO Gereserveerd niet gereserveerd Gereserveerd
IS Gereserveerd niet gereserveerd Gereserveerd
ITEMS niet gereserveerd niet gereserveerd niet gereserveerd
JOIN Gereserveerd strikt niet-gereserveerd Gereserveerd
SLEUTEL niet gereserveerd niet gereserveerd niet gereserveerd
SLEUTELS niet gereserveerd niet gereserveerd niet gereserveerd
LAST niet gereserveerd niet gereserveerd niet gereserveerd
LATERALE Gereserveerd strikt niet-gereserveerd Gereserveerd
LUI niet gereserveerd niet gereserveerd niet gereserveerd
LEIDENDE Gereserveerd niet gereserveerd Gereserveerd
LEFT Gereserveerd strikt niet-gereserveerd Gereserveerd
ALS niet gereserveerd niet gereserveerd Gereserveerd
ILIKE niet gereserveerd niet gereserveerd niet gereserveerd
BEPERKEN niet gereserveerd niet gereserveerd niet gereserveerd
LIJNEN niet gereserveerd niet gereserveerd niet gereserveerd
LIST niet gereserveerd niet gereserveerd niet gereserveerd
LADEN niet gereserveerd niet gereserveerd niet gereserveerd
LOKAAL niet gereserveerd niet gereserveerd Gereserveerd
LOCATIE niet gereserveerd niet gereserveerd niet gereserveerd
LOCK niet gereserveerd niet gereserveerd niet gereserveerd
SLOTEN niet gereserveerd niet gereserveerd niet gereserveerd
LOGISCHE niet gereserveerd niet gereserveerd niet gereserveerd
MACRO niet gereserveerd niet gereserveerd niet gereserveerd
MAP niet gereserveerd niet gereserveerd niet gereserveerd
OVEREEN niet gereserveerd niet gereserveerd niet gereserveerd
SAMENVOEGEN niet gereserveerd niet gereserveerd niet gereserveerd
MINUUT niet gereserveerd niet gereserveerd niet gereserveerd
MINUS niet gereserveerd strikt niet-gereserveerd niet gereserveerd
MONTH niet gereserveerd niet gereserveerd niet gereserveerd
MSCK niet gereserveerd niet gereserveerd niet gereserveerd
NAAMRUIMTE niet gereserveerd niet gereserveerd niet gereserveerd
NAAMRUIMTEN niet gereserveerd niet gereserveerd niet gereserveerd
NATUURLIJKE Gereserveerd strikt niet-gereserveerd Gereserveerd
NO niet gereserveerd niet gereserveerd Gereserveerd
NIET Gereserveerd niet gereserveerd Gereserveerd
NULL Gereserveerd niet gereserveerd Gereserveerd
NULLS niet gereserveerd niet gereserveerd niet gereserveerd
OF niet gereserveerd niet gereserveerd Gereserveerd
AAN Gereserveerd strikt niet-gereserveerd Gereserveerd
ALLEEN Gereserveerd niet gereserveerd Gereserveerd
OPTION niet gereserveerd niet gereserveerd niet gereserveerd
OPTIES niet gereserveerd niet gereserveerd niet gereserveerd
OF Gereserveerd niet gereserveerd Gereserveerd
VOLGORDE Gereserveerd niet gereserveerd Gereserveerd
OUT niet gereserveerd niet gereserveerd Gereserveerd
BUITENSTE Gereserveerd niet gereserveerd Gereserveerd
OUTPUTFORMAT niet gereserveerd niet gereserveerd niet gereserveerd
OVER niet gereserveerd niet gereserveerd niet gereserveerd
OVERLAPT Gereserveerd niet gereserveerd Gereserveerd
OVERLAY niet gereserveerd niet gereserveerd niet gereserveerd
OVERSCHRIJVEN niet gereserveerd niet gereserveerd niet gereserveerd
PARTITION niet gereserveerd niet gereserveerd Gereserveerd
GEPARTITIONEERD niet gereserveerd niet gereserveerd niet gereserveerd
PARTITIES niet gereserveerd niet gereserveerd niet gereserveerd
PROCENT niet gereserveerd niet gereserveerd niet gereserveerd
PIVOT niet gereserveerd niet gereserveerd niet gereserveerd
PLAATSEN niet gereserveerd niet gereserveerd niet gereserveerd
POSITIE niet gereserveerd niet gereserveerd Gereserveerd
VOORAFGAANDE niet gereserveerd niet gereserveerd niet gereserveerd
PRIMAIR Gereserveerd niet gereserveerd Gereserveerd
OPDRACHTGEVERS niet gereserveerd niet gereserveerd niet gereserveerd
EIGENSCHAPPEN niet gereserveerd niet gereserveerd niet gereserveerd
PURGE niet gereserveerd niet gereserveerd niet gereserveerd
KWALIFICEREN Gereserveerd niet gereserveerd Gereserveerd
QUERY niet gereserveerd niet gereserveerd niet gereserveerd
BEREIK niet gereserveerd niet gereserveerd Gereserveerd
ONTVANGER niet gereserveerd niet gereserveerd niet gereserveerd
GEADRESSEERDEN niet gereserveerd niet gereserveerd niet gereserveerd
RECORDREADER niet gereserveerd niet gereserveerd niet gereserveerd
RECORDWRITER niet gereserveerd niet gereserveerd niet gereserveerd
HERSTELLEN niet gereserveerd niet gereserveerd niet gereserveerd
VERMINDEREN niet gereserveerd niet gereserveerd niet gereserveerd
REFERENTIES Gereserveerd niet gereserveerd Gereserveerd
REFRESH niet gereserveerd niet gereserveerd niet gereserveerd
REGEXP niet gereserveerd niet gereserveerd geen trefwoord
VERWIJDEREN niet gereserveerd niet gereserveerd niet gereserveerd
RENAME niet gereserveerd niet gereserveerd niet gereserveerd
REPARATIE niet gereserveerd niet gereserveerd niet gereserveerd
REPLACE niet gereserveerd niet gereserveerd niet gereserveerd
RESET niet gereserveerd niet gereserveerd niet gereserveerd
RESPECT niet gereserveerd niet gereserveerd niet gereserveerd
BEPERKEN niet gereserveerd niet gereserveerd niet gereserveerd
REVOKE niet gereserveerd niet gereserveerd Gereserveerd
RIGHT Gereserveerd strikt niet-gereserveerd Gereserveerd
RLIKE niet gereserveerd niet gereserveerd niet gereserveerd
ROL niet gereserveerd niet gereserveerd niet gereserveerd
ROLLEN niet gereserveerd niet gereserveerd niet gereserveerd
TERUGDRAAIEN niet gereserveerd niet gereserveerd Gereserveerd
ROLLUP niet gereserveerd niet gereserveerd Gereserveerd
RIJ niet gereserveerd niet gereserveerd Gereserveerd
RIJEN niet gereserveerd niet gereserveerd Gereserveerd
SCHEMA niet gereserveerd niet gereserveerd niet gereserveerd
SCHEMA'S niet gereserveerd niet gereserveerd geen trefwoord
TWEEDE niet gereserveerd niet gereserveerd niet gereserveerd
SELECTEREN Gereserveerd niet gereserveerd Gereserveerd
SEMI niet gereserveerd strikt niet-gereserveerd niet gereserveerd
GESCHEIDEN niet gereserveerd niet gereserveerd niet gereserveerd
SERDE niet gereserveerd niet gereserveerd niet gereserveerd
SERDEPROPERTIES niet gereserveerd niet gereserveerd niet gereserveerd
SESSION_USER Gereserveerd niet gereserveerd Gereserveerd
SET niet gereserveerd niet gereserveerd Gereserveerd
INGESTELD niet gereserveerd niet gereserveerd niet gereserveerd
DELEN niet gereserveerd niet gereserveerd niet gereserveerd
AANDELEN niet gereserveerd niet gereserveerd niet gereserveerd
SHOW niet gereserveerd niet gereserveerd niet gereserveerd
SCHEEF niet gereserveerd niet gereserveerd niet gereserveerd
SOMMIGE Gereserveerd niet gereserveerd Gereserveerd
SORTEREN niet gereserveerd niet gereserveerd niet gereserveerd
GESORTEERD niet gereserveerd niet gereserveerd niet gereserveerd
START niet gereserveerd niet gereserveerd Gereserveerd
STATISTIEKEN niet gereserveerd niet gereserveerd niet gereserveerd
OPGESLAGEN niet gereserveerd niet gereserveerd niet gereserveerd
STRATIFY niet gereserveerd niet gereserveerd niet gereserveerd
STRUCT niet gereserveerd niet gereserveerd niet gereserveerd
SUBSTR niet gereserveerd niet gereserveerd niet gereserveerd
SUBSTRING niet gereserveerd niet gereserveerd niet gereserveerd
SYNC niet gereserveerd niet gereserveerd niet gereserveerd
TABEL Gereserveerd niet gereserveerd Gereserveerd
TABELLEN niet gereserveerd niet gereserveerd niet gereserveerd
TABLESAMPLE niet gereserveerd niet gereserveerd Gereserveerd
TBLPROPERTIES niet gereserveerd niet gereserveerd niet gereserveerd
TEMP niet gereserveerd niet gereserveerd geen trefwoord
TIJDELIJKE niet gereserveerd niet gereserveerd niet gereserveerd
BEËINDIGD niet gereserveerd niet gereserveerd niet gereserveerd
DAARNA Gereserveerd niet gereserveerd Gereserveerd
TIME Gereserveerd niet gereserveerd Gereserveerd
TO Gereserveerd niet gereserveerd Gereserveerd
TOUCH niet gereserveerd niet gereserveerd niet gereserveerd
ACHTERSTAND Gereserveerd niet gereserveerd Gereserveerd
TRANSACTIE niet gereserveerd niet gereserveerd niet gereserveerd
TRANSACTIES niet gereserveerd niet gereserveerd niet gereserveerd
TRANSFORMEREN niet gereserveerd niet gereserveerd niet gereserveerd
TRIM niet gereserveerd niet gereserveerd niet gereserveerd
TRUE niet gereserveerd niet gereserveerd Gereserveerd
TRUNCATE niet gereserveerd niet gereserveerd Gereserveerd
TRY_CAST niet gereserveerd niet gereserveerd niet gereserveerd
TYPE niet gereserveerd niet gereserveerd niet gereserveerd
UNARCHIVEREN niet gereserveerd niet gereserveerd niet gereserveerd
NIET-AFHANKELIJK niet gereserveerd niet gereserveerd niet gereserveerd
UNCACHE niet gereserveerd niet gereserveerd niet gereserveerd
UNION Gereserveerd strikt niet-gereserveerd Gereserveerd
UNIEKE Gereserveerd niet gereserveerd Gereserveerd
ONBEKEND Gereserveerd niet gereserveerd Gereserveerd
ONTGRENDELEN niet gereserveerd niet gereserveerd niet gereserveerd
UNSET niet gereserveerd niet gereserveerd niet gereserveerd
UPDATE niet gereserveerd niet gereserveerd Gereserveerd
USE niet gereserveerd niet gereserveerd niet gereserveerd
GEBRUIKER Gereserveerd niet gereserveerd Gereserveerd
GEBRUIK Gereserveerd strikt niet-gereserveerd Gereserveerd
WAARDEN niet gereserveerd niet gereserveerd Gereserveerd
WEERGAVE niet gereserveerd niet gereserveerd niet gereserveerd
WEERGAVEN niet gereserveerd niet gereserveerd niet gereserveerd
Als… Gereserveerd niet gereserveerd Gereserveerd
WHERE Gereserveerd niet gereserveerd Gereserveerd
VENSTER niet gereserveerd niet gereserveerd Gereserveerd
WITH Gereserveerd niet gereserveerd Gereserveerd
YEAR niet gereserveerd niet gereserveerd niet gereserveerd
ZONE niet gereserveerd niet gereserveerd niet gereserveerd