Freigeben über


ANSI-Konformität in Databricks Runtime

Gilt für:Häkchen bei ja Databricks Runtime

In diesem Artikel wird die ANSI-Konformität in Databricks Runtime beschrieben. Informationen zum ANSI-Modus in Databricks SQL finden Sie unter ANSI_MODE.

Spark SQL bietet zwei Optionen zur Unterstützung der Kompatibilität mit dem ANSI-SQL-Standard: spark.sql.ansi.enabled und spark.sql.storeAssignmentPolicy.

Wenn spark.sql.ansi.enabled auf true festgelegt ist, verwendet Spark SQL einen ANSI-kompatiblen Dialekt, statt Hive-kompatibel zu sein. Spark löst z. B. zur Laufzeit eine Ausnahme aus, statt NULL-Ergebnisse zurückzugeben, wenn die Eingaben für einen SQL-Operator/eine SQL-Funktion ungültig sind. Einige ANSI-Dialektfeatures stammen möglicherweise nicht direkt aus dem ANSI SQL-Standard, aber ihre Verhaltensweisen entsprechen dem Stil von ANSI SQL.

Darüber hinaus verfügt Spark SQL über eine unabhängige Option zum Steuern des impliziten Umwandlungsverhaltens beim Speichern von Zeilen in eine Tabelle. Das Umwandlungsverhalten ist im Standard als Speicherzuweisungsregeln definiert.

Wenn spark.sql.storeAssignmentPolicy auf ANSI festgelegt ist, entspricht Spark SQL den ANSI-Speicherzuweisungsregeln. Dies ist eine separate Konfiguration, da der Standardwert ANSI ist, während die Konfiguration spark.sql.ansi.enabled standardmäßig deaktiviert ist.

In der folgenden Tabelle wird das Verhalten zusammengefasst:

Eigenschaftenname Standard Bedeutung
spark.sql.ansi.enabled Falsch Wenn die Eigenschaft auf „true“ festgelegt ist, versucht Spark, die ANSI-SQL-Spezifikation zu erfüllen:
  • Löst eine Laufzeitausnahme aus, wenn ein Überlauf in einem Vorgang in einem ganzzahligen oder dezimalen Feld auftritt.
  • Verbietet die Verwendung der reservierten Schlüsselwörter von ANSI SQL als Bezeichner im SQL-Parser.
spark.sql.storeAssignmentPolicy ANSI (Amerikanisches Institut für Normung) Beim Speichern eines Werts in einer Spalte mit einem anderen Datentyp führt Spark eine Typkonvertierung durch. Es gibt drei Richtlinien für die Typumwandlungsregeln: ANSI, legacy und strict.
  • ANSI: Spark führt die Typkoersion gemäß ANSI SQL aus. In der Praxis entspricht das Verhalten im Wesentlichen dem von PostgreSQL. Bestimmte nicht sinnvolle Typkonvertierungen wie das Konvertieren von „String“ in „Int“ oder „Double“ in „Boolean“ sind unzulässig.
  • legacy: Spark erlaubt die Typkoersion, solange es sich um einen gültigen Cast handelt, der sehr lose ist. Beispielsweise ist das Konvertieren von „String“ in „Int“ oder „Double“ in „Boolean“ zulässig. Dies ist auch das einzige Verhalten in Spark 2.x und ist mit Hive kompatibel.
  • strict: Spark lässt keine möglichen Genauigkeitsverluste oder Datenkürzungen bei der Typumwandlung zu, z. B. das Konvertieren von Double in Int oder Dezimal in Double ist nicht zulässig.

In den folgenden Unterabschnitten werden die Verhaltensänderungen bei arithmetischen Operationen, Typkonvertierungen und der SQL-Analyse bei aktiviertem ANSI-Modus aufgezeigt. In Bezug auf Typkonvertierungen in Spark SQL gibt es drei Arten, die in diesem Artikel einzeln vorgestellt werden: Umwandlung, Speicherzuweisung und Typkoersion.

Arithmetische Operationen

