Sdílet prostřednictvím


Dodržování předpisů ANSI v Databricks Runtime

Platí pro: zaškrtnutí označeného ano Databricks Runtime

Tento článek popisuje dodržování předpisů ANSI v Databricks Runtime. Režim ANSI v Databricks SQL najdete v tématu ANSI_MODE.

Spark SQL má dvě možnosti, jak podporovat dodržování předpisů se standardem ANSI SQL: spark.sql.ansi.enabled a spark.sql.storeAssignmentPolicy.

Pokud spark.sql.ansi.enabled je nastavená hodnota true, Spark SQL místo toho, aby byl kompatibilní s Hivem, používá dialekt kompatibilní se standardem ANSI. Spark například vyvolá výjimku za běhu místo vrácení výsledků s hodnotou null, pokud jsou vstupy operátoru NEBO funkce SQL neplatné. Některé funkce dialektu ANSI nemusí být přímo ze standardu ANSI SQL, ale jejich chování odpovídá stylu ANSI SQL.

Spark SQL má navíc nezávislou možnost řídit implicitní chování přetypování při ukládání řádků do tabulky. Chování přetypování je definováno jako pravidla přiřazení úložiště ve standardu.

Pokud spark.sql.storeAssignmentPolicy je nastavená hodnota ANSI, Spark SQL splňuje pravidla přiřazení úložiště ANSI. Jedná se o samostatnou konfiguraci, protože její výchozí hodnota je ANSI, zatímco konfigurace spark.sql.ansi.enabled je ve výchozím nastavení zakázaná.

Následující tabulka shrnuje chování:

Název vlastnosti Výchozí Význam
spark.sql.ansi.enabled false (nepravda) Pokud je hodnota true, Spark se pokusí splnit specifikaci ANSI SQL:

* Vyvolá výjimku za běhu, pokud dojde k přetečení v jakékoli operaci s celočíselnou nebo desetinnou čárkou.
* Zakáže použití vyhrazených klíčových slov ANSI SQL jako identifikátorů v analyzátoru SQL.
spark.sql.storeAssignmentPolicy ANSI Při ukládání hodnoty do sloupce s jiným datovým typem Provede Spark převod typu. Existují tři zásady pro pravidla převodu typů: ANSI, legacya strict.

* ANSI: Spark provede převod typu podle ANSI SQL. V praxi je chování většinou stejné jako PostgreSQL. Nepovoluje určité nerozumné převody typu, jako je převod řetězce na hodnotu int nebo double na logickou hodnotu.
* legacy: Spark umožňuje převod typu tak dlouho, dokud se jedná o platné přetypování, což je velmi volné. Například převod řetězce na hodnotu int nebo double na logickou hodnotu je povolený. Je to také jediné chování Ve Sparku 2.x a je kompatibilní s Hivem.
* strict: Spark neumožňuje jakoukoli možnou ztrátu přesnosti nebo zkrácení dat v převodu typu, například převod double na int nebo decimal na double není povolený.

Následující pododdíly představují změny chování v aritmetických operacích, převodech typů a parsování SQL při povolení režimu ANSI. Pro převody typů ve Spark SQL existují tři druhy a tento článek je představí jeden po druhém: přetypování, uložení přiřazení a převod typu.

Aritmetické operace

Ve Spark SQL nejsou aritmetické operace prováděné u číselných typů (s výjimkou desetinných míst) ve výchozím nastavení kontrolovány pro přetečení. To znamená, že v případě, že operace způsobí přetečení, je výsledek stejný s odpovídající operací v programu Java nebo Scala (například pokud je součet 2 celých čísel vyšší než maximální hodnota reprezentovatelná, výsledek je záporné číslo). Na druhou stranu Spark SQL vrátí hodnotu null pro přetečení desetinných míst. Pokud spark.sql.ansi.enabled je nastavená true hodnota a přetečení probíhá v numerických a intervalových aritmetických operacích, vyvolá za běhu aritmetickou výjimku.

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

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

Změna typu

Pokud spark.sql.ansi.enabled je nastavena na true, explicitní přetypování syntaxe CAST vyvolá výjimku modulu runtime pro neplatné vzorce přetypování definované ve standardu, například přetypování z řetězce na celé číslo.

