Zgodność ANSI w środowisku Databricks Runtime
Dotyczy: Databricks Runtime
W tym artykule opisano zgodność ANSI w środowisku Databricks Runtime. W przypadku trybu ANSI w usłudze Databricks SQL zobacz ANSI_MODE.
Usługa Spark SQL oferuje dwie opcje obsługi zgodności ze standardem ANSI SQL: spark.sql.ansi.enabled
i spark.sql.storeAssignmentPolicy
.
Gdy spark.sql.ansi.enabled
jest ustawiona wartość true
, usługa Spark SQL używa zgodnego dialektu ANSI zamiast zgodnego z programem Hive. Na przykład platforma Spark zgłosi wyjątek w czasie wykonywania zamiast zwracać wyniki o wartości null, jeśli dane wejściowe do operatora/funkcji SQL są nieprawidłowe. Niektóre funkcje dialektu ANSI mogą nie pochodzić bezpośrednio ze standardu ANSI SQL, ale ich zachowania są zgodne ze stylem ANSI SQL.
Ponadto usługa Spark SQL ma niezależną opcję kontrolowania niejawnych zachowań rzutowania podczas przechowywania wierszy w tabeli. Zachowania rzutowania są definiowane jako reguły przypisywania magazynu w standardzie.
Gdy spark.sql.storeAssignmentPolicy
jest ustawiona wartość ANSI
, usługa Spark SQL jest zgodna z regułami przypisywania magazynu ANSI. Jest to oddzielna konfiguracja, ponieważ jej wartość domyślna to ANSI
, a konfiguracja spark.sql.ansi.enabled
jest domyślnie wyłączona.
Poniższa tabela zawiera podsumowanie zachowania:
Nazwa właściwości | Wartość domyślna | Znaczenie |
---|---|---|
spark.sql.ansi.enabled |
fałsz | Jeśli to prawda, platforma Spark próbuje dostosować się do specyfikacji ANSI SQL: — Zgłasza wyjątek środowiska uruchomieniowego, jeśli przepełnienie występuje w dowolnej operacji na liczbą całkowitą lub polem dziesiętnym. - Zabrania używania zarezerwowanych słów kluczowych języka ANSI SQL jako identyfikatorów w analizatorze SQL. |
spark.sql.storeAssignmentPolicy |
ANSI | Podczas przechowywania wartości w kolumnie o innym typie danych platforma Spark wykonuje konwersję typu. Istnieją trzy zasady dotyczące reguł przymusu typów: ANSI , legacy i strict .- ANSI : Platforma Spark wykonuje przymus typu zgodnie z instrukcjami ANSI SQL. W praktyce zachowanie jest w większości takie samo jak w przypadku bazy danych PostgreSQL. Nie zezwala na pewne nieuzasadnione konwersje typów, takie jak konwertowanie ciągu na int lub podwójne na wartość logiczną.- legacy : Platforma Spark zezwala na przymus typu, o ile jest to prawidłowa obsada, która jest bardzo luźna. Na przykład konwertowanie ciągu na int lub podwójne na wartość logiczną jest dozwolone. Jest to również jedyne zachowanie platformy Spark 2.x i jest zgodne z programem Hive.- strict : Platforma Spark nie zezwala na żadną możliwą utratę precyzji ani obcinanie danych w trybie przymusu typu, na przykład konwersja podwójna na wartość int lub liczba dziesiętna na podwójną nie jest dozwolona. |
W poniższych podsekcjach przedstawiono zmiany zachowania operacji arytmetycznych, konwersji typów i analizowania SQL po włączeniu trybu ANSI. W przypadku konwersji typów w usłudze Spark SQL istnieją trzy rodzaje, a w tym artykule przedstawiono je jeden po jednym: rzutowanie, przypisywanie magazynu i typ przymusu.
Operacje arytmetyczne
W usłudze Spark SQL operacje arytmetyczne wykonywane na typach liczbowych (z wyjątkiem liczby dziesiętnej) nie są domyślnie sprawdzane pod kątem przepełnienia.
Oznacza to, że w przypadku, gdy operacja powoduje przepełnienie, wynik jest taki sam w przypadku odpowiedniej operacji w programie Java lub Scala (na przykład jeśli suma 2 liczb całkowitych jest wyższa niż maksymalna wartość, którą można przedstawić, wynik jest liczbą ujemną). Z drugiej strony usługa Spark SQL zwraca wartość null dla przepełnienia dziesiętnego.
Gdy spark.sql.ansi.enabled
jest ustawiona wartość i true
przepełnienie występuje w operacjach arytmetycznych liczbowych i interwałowych, zgłasza wyjątek arytmetyczny w czasie wykonywania.
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
Rzutowanie
Gdy spark.sql.ansi.enabled
jest ustawiona wartość true
, jawne rzutowanie przez CAST
składnię zgłasza wyjątek środowiska uruchomieniowego dla nielegalnych wzorców rzutowania zdefiniowanych w standardzie, takich jak rzutowania z ciągu na liczbę całkowitą.
Klauzula CAST
trybu Spark ANSI jest zgodna z regułami składni w sekcji 6.13 "specyfikacja rzutowania" w standardzie ISO/IEC 9075-2:2011 Information technology — Database languages — SQL — Part 2: Foundation (SQL/Foundation), z wyjątkiem następujących prostych konwersji typów, które są niedozwolone zgodnie ze standardem ANSI:
- NumericType <=> Wartość logiczna
- StringType => BinaryType <
Prawidłowe kombinacje typu danych źródłowych i docelowych w wyrażeniu CAST
są podane w poniższej tabeli.
"Y" wskazuje, że kombinacja jest składniowo prawidłowa bez ograniczeń i "N" wskazuje, że kombinacja jest nieprawidłowa.
SourceTarget | Liczbowe | String | Data | Sygnatura czasowa | Interwał | Wartość logiczna | Plik binarny | Tablica | Mapowanie | Struktura |
---|---|---|---|---|---|---|---|---|---|---|
Liczbowe | Y | Y | N | N | N | Y | N | N | N | N |
String | Y | Y | Y | Y | Y | Y | Y | N | N | N |
Data | N | Y | Y | Y | N | N | N | N | N | N |
Sygnatura czasowa | N | Y | Y | Y | N | N | N | N | N | N |
Interwał | N | Y | N | N | Y | N | N | N | N | N |
Wartość logiczna | Y | Y | N | N | N | Y | N | N | N | N |
Plik binarny | Y | N | N | N | N | N | Y | N | N | N |
Tablica | N | N | N | N | N | N | N | Y | N | N |
Mapowanie | N | N | N | N | N | N | N | N | Y | N |
Struktura | N | N | N | N | N | N | N | N | N | Y |
-- Examples of explicit casting
-- `spark.sql.ansi.enabled=true`
> SELECT CAST('a' AS INT);
ERROR: [CAST_INVALID_INPUT] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed.
> SELECT CAST(2147483648L AS INT);
ERROR: [CAST_OVERFLOW] The value 2147483648L of the type "BIGINT" cannot be cast to "INT" due to an overflow.
> SELECT CAST(DATE'2020-01-01' AS INT)
ERROR: [DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] Cannot resolve "CAST(DATE '2020-01-01' AS INT)" due to data type mismatch: cannot cast "DATE" to "INT".
-- `spark.sql.ansi.enabled=false` (This is a default behavior)
> SELECT cast('a' AS INT);
null
> SELECT CAST(2147483648L AS INT);
-2147483648
> SELECT CAST(DATE'2020-01-01' AS INT);
null
Przypisanie magazynu
spark.sql.storeAssignmentPolicy
Ustawienie ma wartość domyślną ANSI
. Dzięki temu ustawieniu, gdy typy danych wartości źródłowych nie są zgodne z typami kolumn docelowych, usługa Spark SQL automatycznie dodaje klauzule ANSI CAST do instrukcji INSERT.
Podczas wstawiania tabeli w ramach tych zasad platforma Spark sprawdza i odrzuca nieprawidłowe rzutowania, zgłaszając wyjątek w celu zapewnienia jakości danych. Oznacza to, że jeśli próba wstawiania nie powiedzie się z powodu niezgodności typu, nie spowoduje to częściowego zapisania danych w tabeli.
Przykłady:
-- 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
W tych przykładach pokazano, że usługa Spark SQL uniemożliwia wstawianie niezgodnych danych, zapewniając integralność danych.
spark.sql.storeAssignmentPolicy
Gdy właściwość jest ustawiona na LEGACY
wartość , usługa Spark SQL przywraca zachowanie rozpowszechnione do platformy Spark 2.x. W tym trybie zamiast używać funkcji ANSI CAST, stosuje starsze operacje CAST. W ramach tych zasad nieprawidłowe rzutowania podczas wstawiania tabeli powodują wstawienie wartości NULL lub niepoprawnych wartości zamiast zgłaszania wyjątku.
Przykłady:
-- 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)
Wymuszanie typu
Typ Podwyższanie poziomu i pierwszeństwo
Gdy spark.sql.ansi.enabled
jest ustawiona wartość true
, usługa Spark SQL używa kilku reguł, które określają sposób rozwiązywania konfliktów między typami danych.
W centrum tej rozwiązywania konfliktów jest lista pierwszeństwa typu, która określa, czy wartości danego typu danych mogą być promowane do innego typu danych niejawnie.
Typ danych | lista pierwszeństwa (od najwęższej do najszerszej) |
---|---|
Byte | Byte - Short -> Int - Long ->> Decimal -> Float* -> Double> |
Krótkie | Krótki - Int ->> Long -> Decimal-> Float* -> Double |
Int | Int - Long ->> Decimal -> Float* -> Double |
Długi | Długi — dziesiętny —>> zmiennoprzecinkowy* —> podwójny |
Dziesiętne | Liczba dziesiętna —> liczba zmiennoprzecinkowa* —> podwójna |
Liczba zmiennoprzecinkowa | Zmiennoprzecinkowy —> podwójny |
Liczba rzeczywista | Liczba rzeczywista |
Data | Data —> sygnatura czasowa |
Sygnatura czasowa | Sygnatura czasowa |
String | String |
Plik binarny | Plik binarny |
Wartość logiczna | Wartość logiczna |
Interwał | Interwał |
Mapowanie | Mapa** |
Tablica | Tablica** |
Struktura | Struct** |
- W przypadku najmniejszej typowej rozdzielczości zmiennoprzecinkowej jest pomijana, aby uniknąć utraty precyzji.
** W przypadku typu złożonego reguła pierwszeństwa jest cyklicznie stosowana do jej elementów składowych.
Reguły specjalne mają zastosowanie do typu Ciąg i nietypowej wartości NULL. Wartość NULL można awansować do dowolnego innego typu, a ciąg może zostać podwyższony do dowolnego prostego typu danych.
Jest to graficzne przedstawienie listy pierwszeństwa jako drzewa kierowanego:
Rozpoznawanie najmniej typowych typów
Najmniej typowym typem z zestawu typów jest najwęższy typ osiągalny z listy pierwszeństwa przez wszystkie elementy zestawu typów.
Najmniej typowe rozpoznawanie typów jest używane do:
- Zdecyduj, czy można wywołać funkcję oczekującą parametru typu przy użyciu argumentu węższego typu.
- Utwórz typ argumentu dla funkcji, które oczekują współużytkowanego typu argumentu dla wielu parametrów, takich jak łączenie, najmniej lub największe.
- Utwórz typy operandów dla operatorów, takich jak operacje arytmetyczne lub porównania.
- Utwórz typ wyniku dla wyrażeń, takich jak wyrażenie przypadku.
- Wyodrębnij typy elementów, kluczy lub wartości dla konstruktorów tablic i map.
Specjalne reguły są stosowane, jeśli najmniej typowy typ jest rozpoznawany jako FLOAT. W przypadku wartości typu zmiennoprzecinkowego, jeśli którykolwiek z typów to INT, BIGINT lub DECIMAL najmniej typowy typ jest wypychany do wartości DOUBLE, aby uniknąć potencjalnej utraty cyfr.
-- 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.
Funkcje SQL
Zachowanie niektórych funkcji SQL może być inne w trybie ANSI (spark.sql.ansi.enabled=true
).
size
: Ta funkcja zwraca wartość null dla danych wejściowych o wartości null w trybie ANSI.element_at
:- Ta funkcja zgłasza wyjątek w przypadku używania nieprawidłowych
ArrayIndexOutOfBoundsException
indeksów. - Ta funkcja zgłasza,
NoSuchElementException
czy klucz nie istnieje na mapie.
- Ta funkcja zgłasza wyjątek w przypadku używania nieprawidłowych
elt
: Ta funkcja zgłasza wyjątek w przypadku używania nieprawidłowychArrayIndexOutOfBoundsException
indeksów.make_date
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli data wyniku jest nieprawidłowa.make_timestamp
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli sygnatura czasowa wyniku jest nieprawidłowa.make_interval
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli interwał wyników jest nieprawidłowy.next_day
: Ta funkcja zgłasza,IllegalArgumentException
jeśli dane wejściowe nie są prawidłowym dniem tygodnia.parse_url
: Ta funkcja zgłasza,IllegalArgumentException
jeśli ciąg wejściowy nie jest prawidłowym adresem URL.to_date
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego lub ciąg wzorca jest nieprawidłowy.to_timestamp
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego lub ciąg wzorca jest nieprawidłowy.to_unix_timestamp
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego lub ciąg wzorca jest nieprawidłowy.unix_timestamp
: Ta funkcja kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego lub ciąg wzorca jest nieprawidłowy.
Operatory SQL
Zachowanie niektórych operatorów SQL może być inne w trybie ANSI (spark.sql.ansi.enabled=true
).
array_col[index]
: ten operator zgłasza wyjątek w przypadku używania nieprawidłowychArrayIndexOutOfBoundsException
indeksów.map_col[key]
: ten operator zgłasza,NoSuchElementException
czy klucz nie istnieje na mapie.CAST(string_col AS TIMESTAMP)
: Ten operator kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego.CAST(string_col AS DATE)
: Ten operator kończy się niepowodzeniem z wyjątkiem, jeśli nie można przeanalizować ciągu wejściowego.
Przydatne funkcje dla trybu ANSI
Gdy tryb ANSI jest włączony, zgłasza wyjątki dla nieprawidłowych operacji. Następujące funkcje SQL umożliwiają pomijanie takich wyjątków.
try_cast
: identyczny zCAST
, z tą różnicą, że zwracaNULL
wynik zamiast zgłaszać wyjątek w przypadku błędu czasu wykonywania.try_add
: identyczny z operatorem+
add , z tą różnicą, że zwracaNULL
wynik zamiast zgłaszać wyjątek w przepełnieniu wartości całkowitej.try_divide
: identyczny z operatorem/
dzielenia , z tą różnicą, że zwracaNULL
wynik zamiast zgłaszać wyjątek podczas dzielenia 0.
Słowa kluczowe SQL
Jeśli spark.sql.ansi.enabled
wartość ma wartość true, usługa Spark SQL będzie używać analizatora trybu ANSI.
W tym trybie usługa Spark SQL ma dwa rodzaje słów kluczowych:
- Zastrzeżone słowa kluczowe: słowa kluczowe zarezerwowane i nie mogą być używane jako identyfikatory dla tabeli, widoku, kolumny, funkcji, aliasu itp.
- Słowa kluczowe inne niż zastrzeżone: słowa kluczowe, które mają specjalne znaczenie tylko w określonych kontekstach i mogą być używane jako identyfikatory w innych kontekstach. Na przykład
EXPLAIN SELECT ...
jest to polecenie, ale funkcja EXPLAIN może służyć jako identyfikatory w innych miejscach.
Gdy tryb ANSI jest wyłączony, usługa Spark SQL ma dwa rodzaje słów kluczowych:
- Słowa kluczowe nieobstrzeżone: ta sama definicja co ta, gdy tryb ANSI jest włączony.
- Słowa kluczowe typu strict-non-reserved: ścisła wersja słów kluczowych innych niż zastrzeżone, których nie można używać jako aliasu tabeli.
Domyślnie spark.sql.ansi.enabled
jest to fałsz.
Poniżej znajduje się lista wszystkich słów kluczowych w usłudze Spark SQL.
Słowo kluczowe | Tryb ANSI usługi Spark SQL | Tryb domyślny spark SQL | SQL-2016 |
---|---|---|---|
ADD | non-reserved | non-reserved | non-reserved |
PO | non-reserved | non-reserved | non-reserved |
ALL | zastrzeżony | non-reserved | zastrzeżony |
ZMIENIANIE | non-reserved | non-reserved | zastrzeżony |
ZAWSZE | non-reserved | non-reserved | non-reserved |
ANALIZA | non-reserved | non-reserved | non-reserved |
ORAZ | zastrzeżony | non-reserved | zastrzeżony |
ANTY | non-reserved | strict-non-reserved | non-reserved |
DOWOLNE | zastrzeżony | non-reserved | zastrzeżony |
ARCHIWUM | non-reserved | non-reserved | non-reserved |
TABLICA | non-reserved | non-reserved | zastrzeżony |
AS | zastrzeżony | non-reserved | zastrzeżony |
ASC | non-reserved | non-reserved | non-reserved |
AT | non-reserved | non-reserved | zastrzeżony |
AUTORYZACJA | zastrzeżony | non-reserved | zastrzeżony |
BETWEEN | non-reserved | non-reserved | zastrzeżony |
OBIE | zastrzeżony | non-reserved | zastrzeżony |
WIADRO | non-reserved | non-reserved | non-reserved |
WIADRA | non-reserved | non-reserved | non-reserved |
BY | non-reserved | non-reserved | zastrzeżony |
PAMIĘĆ PODRĘCZNA | non-reserved | non-reserved | non-reserved |
KASKADA | non-reserved | non-reserved | non-reserved |
CASE | zastrzeżony | non-reserved | zastrzeżony |
CAST | zastrzeżony | non-reserved | zastrzeżony |
ZMIENIAĆ | non-reserved | non-reserved | non-reserved |
SPRAWDZIĆ | zastrzeżony | non-reserved | zastrzeżony |
JASNY | non-reserved | non-reserved | non-reserved |
KLASTER | non-reserved | non-reserved | non-reserved |
CLUSTERED | non-reserved | non-reserved | non-reserved |
CODEGEN | non-reserved | non-reserved | non-reserved |
COLLATE | zastrzeżony | non-reserved | zastrzeżony |
COLLECTION | non-reserved | non-reserved | non-reserved |
KOLUMNA | zastrzeżony | non-reserved | zastrzeżony |
KOLUMNY | non-reserved | non-reserved | non-reserved |
KOMENTARZ | non-reserved | non-reserved | non-reserved |
POPEŁNIĆ | non-reserved | non-reserved | zastrzeżony |
ZWARTY | non-reserved | non-reserved | non-reserved |
KOMPAKTOWANIE | non-reserved | non-reserved | non-reserved |
WYSTĄPIENIA OBLICZENIOWE | non-reserved | non-reserved | non-reserved |
ZŁĄCZYĆ | non-reserved | non-reserved | non-reserved |
OGRANICZENIE | zastrzeżony | non-reserved | zastrzeżony |
KOSZT | non-reserved | non-reserved | non-reserved |
CREATE | zastrzeżony | non-reserved | zastrzeżony |
KRZYŻ | zastrzeżony | strict-non-reserved | zastrzeżony |
SZEŚCIAN | non-reserved | non-reserved | zastrzeżony |
AKTUALNY | non-reserved | non-reserved | zastrzeżony |
CURRENT_DATE | zastrzeżony | non-reserved | zastrzeżony |
CURRENT_TIME | zastrzeżony | non-reserved | zastrzeżony |
CURRENT_TIMESTAMP | zastrzeżony | non-reserved | zastrzeżony |
CURRENT_USER | zastrzeżony | non-reserved | zastrzeżony |
DANE | non-reserved | non-reserved | non-reserved |
BAZA DANYCH | non-reserved | non-reserved | non-reserved |
BAZY DANYCH | non-reserved | non-reserved | non-reserved |
DAY | non-reserved | non-reserved | non-reserved |
WŁAŚCIWOŚCI DB | non-reserved | non-reserved | non-reserved |
ZDEFINIOWANY | non-reserved | non-reserved | non-reserved |
DELETE | non-reserved | non-reserved | zastrzeżony |
ROZDZIELANY | non-reserved | non-reserved | non-reserved |
DESC | non-reserved | non-reserved | non-reserved |
OPISAĆ | non-reserved | non-reserved | zastrzeżony |
DFS | non-reserved | non-reserved | non-reserved |
KATALOGÓW | non-reserved | non-reserved | non-reserved |
KATALOG | non-reserved | non-reserved | non-reserved |
ODMIENNY | zastrzeżony | non-reserved | zastrzeżony |
ROZDZIELAĆ | non-reserved | non-reserved | non-reserved |
DIV | non-reserved | non-reserved | nie jest słowem kluczowym |
DROP | non-reserved | non-reserved | zastrzeżony |
ELSE | zastrzeżony | non-reserved | zastrzeżony |
KONIEC | zastrzeżony | non-reserved | zastrzeżony |
UCIEC | zastrzeżony | non-reserved | zastrzeżony |
UCIEKŁ | non-reserved | non-reserved | non-reserved |
EXCEPT | zastrzeżony | strict-non-reserved | zastrzeżony |
WYMIENIAĆ | non-reserved | non-reserved | non-reserved |
EXISTS | non-reserved | non-reserved | zastrzeżony |
EXPLAIN | non-reserved | non-reserved | non-reserved |
EKSPORT | non-reserved | non-reserved | non-reserved |
EXTENDED | non-reserved | non-reserved | non-reserved |
ZEWNĘTRZNY | non-reserved | non-reserved | zastrzeżony |
EKSTRAKT | non-reserved | non-reserved | zastrzeżony |
FAŁSZ | zastrzeżony | non-reserved | zastrzeżony |
PRZYNOSIĆ | zastrzeżony | non-reserved | zastrzeżony |
POLA | non-reserved | non-reserved | non-reserved |
FILTRUJ | zastrzeżony | non-reserved | zastrzeżony |
FORMAT PLIKU | non-reserved | non-reserved | non-reserved |
FIRST | non-reserved | non-reserved | non-reserved |
FN | non-reserved | non-reserved | non-reserved |
NASTĘPUJĄCY | non-reserved | non-reserved | non-reserved |
FOR | zastrzeżony | non-reserved | zastrzeżony |
ZAGRANICZNY | zastrzeżony | non-reserved | zastrzeżony |
FORMAT | non-reserved | non-reserved | non-reserved |
SFORMATOWANY | non-reserved | non-reserved | non-reserved |
FROM | zastrzeżony | non-reserved | zastrzeżony |
PEŁNE | zastrzeżony | strict-non-reserved | zastrzeżony |
FUNCTION | non-reserved | non-reserved | zastrzeżony |
FUNKCJE | non-reserved | non-reserved | non-reserved |
GENEROWANE | non-reserved | non-reserved | non-reserved |
GLOBALNE | non-reserved | non-reserved | zastrzeżony |
GRANT | zastrzeżony | non-reserved | zastrzeżony |
DOTACJE | non-reserved | non-reserved | non-reserved |
GRUPA | zastrzeżony | non-reserved | zastrzeżony |
GRUPOWANIE | non-reserved | non-reserved | zastrzeżony |
HAVING | zastrzeżony | non-reserved | zastrzeżony |
GODZINA | non-reserved | non-reserved | non-reserved |
IF | non-reserved | non-reserved | nie jest słowem kluczowym |
IGNORE | non-reserved | non-reserved | non-reserved |
IMPORT | non-reserved | non-reserved | non-reserved |
IN | zastrzeżony | non-reserved | zastrzeżony |
INDEKS | non-reserved | non-reserved | non-reserved |
INDEKSY | non-reserved | non-reserved | non-reserved |
WEWNĘTRZNY | zastrzeżony | strict-non-reserved | zastrzeżony |
INPATH | non-reserved | non-reserved | non-reserved |
INPUTFORMAT | non-reserved | non-reserved | non-reserved |
INSERT | non-reserved | non-reserved | zastrzeżony |
INTERSECT | zastrzeżony | strict-non-reserved | zastrzeżony |
INTERWAŁ | non-reserved | non-reserved | zastrzeżony |
INTO | zastrzeżony | non-reserved | zastrzeżony |
IS | zastrzeżony | non-reserved | zastrzeżony |
ELEMENTY | non-reserved | non-reserved | non-reserved |
JOIN | zastrzeżony | strict-non-reserved | zastrzeżony |
KEY | non-reserved | non-reserved | non-reserved |
KLUCZE | non-reserved | non-reserved | non-reserved |
LAST | non-reserved | non-reserved | non-reserved |
BOCZNY | zastrzeżony | strict-non-reserved | zastrzeżony |
LENIWY | non-reserved | non-reserved | non-reserved |
CZOŁOWY | zastrzeżony | non-reserved | zastrzeżony |
LEFT | zastrzeżony | strict-non-reserved | zastrzeżony |
LIKE | non-reserved | non-reserved | zastrzeżony |
ILIKE | non-reserved | non-reserved | non-reserved |
LIMIT | non-reserved | non-reserved | non-reserved |
LINIE | non-reserved | non-reserved | non-reserved |
LISTA | non-reserved | non-reserved | non-reserved |
ŁADUNEK | non-reserved | non-reserved | non-reserved |
LOCAL | non-reserved | non-reserved | zastrzeżony |
LOKALIZACJA | non-reserved | non-reserved | non-reserved |
ZAMEK | non-reserved | non-reserved | non-reserved |
BLOKAD | non-reserved | non-reserved | non-reserved |
LOGICZNY | non-reserved | non-reserved | non-reserved |
MACRO | non-reserved | non-reserved | non-reserved |
MAPA | non-reserved | non-reserved | non-reserved |
DOPASOWANE | non-reserved | non-reserved | non-reserved |
POŁĄCZYĆ | non-reserved | non-reserved | non-reserved |
MINUTA | non-reserved | non-reserved | non-reserved |
MINUS | non-reserved | strict-non-reserved | non-reserved |
MONTH | non-reserved | non-reserved | non-reserved |
MSCK | non-reserved | non-reserved | non-reserved |
NAMESPACE | non-reserved | non-reserved | non-reserved |
PRZESTRZENIE NAZW | non-reserved | non-reserved | non-reserved |
NATURALNY | zastrzeżony | strict-non-reserved | zastrzeżony |
NIE | non-reserved | non-reserved | zastrzeżony |
NIE | zastrzeżony | non-reserved | zastrzeżony |
NULL | zastrzeżony | non-reserved | zastrzeżony |
NULL — Wartości | non-reserved | non-reserved | non-reserved |
OF | non-reserved | non-reserved | zastrzeżony |
ON | zastrzeżony | strict-non-reserved | zastrzeżony |
TYLKO | zastrzeżony | non-reserved | zastrzeżony |
OPTION | non-reserved | non-reserved | non-reserved |
OPTIONS | non-reserved | non-reserved | non-reserved |
LUB | zastrzeżony | non-reserved | zastrzeżony |
PORZĄDEK | zastrzeżony | non-reserved | zastrzeżony |
Na zewnątrz | non-reserved | non-reserved | zastrzeżony |
ZEWNĘTRZNE | zastrzeżony | non-reserved | zastrzeżony |
FORMAT WYJŚCIOWY | non-reserved | non-reserved | non-reserved |
NAD | non-reserved | non-reserved | non-reserved |
OVERLAPS | zastrzeżony | non-reserved | zastrzeżony |
POKRYCIE | non-reserved | non-reserved | non-reserved |
ZASTĄPIĆ | non-reserved | non-reserved | non-reserved |
PARTYCJA | non-reserved | non-reserved | zastrzeżony |
PARTYCJONOWANA | non-reserved | non-reserved | non-reserved |
PARTYCJE | non-reserved | non-reserved | non-reserved |
PROCENT | non-reserved | non-reserved | non-reserved |
OŚ | non-reserved | non-reserved | non-reserved |
UMIESZCZENIE | non-reserved | non-reserved | non-reserved |
POZYCJA | non-reserved | non-reserved | zastrzeżony |
POPRZEDZAJĄCY | non-reserved | non-reserved | non-reserved |
PODSTAWOWE | zastrzeżony | non-reserved | zastrzeżony |
PODMIOTÓW | non-reserved | non-reserved | non-reserved |
WŁAŚCIWOŚCI | non-reserved | non-reserved | non-reserved |
PURGE | non-reserved | non-reserved | non-reserved |
KWALIFIKUJĄ SIĘ | zastrzeżony | non-reserved | zastrzeżony |
ZAPYTANIE | non-reserved | non-reserved | non-reserved |
ZAKRES | non-reserved | non-reserved | zastrzeżony |
ODBIORCA | non-reserved | non-reserved | non-reserved |
ADRESATÓW | non-reserved | non-reserved | non-reserved |
RECORDREADER | non-reserved | non-reserved | non-reserved |
AUTOR REKORDÓW | non-reserved | non-reserved | non-reserved |
ODZYSKAĆ | non-reserved | non-reserved | non-reserved |
ZMNIEJSZYĆ | non-reserved | non-reserved | non-reserved |
DOKUMENTACJA | zastrzeżony | non-reserved | zastrzeżony |
REFRESH | non-reserved | non-reserved | non-reserved |
REGEXP | non-reserved | non-reserved | nie jest słowem kluczowym |
USUŃ | non-reserved | non-reserved | non-reserved |
RENAME | non-reserved | non-reserved | non-reserved |
NAPRAWA | non-reserved | non-reserved | non-reserved |
REPLACE | non-reserved | non-reserved | non-reserved |
RESET | non-reserved | non-reserved | non-reserved |
SZACUNEK | non-reserved | non-reserved | non-reserved |
OGRANICZAĆ | non-reserved | non-reserved | non-reserved |
REVOKE | non-reserved | non-reserved | zastrzeżony |
RIGHT | zastrzeżony | strict-non-reserved | zastrzeżony |
RLIKE | non-reserved | non-reserved | non-reserved |
ROLA | non-reserved | non-reserved | non-reserved |
RÓL | non-reserved | non-reserved | non-reserved |
WYCOFYWANIE | non-reserved | non-reserved | zastrzeżony |
ZESTAWIENIE | non-reserved | non-reserved | zastrzeżony |
ROW | non-reserved | non-reserved | zastrzeżony |
WIERSZE | non-reserved | non-reserved | zastrzeżony |
SCHEMAT | non-reserved | non-reserved | non-reserved |
SCHEMATY | non-reserved | non-reserved | nie jest słowem kluczowym |
SEKUNDA | non-reserved | non-reserved | non-reserved |
SELECT | zastrzeżony | non-reserved | zastrzeżony |
PÓŁ | non-reserved | strict-non-reserved | non-reserved |
ODDZIELONE | non-reserved | non-reserved | non-reserved |
SERDE | non-reserved | non-reserved | non-reserved |
SERDEPROPERTIES | non-reserved | non-reserved | non-reserved |
SESSION_USER | zastrzeżony | non-reserved | zastrzeżony |
SET | non-reserved | non-reserved | zastrzeżony |
USTAWIA | non-reserved | non-reserved | non-reserved |
UDOSTĘPNIJ | non-reserved | non-reserved | non-reserved |
UDZIAŁY | non-reserved | non-reserved | non-reserved |
POKAZAĆ | non-reserved | non-reserved | non-reserved |
PRZEKRZYWIONY | non-reserved | non-reserved | non-reserved |
TROCHĘ | zastrzeżony | non-reserved | zastrzeżony |
RODZAJ | non-reserved | non-reserved | non-reserved |
SORTOWANE | non-reserved | non-reserved | non-reserved |
ROZPOCZNIJ | non-reserved | non-reserved | zastrzeżony |
STATYSTYKA | non-reserved | non-reserved | non-reserved |
PRZECHOWYWANE | non-reserved | non-reserved | non-reserved |
STRATIFY | non-reserved | non-reserved | non-reserved |
STRUCT | non-reserved | non-reserved | non-reserved |
SUBSTR | non-reserved | non-reserved | non-reserved |
SUBSTRING | non-reserved | non-reserved | non-reserved |
SYNCHRONIZOWAĆ | non-reserved | non-reserved | non-reserved |
TABELA | zastrzeżony | non-reserved | zastrzeżony |
TABELE | non-reserved | non-reserved | non-reserved |
TABLEAMPLE | non-reserved | non-reserved | zastrzeżony |
TBLPROPERTIES | non-reserved | non-reserved | non-reserved |
Najwyższa temp | non-reserved | non-reserved | nie jest słowem kluczowym |
TYMCZASOWY | non-reserved | non-reserved | non-reserved |
ZAKOŃCZONE | non-reserved | non-reserved | non-reserved |
THEN | zastrzeżony | non-reserved | zastrzeżony |
TIME | zastrzeżony | non-reserved | zastrzeżony |
TO | zastrzeżony | non-reserved | zastrzeżony |
DOTYK | non-reserved | non-reserved | non-reserved |
KOŃCOWE | zastrzeżony | non-reserved | zastrzeżony |
TRANSAKCJA | non-reserved | non-reserved | non-reserved |
TRANSAKCJI | non-reserved | non-reserved | non-reserved |
PRZEKSZTAŁCAĆ | non-reserved | non-reserved | non-reserved |
TRIM | non-reserved | non-reserved | non-reserved |
PRAWDA | non-reserved | non-reserved | zastrzeżony |
OBCIĄĆ | non-reserved | non-reserved | zastrzeżony |
TRY_CAST | non-reserved | non-reserved | non-reserved |
TYP | non-reserved | non-reserved | non-reserved |
UNARCHIVE | non-reserved | non-reserved | non-reserved |
BEZGRANICZNY | non-reserved | non-reserved | non-reserved |
UNCACHE | non-reserved | non-reserved | non-reserved |
UNION | zastrzeżony | strict-non-reserved | zastrzeżony |
NIEPOWTARZALNY | zastrzeżony | non-reserved | zastrzeżony |
NIEZNANY | zastrzeżony | non-reserved | zastrzeżony |
ODBLOKOWAĆ | non-reserved | non-reserved | non-reserved |
UNSET | non-reserved | non-reserved | non-reserved |
UPDATE | non-reserved | non-reserved | zastrzeżony |
USE | non-reserved | non-reserved | non-reserved |
UŻYTKOWNIK | zastrzeżony | non-reserved | zastrzeżony |
USING | zastrzeżony | strict-non-reserved | zastrzeżony |
WARTOŚCI | non-reserved | non-reserved | zastrzeżony |
WIDOK | non-reserved | non-reserved | non-reserved |
WIDOKI | non-reserved | non-reserved | non-reserved |
Kiedy… | zastrzeżony | non-reserved | zastrzeżony |
WHERE | zastrzeżony | non-reserved | zastrzeżony |
OKNO | non-reserved | non-reserved | zastrzeżony |
WITH | zastrzeżony | non-reserved | zastrzeżony |
YEAR | non-reserved | non-reserved | non-reserved |
STREFA | non-reserved | non-reserved | non-reserved |