ANSI-naleving in Databricks Runtime
Van toepassing op: 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 , legacy en 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 true
op, 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:
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.
- Deze functie genereert
elt
: Deze functie genereertArrayIndexOutOfBoundsException
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 genereertIllegalArgumentException
als invoer geen geldige dag van de week is.parse_url
: Deze functie genereertIllegalArgumentException
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 genereertArrayIndexOutOfBoundsException
als er ongeldige indexen worden gebruikt.map_col[key]
: Deze operator genereertNoSuchElementException
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 aanCAST
, behalve dat het retourneertNULL
, resulteert in plaats van een uitzondering op runtime-fout te genereren.try_add
: identiek aan de operator+
voor toevoegen, behalve dat deze resulteertNULL
in plaats van een uitzondering op een overloop van integrale waarden te genereren.try_divide
: identiek aan de divisieoperator/
, behalve dat het resultaat retourneertNULL
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 |
MACHTIGING | gereserveerd | niet gereserveerd | gereserveerd |
BETWEEN | niet gereserveerd | niet gereserveerd | gereserveerd |
BEIDE | 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 |
CASCADE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
CASE | gereserveerd | niet gereserveerd | gereserveerd |
CAST | gereserveerd | niet gereserveerd | gereserveerd |
VERANDEREN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
CHEQUE | 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 |
PLEGEN | 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 |
AANEENSCHAKELEN | 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 |
ACTUEEL | 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 |
DUIDELIJK | gereserveerd | niet gereserveerd | gereserveerd |
UITDELEN | 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 |
RUILEN | 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 |
VOLGEND | niet gereserveerd | niet gereserveerd | niet gereserveerd |
VOOR | gereserveerd | niet gereserveerd | gereserveerd |
BUITENLANDS | gereserveerd | niet gereserveerd | gereserveerd |
FORMATTEREN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
GEFORMATTEERD | niet gereserveerd | niet gereserveerd | niet gereserveerd |
FROM | gereserveerd | niet gereserveerd | gereserveerd |
VOL | 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 |
GROEPERING | 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 |
BINNENSTE | 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 |
LATERAAL | gereserveerd | strikt niet-gereserveerd | gereserveerd |
LUI | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LEIDEND | gereserveerd | niet gereserveerd | gereserveerd |
LEFT | gereserveerd | strikt niet-gereserveerd | gereserveerd |
ALS | niet gereserveerd | niet gereserveerd | gereserveerd |
ILIKE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
GRENS | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LIJNEN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LIST | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LADING | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LOKAAL | niet gereserveerd | niet gereserveerd | gereserveerd |
LOCATIE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
SLOT | niet gereserveerd | niet gereserveerd | niet gereserveerd |
SLOTEN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
LOGISCH | 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 |
NAMESPACE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
NAAMRUIMTEN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
NATUURLIJK | 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 |
BEVELEN | gereserveerd | niet gereserveerd | gereserveerd |
BUITEN | niet gereserveerd | niet gereserveerd | gereserveerd |
BUITEN | gereserveerd | niet gereserveerd | gereserveerd |
OUTPUTFORMAT | niet gereserveerd | niet gereserveerd | niet gereserveerd |
OVER | niet gereserveerd | niet gereserveerd | niet gereserveerd |
OVERLAPT | gereserveerd | niet gereserveerd | gereserveerd |
OVERLAPPEN | 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 |
DRAAIEN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
PLAATSEN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
POSITIE | niet gereserveerd | niet gereserveerd | gereserveerd |
VOORAFGAAND | 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 |
ZUIVEREN | 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 |
ONTVANGERS | 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 |
REDUCEREN | 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 |
REPAREREN | niet gereserveerd | niet gereserveerd | niet gereserveerd |
REPLACE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
RESET | niet gereserveerd | niet gereserveerd | niet gereserveerd |
EERBIED | 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 |
ROEIEN | 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 |
SOORT | niet gereserveerd | niet gereserveerd | niet gereserveerd |
GESORTEERD | niet gereserveerd | niet gereserveerd | niet gereserveerd |
START | niet gereserveerd | niet gereserveerd | gereserveerd |
STATISTIEK | 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 |
TIJDELIJK | 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 |
AANRAKEN | 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 |
ONBEGRENSD | niet gereserveerd | niet gereserveerd | niet gereserveerd |
UNCACHE | niet gereserveerd | niet gereserveerd | niet gereserveerd |
UNION | gereserveerd | strikt niet-gereserveerd | gereserveerd |
UNIEK | gereserveerd | niet gereserveerd | gereserveerd |
ONBEKEND | gereserveerd | niet gereserveerd | gereserveerd |
ONTSLUITEN | 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 |