Klauzule CAST režimu Spark ANSI se řídí pravidly syntaxe oddílu 6.13 "specifikace přetypování" ve standardu ISO/IEC 9075-2:2011 Informační technologie – databázové jazyky – SQL – část 2: Foundation (SQL/Foundation) s výjimkou speciálních jednoduchých převodů typů, které jsou zakázány podle standardu ANSI:

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

Platné kombinace zdrojového a cílového datového typu ve výrazu CAST jsou uvedeny v následující tabulce. "Y" označuje, že kombinace je syntakticky platná bez omezení a "N" označuje, že kombinace není platná.

SourceTarget Číslo Řetězcové Datum Časové razítko Interval Logická hodnota Binární Pole Mapovat Struktura
Číslo Y Y N N N Y N N N N
String Y Y Y Y Y Y Y N N N
Datum N Y Y Y N N N N N N
Časové razítko N Y Y Y N N N N N N
Interval N Y N N Y N N N N N
Logická hodnota Y Y N N N Y N N N N
Binární Y N N N N N Y N N N
Pole N N N N N N N Y N N
Mapovat 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

Uložení přiřazení

Výchozí nastavení spark.sql.storeAssignmentPolicy ANSIje . Pokud se při tomto nastavení datové typy zdrojových hodnot neshodují s cílovými typy sloupců, Spark SQL automaticky přidá klauzule ANSI CAST do příkazu INSERT. Během vkládání tabulek v rámci této zásady Spark vyhledá a odmítne neplatné přetypování a vyvolá výjimku, která zajistí kvalitu dat. To znamená, že pokud pokus o vložení selže kvůli neshodě typu, nebude mít za následek, že se do tabulky částečně zapisují žádná data.

Příklady:

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

Tyto příklady ukazují Spark SQL, který brání vložení nekompatibilních dat, a tím zachovává integritu dat.

Pokud je nastavená hodnota spark.sql.storeAssignmentPolicy LEGACY, Spark SQL se vrátí k chování, které přebíná až do Sparku 2.x. V tomto režimu místo použití přetypování ANSI použije starší operace CAST. V rámci této zásady neplatné přetypování během vkládání tabulky způsobí vložení hodnot NULL nebo nesprávných hodnot místo vyvolání výjimky. Příklady:

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

Převod typu

Povýšení a priorita typu

Pokud spark.sql.ansi.enabled je nastavená hodnota true, Spark SQL používá několik pravidel, která řídí způsob řešení konfliktů mezi datovými typy. Jádrem tohoto řešení konfliktů je seznam priorit typů, který definuje, jestli lze hodnoty daného datového typu implicitně upřednostnět na jiný datový typ.

Datový typ priority list(od nejužšího po nejširší)
Byte Bajt - Krátký ->> Int -> Dlouhý -> Desetinné číslo -> Float* -> Double
Krátké Short - Int ->> Long -> Decimal-> Float* -> Double
Int Int - Long ->> Decimal -> Float* -> Double
Dlouhé celé číslo Long - Decimal ->> Float* -> Double
Desetinné číslo Desetinné číslo -> Float* -> Double
Float Plovák –> double
Hodnota s dvojitou přesností Hodnota s dvojitou přesností
Datum Datum –> časové razítko
Časové razítko Časové razítko
String Řetězcové
Binární Binární
Logické Logické
Interval Interval
Mapovat Mapa**
Pole Pole**
Struktura Struct**
  • Pro nejméně běžné rozlišení typu float se přeskočí, aby nedošlo ke ztrátě přesnosti.

** U komplexního typu se pravidlo priority rekurzivně vztahuje na její prvky komponent.

Speciální pravidla platí pro typ string a netypovou hodnotu NULL. Hodnotu NULL lze zvýšit na jakýkoli jiný typ, zatímco řetězec lze zvýšit na jakýkoli jednoduchý datový typ.

Toto je grafické znázornění seznamu priorit jako směrovaný strom: Grafické znázornění pravidel priority

Nejméně běžné řešení typů

Nejmenší společný typ ze sady typů je nejužší typ dostupný ze seznamu priorit všemi prvky sady typů.