In Spark SQL werden arithmetische Operationen für numerische Typen (mit Ausnahme von „Decimal“) standardmäßig nicht auf Überläufe überprüft. Das heißt, wenn eine Operation Überläufe verursacht, ist das Ergebnis dasselbe wie bei der entsprechenden Operation in einem Java- oder Scala-Programm (wenn z. B. die Summe von zwei ganzen Zahlen höher ist als der maximal darstellbare Wert, ist das Ergebnis eine negative Zahl). Andererseits gibt Spark SQL bei Dezimalüberläufen NULL zurück. Wenn spark.sql.ansi.enabled auf true festgelegt ist und ein Überlauf bei numerischen und Intervallarithmetikoperationen auftritt, wird zur Laufzeit eine arithmetische Ausnahme ausgelöst.

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

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

Umwandeln

Wenn spark.sql.ansi.enabled auf true festgelegt ist, löst die explizite Umwandlung durch die CAST-Syntax eine Laufzeitausnahme für ungültige Umwandlungsmuster aus, die im Standard definiert sind, z. B. Umwandlungen von einer Zeichenfolge in eine ganze Zahl.

Die CAST-Klausel des Spark-ANSI-Modus folgt den Syntaxregeln von Abschnitt 6.13 „Umwandlungsspezifikation“ in ISO/IEC 9075-2:2011 Information technology — Database languages — SQL — Part 2: Foundation (SQL/Foundation), mit der Ausnahme, dass sie speziell die folgenden einfachen Typkonvertierungen zulässt, die gemäß dem ANSI-Standard nicht zulässig sind:

  • NumericType <=> BooleanType
  • StringTyp <=> BinärTyp

Die gültigen Kombinationen aus Quell- und Zieldatentyp in einem CAST-Ausdruck sind in der folgenden Tabelle aufgeführt. „J“ gibt an, dass die Kombination syntaktisch ohne Einschränkung gültig ist, und „N“ gibt an, dass die Kombination ungültig ist.

SourceTarget Numerisch Schnur Datum Zeitstempel Intervall Boolescher Typ (Boolean) Binär Anordnung Landkarte Struktur
Numerisch J J N N N J N N N N
Schnur J J J J J J J N N N
Datum N J J J N N N N N N
Zeitstempel N J J J N N N N N N
Intervall N J N N J N N N N N
Boolescher Typ (Boolean) J J N N N J N N N N
Binär J N N N N N J N N N
Anordnung N N N N N N N J N N
Landkarte N N N N N N N N J N
Struktur 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

Speicherzuweisung

Die Einstellung spark.sql.storeAssignmentPolicy standardmäßig auf ANSI festgelegt. Wenn die Datentypen von Quellwerten mit dieser Einstellung nicht mit den Zielspaltentypen übereinstimmen, fügt Spark SQL der SQL-Anweisung INSERT automatisch ANSI CAST-Klauseln hinzu. Während der Tabelleneinfügung prüft und lehnt Spark durch diese Richtlinie ungültige Umwandlungen ab und löst eine Ausnahme aus, um die Datenqualität sicherzustellen. Wenn das Einfügen aufgrund eines Typkonflikts fehlschlägt, werden somit keine Daten teilweise in die Tabelle geschrieben.

Beispiele:

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

Diese Beispiele zeigen, dass Spark SQL verhindert, dass inkompatible Daten eingefügt werden, wodurch die Datenintegrität sichergestellt wird.

Wenn spark.sql.storeAssignmentPolicy auf LEGACY festgelegt ist, greift Spark SQL auf das Verhalten zurück, das bis zu Spark 2.x bestand. In diesem Fall verwendet es anstelle von ANSI CAST ältere CAST-Vorgänge. Mit dieser Richtlinie führen ungültige Umwandlungen während der Tabelleneinfügung dazu, dass entweder NULL-Werte oder falsche Werte eingefügt werden, anstatt eine Ausnahme zu auslösen. Beispiele:

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

Typumwandlung

Typerweiterung und Rangfolge von Typen

Wenn spark.sql.ansi.enabled auf true festgelegt ist, verwendet Spark SQL mehrere Regeln, die steuern, wie Konflikte zwischen Datentypen gelöst werden. Das Kernstück dieser Konfliktlösung ist die Typenrangfolgeliste, die definiert, ob Werte eines bestimmten Datentyps implizit auf einen anderen Datentyp heraufgestuft/erweitert werden können.