Nejméně běžné rozlišení typu se používá k:

  • Rozhodněte se, jestli je možné vyvolat funkci, která očekává parametr typu, pomocí argumentu užšího typu.
  • Odvozujte typ argumentu pro funkce, které očekávají typ sdíleného argumentu pro více parametrů, například shod, nejméně nebo největší.
  • Odvozujte typy operandů pro operátory, jako jsou aritmetické operace nebo porovnání.
  • Odvozujte typ výsledku pro výrazy, jako je výraz velká a malá písmena.
  • Odvození elementu, klíče nebo hodnotových typů pro maticové a mapové konstruktory

Pokud se nejméně běžný typ přeloží na FLOAT, použijí se speciální pravidla. Pokud je některý z typů TYPU INT, BIGINT nebo DECIMAL, nejméně společný typ se vloží do double, aby nedošlo ke ztrátě číslic.

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

Funkce SQL

Chování některých funkcí SQL se může lišit v režimu ANSI (spark.sql.ansi.enabled=true).

  • size: Tato funkce vrátí hodnotu null pro vstup null v režimu ANSI.
  • element_at:
    • Tato funkce vyvolá výjimku ArrayIndexOutOfBoundsException , pokud používáte neplatné indexy.
    • Tato funkce vyvolá NoSuchElementException výjimku, pokud klíč v mapě neexistuje.
  • elt: Tato funkce vyvolá výjimku ArrayIndexOutOfBoundsException , pokud používáte neplatné indexy.
  • make_date: Tato funkce selže s výjimkou, pokud je datum výsledku neplatné.
  • make_timestamp: Tato funkce selže s výjimkou, pokud je časové razítko výsledku neplatné.
  • make_interval: Tato funkce selže s výjimkou, pokud je interval výsledku neplatný.
  • next_day: Tato funkce vyvolá IllegalArgumentException , pokud vstup není platný den v týdnu.
  • parse_url: Tato funkce vyvolá, IllegalArgumentException pokud vstupní řetězec není platnou adresou URL.
  • to_date: Tato funkce selže s výjimkou, pokud vstupní řetězec nelze analyzovat nebo je řetězec vzoru neplatný.
  • to_timestamp: Tato funkce selže s výjimkou, pokud vstupní řetězec nelze analyzovat nebo je řetězec vzoru neplatný.
  • to_unix_timestamp: Tato funkce selže s výjimkou, pokud vstupní řetězec nelze analyzovat nebo je řetězec vzoru neplatný.
  • unix_timestamp: Tato funkce selže s výjimkou, pokud vstupní řetězec nelze analyzovat nebo je řetězec vzoru neplatný.

Operátory SQL

Chování některých operátorů SQL se může lišit v režimu ANSI (spark.sql.ansi.enabled=true).

  • array_col[index]: Tento operátor vyvolá, ArrayIndexOutOfBoundsException pokud používá neplatné indexy.
  • map_col[key]: Tento operátor vyvolá, NoSuchElementException pokud klíč v mapě neexistuje.
  • CAST(string_col AS TIMESTAMP): Tento operátor selže s výjimkou, pokud vstupní řetězec nelze analyzovat.
  • CAST(string_col AS DATE): Tento operátor selže s výjimkou, pokud vstupní řetězec nelze analyzovat.

Užitečné funkce pro režim ANSI

Když je režim ANSI zapnutý, vyvolá výjimky pro neplatné operace. K potlačení těchto výjimek můžete použít následující funkce SQL.

  • try_cast: shodná s tím rozdílem CAST, že vrací NULL výsledek místo vyvolání výjimky při chybě za běhu.
  • try_add: shodný s operátorem +sčítání , s tím rozdílem, že vrátí NULL výsledek místo vyvolání výjimky při přetečení celočíselné hodnoty.
  • try_divide: shodný s operátorem /dělení s tím rozdílem, že vrátí NULL výsledek místo vyvolání výjimky při dělení 0.

Klíčová slova SQL

Pokud spark.sql.ansi.enabled je true, Spark SQL použije analyzátor režimu ANSI. V tomto režimu má Spark SQL dva druhy klíčových slov:

  • Vyhrazená klíčová slova: Vyhrazená klíčová slova, která se nedají použít jako identifikátory pro tabulku, zobrazení, sloupec, funkci, alias atd.
  • Nezařazený klíčová slova: Klíčová slova, která mají zvláštní význam pouze v konkrétních kontextech a lze ji použít jako identifikátory v jiných kontextech. Jedná se například EXPLAIN SELECT ... o příkaz, ale funkci EXPLAIN je možné použít jako identifikátory na jiných místech.