Datentyp Rangfolgeliste (vom niedrigsten zum höchsten Typ)
Byte Byte - Short ->> Int -> Long -> Decimal -> Float* -> Double
Schnellstart Short - Int ->> Long -> Decimal -> Float* -> Double
Integer Int - Long ->> Decimal -> Float* -> Double
Lang Long -> Dezimal -> Float* -> Double
Dezimalzahl Dezimal -> Gleitkommazahl* -> Doppel
Schweben Float -> Double
Doppelt Doppelt
Datum Datum -> Zeitstempel
Zeitstempel Zeitstempel
Schnur Schnur
Binär Binär
Boolescher Typ (Boolean) Boolescher Typ (Boolean)
Intervall Intervall
Landkarte Zuordnung**
Anordnung Anordnung**
Struktur Struktur**
  • Bei der Auflösung des kleinsten gemeinsamen Typs wird „Float“ übersprungen, um Genauigkeitsverluste zu vermeiden.

** Bei einem komplexen Typ wird die Rangfolgeregel rekursiv auf die zugehörigen Komponentenelemente angewendet.

Spezielle Regeln gelten für den Typ „String“ und den nicht typisierten NULL-Wert. Ein NULL-Wert kann auf jeden anderen Typ heraufgestuft werden, und „String“ kann auf jeden einfachen Datentyp heraufgestuft werden.

Hier sehen Sie eine grafische Darstellung der Rangfolgeliste in Form eines gerichteten Baums: Grafische Darstellung der Rangfolgeregeln

Auflösung des kleinsten gemeinsamen Typs

Der kleinste gemeinsame Typ aus einer Reihe von Typen ist der niedrigste Typ, der aus der Rangfolgeliste von allen Elementen der Reihe von Typen erreicht werden kann.

Die Auflösung des kleinsten gemeinsamen Typs wird für Folgendes verwendet:

  • Entscheiden, ob eine Funktion, die einen Parameter eines Typs erwartet, mit einem Argument eines niedrigeren Typs aufgerufen werden kann.
  • Ableiten des Argumenttyps für Funktionen, die einen gemeinsamen Argumenttyp für mehrere Parameter erwarten, z. B. COALESCE, LEAST oder GREATEST.
  • Ableiten der Operandentypen für Operatoren wie z. B. arithmetische Operationen oder Vergleiche.
  • Ableiten des Ergebnistyps für Ausdrücke wie den CASE-Ausdruck.
  • Ableiten der Element-, Schlüssel- oder Werttypen für Array- und Map-Konstruktoren.

Spezielle Regeln werden angewendet, wenn der kleinste gemeinsame Typ in FLOAT aufgelöst wird. Wenn bei Werten vom Typ „Float“ einer der Typen INT, BIGINT oder DECIMAL ist, wird der kleinste gemeinsame Typ zu DOUBLE erweitert, um einen potenziellen Verlust von Ziffern zu vermeiden.

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

Das Verhalten einiger SQL-Funktionen kann im ANSI-Modus (spark.sql.ansi.enabled=true) anders ausfallen.

  • size: Diese Funktion gibt bei Null-Eingaben im ANSI-Modus NULL zurück.
  • element_at:
    • Diese Funktion löst ArrayIndexOutOfBoundsException aus, wenn ungültige Indizes verwendet werden.
    • Diese Funktion löst NoSuchElementException aus, wenn der Schlüssel in der Zuordnung nicht vorhanden ist.
  • elt: Diese Funktion löst ArrayIndexOutOfBoundsException aus, wenn ungültige Indizes verwendet werden.
  • make_date: Diese Funktion schlägt mit einer Ausnahme fehl, wenn das resultierende Datum ungültig ist.
  • make_timestamp: Diese Funktion schlägt mit einer Ausnahme fehl, wenn der resultierende Zeitstempel ungültig ist.
  • make_interval: Diese Funktion schlägt mit einer Ausnahme fehl, wenn das resultierende Intervall ungültig ist.
  • next_day: Diese Funktion löst IllegalArgumentException aus, wenn die Eingabe kein gültiger Wochentag ist.
  • parse_url: Diese Funktion löst IllegalArgumentException aus, wenn die Eingabezeichenfolge keine gültige URL ist.
  • to_date: Diese Funktion schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann oder die Musterzeichenfolge ungültig ist.
  • to_timestamp: Diese Funktion schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann oder die Musterzeichenfolge ungültig ist.
  • to_unix_timestamp: Diese Funktion schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann oder die Musterzeichenfolge ungültig ist.
  • unix_timestamp: Diese Funktion schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann oder die Musterzeichenfolge ungültig ist.