Pokud je režim ANSI zakázaný, Spark SQL má dva druhy klíčových slov:

  • Nezaplacená klíčová slova: Stejná definice jako ta, která je povolená v režimu ANSI.
  • Klíčová slova typu Strict-Non-reserved: Striktní verze nevyhraděných klíčových slov, která nelze použít jako alias tabulky.

Ve výchozím nastavení spark.sql.ansi.enabled je false.

Níže je seznam všech klíčových slov ve Spark SQL.

Klíčové slovo Režim SPARK SQL ANSI Výchozí režim Spark SQL SQL-2016
ADD nezařazený nezařazený nezařazený
PO nezařazený nezařazený nezařazený
ALL rezervovaný nezařazený rezervovaný
ZMĚNA nezařazený nezařazený rezervovaný
VŽDY nezařazený nezařazený nezařazený
ANALÝZA nezařazený nezařazený nezařazený
A rezervovaný nezařazený rezervovaný
ANTI nezařazený strict-non-reserved nezařazený
LIBOVOLNÉ rezervovaný nezařazený rezervovaný
ARCHIVOVAT nezařazený nezařazený nezařazený
POLE nezařazený nezařazený rezervovaný
AS rezervovaný nezařazený rezervovaný
ASC nezařazený nezařazený nezařazený
AT nezařazený nezařazený rezervovaný
OPRÁVNĚNÍ rezervovaný nezařazený rezervovaný
BETWEEN nezařazený nezařazený rezervovaný
OBA rezervovaný nezařazený rezervovaný
KBELÍK nezařazený nezařazený nezařazený
VĚDRA nezařazený nezařazený nezařazený
BY nezařazený nezařazený rezervovaný
MEZIPAMĚŤ nezařazený nezařazený nezařazený
KASKÁDA nezařazený nezařazený nezařazený
CASE rezervovaný nezařazený rezervovaný
CAST rezervovaný nezařazený rezervovaný
VYMĚNIT nezařazený nezařazený nezařazený
KONTROLOVAT rezervovaný nezařazený rezervovaný
JASNÝ nezařazený nezařazený nezařazený
SHLUK nezařazený nezařazený nezařazený
CLUSTERED nezařazený nezařazený nezařazený
CODEGEN nezařazený nezařazený nezařazený
KOLACIONOVAT rezervovaný nezařazený rezervovaný
COLLECTION nezařazený nezařazený nezařazený
SLOUPEC rezervovaný nezařazený rezervovaný
SLOUPCE nezařazený nezařazený nezařazený
COMMENT nezařazený nezařazený nezařazený
SPÁCHAT nezařazený nezařazený rezervovaný
KOMPAKTNÍ nezařazený nezařazený nezařazený
KOMPRIMACE nezařazený nezařazený nezařazený
COMPUTE nezařazený nezařazený nezařazený
ZŘETĚZIT nezařazený nezařazený nezařazený
OMEZENÍ rezervovaný nezařazený rezervovaný
NÁKLADY nezařazený nezařazený nezařazený
CREATE rezervovaný nezařazený rezervovaný
KŘÍŽ rezervovaný strict-non-reserved rezervovaný
KRYCHLE nezařazený nezařazený rezervovaný
SOUČASNÝ nezařazený nezařazený rezervovaný
CURRENT_DATE rezervovaný nezařazený rezervovaný
CURRENT_TIME rezervovaný nezařazený rezervovaný
CURRENT_TIMESTAMP rezervovaný nezařazený rezervovaný
CURRENT_USER rezervovaný nezařazený rezervovaný
DATA nezařazený nezařazený nezařazený
DATABÁZE nezařazený nezařazený nezařazený
DATABÁZE nezařazený nezařazený nezařazený
DAY nezařazený nezařazený nezařazený
DBPROPERTIES nezařazený nezařazený nezařazený
DEFINOVANÝ nezařazený nezařazený nezařazený
DELETE nezařazený nezařazený rezervovaný
ODDĚLENÝ nezařazený nezařazený nezařazený
DESC nezařazený nezařazený nezařazený
POPSAT nezařazený nezařazený rezervovaný
Systém souborů DFS nezařazený nezařazený nezařazený
ADRESÁŘE nezařazený nezařazený nezařazený
ADRESÁŘ nezařazený nezařazený nezařazený
ZŘETELNÝ rezervovaný nezařazený rezervovaný
DISTRIBUOVAT nezařazený nezařazený nezařazený
DIV nezařazený nezařazený nikoli klíčové slovo
DROP nezařazený nezařazený rezervovaný
ELSE rezervovaný nezařazený rezervovaný
END rezervovaný nezařazený rezervovaný
UNIKNOUT rezervovaný nezařazený rezervovaný
UPRCHL nezařazený nezařazený nezařazený
EXCEPT rezervovaný strict-non-reserved rezervovaný
VÝMĚNA nezařazený nezařazený nezařazený
EXISTS nezařazený nezařazený rezervovaný
EXPLAIN nezařazený nezařazený nezařazený
VÝVOZ nezařazený nezařazený nezařazený
EXTENDED nezařazený nezařazený nezařazený
EXTERNÍ nezařazený nezařazený rezervovaný
EXTRAHOVAT nezařazený nezařazený rezervovaný
FALSE rezervovaný nezařazený rezervovaný
PŘINÉST rezervovaný nezařazený rezervovaný
POLE nezařazený nezařazený nezařazený
FILTR rezervovaný nezařazený rezervovaný
FILEFORMAT nezařazený nezařazený nezařazený
FIRST nezařazený nezařazený nezařazený
FN nezařazený nezařazený nezařazený
NÁSLEDUJÍCÍ nezařazený nezařazený nezařazený
FOR rezervovaný nezařazený rezervovaný
ZAHRANIČNÍ rezervovaný nezařazený rezervovaný
FORMÁT nezařazený nezařazený nezařazený
NAFORMÁTOVANÝ nezařazený nezařazený nezařazený
FROM rezervovaný nezařazený rezervovaný
PLNÝ rezervovaný strict-non-reserved rezervovaný
FUNCTION nezařazený nezařazený rezervovaný
FUNKCE nezařazený nezařazený nezařazený
GENEROVANÝ nezařazený nezařazený nezařazený
GLOBÁLNÍ nezařazený nezařazený rezervovaný
GRANT rezervovaný nezařazený rezervovaný
UDĚLUJE nezařazený nezařazený nezařazený
GROUP rezervovaný nezařazený rezervovaný
SESKUPENÍ nezařazený nezařazený rezervovaný
HAVING rezervovaný nezařazený rezervovaný
HODINA nezařazený nezařazený nezařazený
IF nezařazený nezařazený nikoli klíčové slovo
IGNORE nezařazený nezařazený nezařazený
DOVOZ nezařazený nezařazený nezařazený
IN rezervovaný nezařazený rezervovaný
INDEX nezařazený nezařazený nezařazený
INDEXY nezařazený nezařazený nezařazený
VNITŘNÍ rezervovaný strict-non-reserved rezervovaný
INPATH nezařazený nezařazený nezařazený
INPUTFORMAT nezařazený nezařazený nezařazený
INSERT nezařazený nezařazený rezervovaný
INTERSECT rezervovaný strict-non-reserved rezervovaný
INTERVAL nezařazený nezařazený rezervovaný
INTO rezervovaný nezařazený rezervovaný
IS rezervovaný nezařazený rezervovaný
POLOŽKY nezařazený nezařazený nezařazený
JOIN rezervovaný strict-non-reserved rezervovaný
KEY nezařazený nezařazený nezařazený
KLÍČE nezařazený nezařazený nezařazený
LAST nezařazený nezařazený nezařazený
BOČNÍ rezervovaný strict-non-reserved rezervovaný
LÍNÝ nezařazený nezařazený nezařazený
VEDOUCÍ rezervovaný nezařazený rezervovaný
LEFT rezervovaný strict-non-reserved rezervovaný
LIKE nezařazený nezařazený rezervovaný
ILIKE nezařazený nezařazený nezařazený
LIMIT nezařazený nezařazený nezařazený
ŘÁDKY nezařazený nezařazený nezařazený
SEZNAM nezařazený nezařazený nezařazený
NÁKLAD nezařazený nezařazený nezařazený
LOCAL nezařazený nezařazený rezervovaný
UMÍSTĚNÍ nezařazený nezařazený nezařazený
ZAMKNOUT nezařazený nezařazený nezařazený
ZÁMKY nezařazený nezařazený nezařazený
LOGICKÝ nezařazený nezařazený nezařazený
MACRO nezařazený nezařazený nezařazený
MAPA nezařazený nezařazený nezařazený
SLÍCOVANÝ nezařazený nezařazený nezařazený
SLOUČIT nezařazený nezařazený nezařazený
MINUTA nezařazený nezařazený nezařazený
MINUS nezařazený strict-non-reserved nezařazený
MONTH nezařazený nezařazený nezařazený
MSCK nezařazený nezařazený nezařazený
OBOR NÁZVŮ nezařazený nezařazený nezařazený
OBORY NÁZVŮ nezařazený nezařazený nezařazený
PŘIROZENÝ rezervovaný strict-non-reserved rezervovaný
NE nezařazený nezařazený rezervovaný
NOT rezervovaný nezařazený rezervovaný
NULL rezervovaný nezařazený rezervovaný
NULLS nezařazený nezařazený nezařazený
OF nezařazený nezařazený rezervovaný
ON rezervovaný strict-non-reserved rezervovaný
POUZE rezervovaný nezařazený rezervovaný
OPTION nezařazený nezařazený nezařazený
OPTIONS nezařazený nezařazený nezařazený
NEBO rezervovaný nezařazený rezervovaný
OBJEDNÁVKA rezervovaný nezařazený rezervovaný
VEN nezařazený nezařazený rezervovaný
VNĚJŠÍ rezervovaný nezařazený rezervovaný
OUTPUTFORMAT nezařazený nezařazený nezařazený
PŘES nezařazený nezařazený nezařazený
OVERLAPS rezervovaný nezařazený rezervovaný
PŘEKRYTÍ nezařazený nezařazený nezařazený
PŘEPSAT nezařazený nezařazený nezařazený
ODDÍL nezařazený nezařazený rezervovaný
SEGMENTOVANÝ nezařazený nezařazený nezařazený
ODDÍLY nezařazený nezařazený nezařazený
PROCENTO nezařazený nezařazený nezařazený
ČEP nezařazený nezařazený nezařazený
UMISŤOVÁNÍ nezařazený nezařazený nezařazený
POSTAVENÍ nezařazený nezařazený rezervovaný
PŘEDCHOZÍ nezařazený nezařazený nezařazený
PRIMÁRNÍ rezervovaný nezařazený rezervovaný
PRINCIPY nezařazený nezařazený nezařazený
VLASTNOSTI nezařazený nezařazený nezařazený
PURGE nezařazený nezařazený nezařazený
KVALIFIKOVAT rezervovaný nezařazený rezervovaný
DOTAZ nezařazený nezařazený nezařazený
ROZMEZÍ nezařazený nezařazený rezervovaný
PŘÍJEMCE nezařazený nezařazený nezařazený
PŘÍJEMCI nezařazený nezařazený nezařazený
RECORDREADER nezařazený nezařazený nezařazený
RECORDWRITER nezařazený nezařazený nezařazený
ZOTAVIT SE nezařazený nezařazený nezařazený
ZMENŠIT nezařazený nezařazený nezařazený
ODKAZY rezervovaný nezařazený rezervovaný
REFRESH nezařazený nezařazený nezařazený
REGEXP nezařazený nezařazený nikoli klíčové slovo
ODEBRAT nezařazený nezařazený nezařazený
RENAME nezařazený nezařazený nezařazený
OPRAVIT nezařazený nezařazený nezařazený
REPLACE nezařazený nezařazený nezařazený
RESET nezařazený nezařazený nezařazený
RESPEKT nezařazený nezařazený nezařazený
OMEZIT nezařazený nezařazený nezařazený
REVOKE nezařazený nezařazený rezervovaný
RIGHT rezervovaný strict-non-reserved rezervovaný
RLIKE nezařazený nezařazený nezařazený
ROLE nezařazený nezařazený nezařazený
ROLE nezařazený nezařazený nezařazený
REDUKCE nezařazený nezařazený rezervovaný
KUMULATIVNÍ AKTUALIZACE nezařazený nezařazený rezervovaný
ROW nezařazený nezařazený rezervovaný
řádky nezařazený nezařazený rezervovaný
SCHÉMA nezařazený nezařazený nezařazený
SCHÉMATA nezařazený nezařazený nikoli klíčové slovo
VTEŘINA nezařazený nezařazený nezařazený
VÝBĚR rezervovaný nezařazený rezervovaný
POLO nezařazený strict-non-reserved nezařazený
ODDĚLEN nezařazený nezařazený nezařazený
SERDE nezařazený nezařazený nezařazený
SERDEPROPERTIES nezařazený nezařazený nezařazený
SESSION_USER rezervovaný nezařazený rezervovaný
SET nezařazený nezařazený rezervovaný
NASTAVUJE nezařazený nezařazený nezařazený
SDÍLET nezařazený nezařazený nezařazený
SDÍLÍ nezařazený nezařazený nezařazený
UKÁZAT nezařazený nezařazený nezařazený
ZKOSENÝ nezařazený nezařazený nezařazený
NĚJAKÝ rezervovaný nezařazený rezervovaný
TŘÍDIT nezařazený nezařazený nezařazený
SEŘAZENÝ nezařazený nezařazený nezařazený
START nezařazený nezařazený rezervovaný
STATISTIKA nezařazený nezařazený nezařazený
ULOŽENÝ nezařazený nezařazený nezařazený
TVOŘIT VRSTVY nezařazený nezařazený nezařazený
STRUCT nezařazený nezařazený nezařazený
SUBSTR nezařazený nezařazený nezařazený
SUBSTRING nezařazený nezařazený nezařazený
SYNCHRONIZOVAT nezařazený nezařazený nezařazený
TABULKA rezervovaný nezařazený rezervovaný
TABULKY nezařazený nezařazený nezařazený
TABLESAMPLE nezařazený nezařazený rezervovaný
TBLPROPERTIES nezařazený nezařazený nezařazený
Pracovník na výpomoc nezařazený nezařazený nikoli klíčové slovo
DOČASNÝ nezařazený nezařazený nezařazený
UKONČENÝ nezařazený nezařazený nezařazený
THEN rezervovaný nezařazený rezervovaný
TIME rezervovaný nezařazený rezervovaný
TO rezervovaný nezařazený rezervovaný
DOTYK nezařazený nezařazený nezařazený
STOPOVÁNÍ rezervovaný nezařazený rezervovaný
TRANSAKCE nezařazený nezařazený nezařazený
TRANSAKCE nezařazený nezařazený nezařazený
TRANSFORMOVAT nezařazený nezařazený nezařazený
TRIM nezařazený nezařazený nezařazený
TRUE nezařazený nezařazený rezervovaný
ZKRÁTIT nezařazený nezařazený rezervovaný
TRY_CAST nezařazený nezařazený nezařazený
TYP nezařazený nezařazený nezařazený
UNARCHIVE nezařazený nezařazený nezařazený
NEOMEZENÝ nezařazený nezařazený nezařazený
UNCACHE nezařazený nezařazený nezařazený
UNION rezervovaný strict-non-reserved rezervovaný
JEDINEČNÝ rezervovaný nezařazený rezervovaný
Neznámé rezervovaný nezařazený rezervovaný
ODEMKNOUT nezařazený nezařazený nezařazený
NEUROVNANÝ nezařazený nezařazený nezařazený
UPDATE nezařazený nezařazený rezervovaný
USE nezařazený nezařazený nezařazený
UŽIVATEL rezervovaný nezařazený rezervovaný
USING rezervovaný strict-non-reserved rezervovaný
HODNOTY nezařazený nezařazený rezervovaný
ZOBRAZIT nezařazený nezařazený nezařazený
POHLEDY nezařazený nezařazený nezařazený
Když... rezervovaný nezařazený rezervovaný
WHERE rezervovaný nezařazený rezervovaný
OKNO nezařazený nezařazený rezervovaný
WITH rezervovaný nezařazený rezervovaný
YEAR nezařazený nezařazený nezařazený
ZÓNA nezařazený nezařazený nezařazený