SQL-Operatoren

Das Verhalten einiger SQL-Operatoren kann im ANSI-Modus (spark.sql.ansi.enabled=true) anders ausfallen.

  • array_col[index]: Dieser Operator löst ArrayIndexOutOfBoundsException aus, wenn ungültige Indizes verwendet werden.
  • map_col[key]: Dieser Operator löst NoSuchElementException aus, wenn der Schlüssel in der Zuordnung nicht vorhanden ist.
  • CAST(string_col AS TIMESTAMP): Dieser Operator schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann.
  • CAST(string_col AS DATE): Dieser Operator schlägt mit einer Ausnahme fehl, wenn die Eingabezeichenfolge nicht analysiert werden kann.

Nützliche Funktionen für den ANSI-Modus

Wenn der ANSI-Modus aktiviert ist, werden Ausnahmen für ungültige Operationen ausgelöst. Sie können die folgenden SQL-Funktionen verwenden, um solche Ausnahmen zu unterdrücken.

  • try_cast: Diese Funktion ist mit CAST identisch, außer dass sie das Ergebnis NULL zurückgibt, statt bei Laufzeitfehlern eine Ausnahme auszulösen.
  • try_add: Diese Funktion ist mit dem Additionsoperator (+) identisch, außer dass sie das Ergebnis NULL zurückgibt, statt bei einem Ganzzahlüberlauf eine Ausnahme auszulösen.
  • try_divide: Diese Funktion ist mit dem Divisionsoperator (/) identisch, außer dass sie das Ergebnis NULL zurückgibt, statt bei einer Division durch Null (0) eine Ausnahme auszulösen.

SQL-Schlüsselwörter

Wenn spark.sql.ansi.enabled auf „true“ festgelegt ist, verwendet Spark SQL den Parser im ANSI-Modus. In diesem Modus verfügt Spark SQL über zwei Arten von Schlüsselwörtern:

  • Reservierte Schlüsselwörter: Schlüsselwörter, die reserviert sind und nicht als Bezeichner für Tabelle, Ansicht, Spalte, Funktion, Alias usw. verwendet werden können.
  • Nicht reservierte Schlüsselwörter: Schlüsselwörter, die nur in bestimmten Kontexten eine besondere Bedeutung haben und in anderen Kontexten als Bezeichner verwendet werden können. Beispielsweise ist EXPLAIN SELECT ... ein Befehl, aber EXPLAIN kann an anderen Stellen als Bezeichner verwendet werden.

Wenn der ANSI-Modus deaktiviert ist, verfügt Spark SQL über zwei Arten von Schlüsselwörtern:

  • Nicht reservierte Schlüsselwörter: Es gilt dieselbe Definition wie bei aktiviertem ANSI-Modus.
  • Nicht reservierte Schlüsselwörter im strikten Modus: Eine strikte Version nicht reservierter Schlüsselwörter, die nicht als Tabellenalias verwendet werden können.

Standardmäßig ist spark.sql.ansi.enabled auf „false“ festgelegt.

Im Folgenden finden Sie eine Liste aller Schlüsselwörter in Spark SQL.

Schlüsselwort Spark SQL-ANSI-Modus Spark SQL-Standardmodus SQL-2016
HINZUFÜGEN nicht reserviert nicht reserviert nicht reserviert
NACH nicht reserviert nicht reserviert nicht reserviert
ALLE reserviert nicht reserviert reserviert
ÄNDERN nicht reserviert nicht reserviert reserviert
IMMER nicht reserviert nicht reserviert nicht reserviert
ANALYSIEREN nicht reserviert nicht reserviert nicht reserviert
UND reserviert nicht reserviert reserviert
gegen nicht reserviert streng-nicht-reserviert nicht reserviert
BELIEBIG reserviert nicht reserviert reserviert
ARCHIV nicht reserviert nicht reserviert nicht reserviert
ANORDNUNG nicht reserviert nicht reserviert reserviert
WIE reserviert nicht reserviert reserviert
ASC nicht reserviert nicht reserviert nicht reserviert
AN nicht reserviert nicht reserviert reserviert
AUTORISIERUNG reserviert nicht reserviert reserviert
ZWISCHEN nicht reserviert nicht reserviert reserviert
BEIDE reserviert nicht reserviert reserviert
EIMER nicht reserviert nicht reserviert nicht reserviert
EIMER nicht reserviert nicht reserviert nicht reserviert
BIS nicht reserviert nicht reserviert reserviert
Cache nicht reserviert nicht reserviert nicht reserviert
KASKADE nicht reserviert nicht reserviert nicht reserviert
FALL (given the lack of context, this translation assumes it refers to a general case or instance) reserviert nicht reserviert reserviert
WERFEN reserviert nicht reserviert reserviert
VERÄNDERUNG nicht reserviert nicht reserviert nicht reserviert
PRÜFEN reserviert nicht reserviert reserviert
KLAR nicht reserviert nicht reserviert nicht reserviert
CLUSTER nicht reserviert nicht reserviert nicht reserviert
GECLUSTERT nicht reserviert nicht reserviert nicht reserviert
CODEGEN nicht reserviert nicht reserviert nicht reserviert
VERGLEICHEN reserviert nicht reserviert reserviert
SAMMLUNG nicht reserviert nicht reserviert nicht reserviert
COLUMN reserviert nicht reserviert reserviert
COLUMNS nicht reserviert nicht reserviert nicht reserviert
KOMMENTAR nicht reserviert nicht reserviert nicht reserviert
BEGEHEN nicht reserviert nicht reserviert reserviert
KOMPAKT nicht reserviert nicht reserviert nicht reserviert
KOMPRIMIERUNGEN nicht reserviert nicht reserviert nicht reserviert
BERECHNEN nicht reserviert nicht reserviert nicht reserviert
KONKATENIEREN nicht reserviert nicht reserviert nicht reserviert
CONSTRAINT reserviert nicht reserviert reserviert
KOSTEN nicht reserviert nicht reserviert nicht reserviert
ERSTELLEN reserviert nicht reserviert reserviert
KREUZ reserviert streng-nicht-reserviert reserviert
WÜRFEL nicht reserviert nicht reserviert reserviert
AKTUELL nicht reserviert nicht reserviert reserviert
HEUTIGES_DATUM reserviert nicht reserviert reserviert
CURRENT_TIME reserviert nicht reserviert reserviert
CURRENT_TIMESTAMP reserviert nicht reserviert reserviert
AKTUELLER_BENUTZER reserviert nicht reserviert reserviert
DATEN nicht reserviert nicht reserviert nicht reserviert
DATENBANK nicht reserviert nicht reserviert nicht reserviert
DATENBANKEN nicht reserviert nicht reserviert nicht reserviert
TAG nicht reserviert nicht reserviert nicht reserviert
DBPROPERTIES nicht reserviert nicht reserviert nicht reserviert
DEFINIERT nicht reserviert nicht reserviert nicht reserviert
Löschen nicht reserviert nicht reserviert reserviert
BEGRENZT nicht reserviert nicht reserviert nicht reserviert
DESC nicht reserviert nicht reserviert nicht reserviert
BESCHREIBEN nicht reserviert nicht reserviert reserviert
DFS nicht reserviert nicht reserviert nicht reserviert
VERZEICHNISSE nicht reserviert nicht reserviert nicht reserviert
VERZEICHNIS nicht reserviert nicht reserviert nicht reserviert
EINDEUTIG reserviert nicht reserviert reserviert
VERTEILEN nicht reserviert nicht reserviert nicht reserviert
DIV nicht reserviert nicht reserviert kein Schlüsselwort
FALLEN LASSEN nicht reserviert nicht reserviert reserviert
ODER reserviert nicht reserviert reserviert
ENDE reserviert nicht reserviert reserviert
FLUCHT reserviert nicht reserviert reserviert
ENTKOMMEN nicht reserviert nicht reserviert nicht reserviert
außer reserviert streng-nicht-reserviert reserviert
UMTAUSCH nicht reserviert nicht reserviert nicht reserviert
EXISTIERT nicht reserviert nicht reserviert reserviert
EXPLAIN nicht reserviert nicht reserviert nicht reserviert
EXPORTIEREN nicht reserviert nicht reserviert nicht reserviert
VERLÄNGERT nicht reserviert nicht reserviert nicht reserviert
EXTERN nicht reserviert nicht reserviert reserviert
AUSZUG nicht reserviert nicht reserviert reserviert
FALSCH reserviert nicht reserviert reserviert
HOLEN reserviert nicht reserviert reserviert
FELDER nicht reserviert nicht reserviert nicht reserviert
Filter reserviert nicht reserviert reserviert
Dateiformat nicht reserviert nicht reserviert nicht reserviert
ERSTE nicht reserviert nicht reserviert nicht reserviert
FN nicht reserviert nicht reserviert nicht reserviert
FOLGENDE nicht reserviert nicht reserviert nicht reserviert
FÜR reserviert nicht reserviert reserviert
FREMDE reserviert nicht reserviert reserviert
Format nicht reserviert nicht reserviert nicht reserviert
FORMATIERT nicht reserviert nicht reserviert nicht reserviert
VON reserviert nicht reserviert reserviert
VOLL reserviert streng-nicht-reserviert reserviert
FUNKTION nicht reserviert nicht reserviert reserviert
FUNKTIONEN nicht reserviert nicht reserviert nicht reserviert
ERZEUGT nicht reserviert nicht reserviert nicht reserviert
GLOBAL nicht reserviert nicht reserviert reserviert
GRANT reserviert nicht reserviert reserviert
ZUSCHÜSSE nicht reserviert nicht reserviert nicht reserviert
GRUPPE reserviert nicht reserviert reserviert
GRUPPIERUNG nicht reserviert nicht reserviert reserviert
HAVING reserviert nicht reserviert reserviert
STUNDE nicht reserviert nicht reserviert nicht reserviert
WENN nicht reserviert nicht reserviert kein Schlüsselwort
IGNORIEREN nicht reserviert nicht reserviert nicht reserviert
IMPORTIEREN nicht reserviert nicht reserviert nicht reserviert
IN reserviert nicht reserviert reserviert
INDEX nicht reserviert nicht reserviert nicht reserviert
INDEXE nicht reserviert nicht reserviert nicht reserviert
INNEN reserviert streng-nicht-reserviert reserviert
INPATH nicht reserviert nicht reserviert nicht reserviert
INPUTFORMAT nicht reserviert nicht reserviert nicht reserviert
INSERT nicht reserviert nicht reserviert reserviert
SCHNITTSTELLE reserviert streng-nicht-reserviert reserviert
INTERVALL nicht reserviert nicht reserviert reserviert
IN reserviert nicht reserviert reserviert
IST reserviert nicht reserviert reserviert
ARTIKEL nicht reserviert nicht reserviert nicht reserviert
JOIN reserviert streng-nicht-reserviert reserviert
JSON nicht reserviert nicht reserviert nicht reserviert
SCHLÜSSEL nicht reserviert nicht reserviert nicht reserviert
SCHLÜSSEL nicht reserviert nicht reserviert nicht reserviert
LETZTE nicht reserviert nicht reserviert nicht reserviert
SEITLICH reserviert streng-nicht-reserviert reserviert
FAUL nicht reserviert nicht reserviert nicht reserviert
FÜHREND reserviert nicht reserviert reserviert
LINKS reserviert streng-nicht-reserviert reserviert
Gefällt mir nicht reserviert nicht reserviert reserviert
ILIKE nicht reserviert nicht reserviert nicht reserviert
LIMIT nicht reserviert nicht reserviert nicht reserviert
LINIEN nicht reserviert nicht reserviert nicht reserviert
LIST nicht reserviert nicht reserviert nicht reserviert
LADUNG nicht reserviert nicht reserviert nicht reserviert
LOKAL nicht reserviert nicht reserviert reserviert
LAGERPLATZ nicht reserviert nicht reserviert nicht reserviert
SCHLEUSE nicht reserviert nicht reserviert nicht reserviert
SCHLÖSSER nicht reserviert nicht reserviert nicht reserviert
LOGISCH nicht reserviert nicht reserviert nicht reserviert
MAKRO nicht reserviert nicht reserviert nicht reserviert
KARTE nicht reserviert nicht reserviert nicht reserviert
PAARIG nicht reserviert nicht reserviert nicht reserviert
VERSCHMELZEN nicht reserviert nicht reserviert nicht reserviert
MINUTE nicht reserviert nicht reserviert nicht reserviert
MINUS nicht reserviert streng-nicht-reserviert nicht reserviert
MONAT nicht reserviert nicht reserviert nicht reserviert
MSCK nicht reserviert nicht reserviert nicht reserviert
NAMESPACE nicht reserviert nicht reserviert nicht reserviert
NAMESPACES nicht reserviert nicht reserviert nicht reserviert
NATÜRLICH reserviert streng-nicht-reserviert reserviert
Nein nicht reserviert nicht reserviert reserviert
NICHT reserviert nicht reserviert reserviert
NULL reserviert nicht reserviert reserviert
NULLEN nicht reserviert nicht reserviert nicht reserviert
VON nicht reserviert nicht reserviert reserviert
EIN reserviert streng-nicht-reserviert reserviert
NUR reserviert nicht reserviert reserviert
Option nicht reserviert nicht reserviert nicht reserviert
OPTIONEN nicht reserviert nicht reserviert nicht reserviert
ODER reserviert nicht reserviert reserviert
BESTELLUNG reserviert nicht reserviert reserviert
AUS nicht reserviert nicht reserviert reserviert
äußere reserviert nicht reserviert reserviert
OUTPUTFORMAT nicht reserviert nicht reserviert nicht reserviert
Ende nicht reserviert nicht reserviert nicht reserviert
ÜBERSCHNEIDUNGEN reserviert nicht reserviert reserviert
Überlagerung nicht reserviert nicht reserviert nicht reserviert
ÜBERSCHREIBEN nicht reserviert nicht reserviert nicht reserviert
PARTITION nicht reserviert nicht reserviert reserviert
AUFGETEILT nicht reserviert nicht reserviert nicht reserviert
PARTITIONEN nicht reserviert nicht reserviert nicht reserviert
PROZENT nicht reserviert nicht reserviert nicht reserviert
PIVOT nicht reserviert nicht reserviert nicht reserviert
PLATZIERUNG nicht reserviert nicht reserviert nicht reserviert
POSITION nicht reserviert nicht reserviert reserviert
VORHERGEHEND nicht reserviert nicht reserviert nicht reserviert
Primär reserviert nicht reserviert reserviert
SCHULLEITER nicht reserviert nicht reserviert nicht reserviert
EIGENSCHAFTEN nicht reserviert nicht reserviert nicht reserviert
BEREINIGEN nicht reserviert nicht reserviert nicht reserviert
QUALIFY reserviert nicht reserviert reserviert
FRAGE nicht reserviert nicht reserviert nicht reserviert
BEREICH nicht reserviert nicht reserviert reserviert
EMPFÄNGER nicht reserviert nicht reserviert nicht reserviert
RECIPIENTS nicht reserviert nicht reserviert nicht reserviert
RECORDREADER nicht reserviert nicht reserviert nicht reserviert
RECORDWRITER nicht reserviert nicht reserviert nicht reserviert
WIEDERHERSTELLEN nicht reserviert nicht reserviert nicht reserviert
REDUZIEREN nicht reserviert nicht reserviert nicht reserviert
REFERENZEN reserviert nicht reserviert reserviert
REFRESH nicht reserviert nicht reserviert nicht reserviert
REGEXP nicht reserviert nicht reserviert kein Schlüsselwort
REMOVE nicht reserviert nicht reserviert nicht reserviert
UMBENENNEN nicht reserviert nicht reserviert nicht reserviert
REPARIEREN nicht reserviert nicht reserviert nicht reserviert
ERSETZEN nicht reserviert nicht reserviert nicht reserviert
RESET nicht reserviert nicht reserviert nicht reserviert
RESPEKT nicht reserviert nicht reserviert nicht reserviert
EINSCHRÄNKEN nicht reserviert nicht reserviert nicht reserviert
REVOKE nicht reserviert nicht reserviert reserviert
Richtig reserviert streng-nicht-reserviert reserviert
RLIKE nicht reserviert nicht reserviert nicht reserviert
Rolle nicht reserviert nicht reserviert nicht reserviert
Rollen nicht reserviert nicht reserviert nicht reserviert
Rollback nicht reserviert nicht reserviert reserviert
Roll-Up nicht reserviert nicht reserviert reserviert
RUDERN nicht reserviert nicht reserviert reserviert
Reihen nicht reserviert nicht reserviert reserviert
SCHEMA nicht reserviert nicht reserviert nicht reserviert
SCHEMAS nicht reserviert nicht reserviert kein Schlüsselwort
SEKUNDE nicht reserviert nicht reserviert nicht reserviert
SELECT reserviert nicht reserviert reserviert
HALB nicht reserviert streng-nicht-reserviert nicht reserviert
GETRENNT nicht reserviert nicht reserviert nicht reserviert
SERDE nicht reserviert nicht reserviert nicht reserviert
SERDEPROPERTIES nicht reserviert nicht reserviert nicht reserviert
Sitzungsbenutzer reserviert nicht reserviert reserviert
SET nicht reserviert nicht reserviert reserviert
GARNITUREN nicht reserviert nicht reserviert nicht reserviert
TEILEN nicht reserviert nicht reserviert nicht reserviert
SHARES nicht reserviert nicht reserviert nicht reserviert
ZEIGEN nicht reserviert nicht reserviert nicht reserviert
VERZERRT nicht reserviert nicht reserviert nicht reserviert
EINIGE reserviert nicht reserviert reserviert
Sortierung nicht reserviert nicht reserviert nicht reserviert
SORTIERT nicht reserviert nicht reserviert nicht reserviert
ANFANGEN nicht reserviert nicht reserviert reserviert
Statistik nicht reserviert nicht reserviert nicht reserviert
GESPEICHERT nicht reserviert nicht reserviert nicht reserviert
STRATIFIZIEREN nicht reserviert nicht reserviert nicht reserviert
STRUKTUR nicht reserviert nicht reserviert nicht reserviert
SUBSTR nicht reserviert nicht reserviert nicht reserviert
Substring nicht reserviert nicht reserviert nicht reserviert
SYNC nicht reserviert nicht reserviert nicht reserviert
TABLE reserviert nicht reserviert reserviert
TABLES nicht reserviert nicht reserviert nicht reserviert
TABLESAMPLE nicht reserviert nicht reserviert reserviert
TBLPROPERTIES nicht reserviert nicht reserviert nicht reserviert
AUSHILFE nicht reserviert nicht reserviert kein Schlüsselwort
VORLÄUFIG nicht reserviert nicht reserviert nicht reserviert
BEENDET nicht reserviert nicht reserviert nicht reserviert
DANN reserviert nicht reserviert reserviert
ZEIT reserviert nicht reserviert reserviert
AN reserviert nicht reserviert reserviert
BERÜHREN nicht reserviert nicht reserviert nicht reserviert
NACHFOLGEND reserviert nicht reserviert reserviert
TRANSAKTION nicht reserviert nicht reserviert nicht reserviert
TRANSAKTIONEN nicht reserviert nicht reserviert nicht reserviert
UMWANDELN nicht reserviert nicht reserviert nicht reserviert
SCHNEIDEN nicht reserviert nicht reserviert nicht reserviert
WAHR nicht reserviert nicht reserviert reserviert
ABSCHNEIDEN nicht reserviert nicht reserviert reserviert
TRY_CAST nicht reserviert nicht reserviert nicht reserviert
ART nicht reserviert nicht reserviert nicht reserviert
AUFHEBEN DER ARCHIVIERUNG nicht reserviert nicht reserviert nicht reserviert
UNBEGRENZT nicht reserviert nicht reserviert nicht reserviert
UNCACHE nicht reserviert nicht reserviert nicht reserviert
VEREINIGUNG reserviert streng-nicht-reserviert reserviert
EINZIGARTIG reserviert nicht reserviert reserviert
UNBEKANNT reserviert nicht reserviert reserviert
AUFSCHLIEßEN nicht reserviert nicht reserviert nicht reserviert
UNSET nicht reserviert nicht reserviert nicht reserviert
UPDATE nicht reserviert nicht reserviert reserviert
VERWENDEN nicht reserviert nicht reserviert nicht reserviert
Benutzer reserviert nicht reserviert reserviert
VERWENDEN reserviert streng-nicht-reserviert reserviert
VALUES nicht reserviert nicht reserviert reserviert
ANSEHEN nicht reserviert nicht reserviert nicht reserviert
VIEWS nicht reserviert nicht reserviert nicht reserviert
WANN reserviert nicht reserviert reserviert
WHERE reserviert nicht reserviert reserviert
WINDOW nicht reserviert nicht reserviert reserviert
MIT reserviert nicht reserviert reserviert
Jahr nicht reserviert nicht reserviert nicht reserviert
Zone nicht reserviert nicht reserviert nicht reserviert