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

Platí pro:označeno jako ano Databricks SQL označeno jako 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.

  • spark.sql.ansi.enabled (režim ANSI)

    • Místo dialektu kompatibilního s Hivem používá dialekt SQL kompatibilní s ANSI.
    • Vyvolá výjimky za běhu pro neplatné vstupy místo vrácení hodnoty null.
    • Ve výchozím nastavení je povoleno v Apache Spark 4.0 a Databricks Runtime 17.0 a novějších verzích.
  • spark.sql.storeAssignmentPolicy (zásady přiřazení úložiště)

    • Určuje implicitní přetypování během vkládání tabulek.
    • Výchozí nastavení je ANSI a je nezávislé na spark.sql.ansi.enabled.

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

Název vlastnosti Výchozí Význam
spark.sql.ansi.enabled true Pokud je hodnota true, Spark se pokusí splnit specifikaci ANSI SQL:
  • Spark SQL vyvolá výjimky za běhu programu při neplatných operacích, včetně chyb přetečení celého čísla, chyb při zpracování řetězců atd.
  • Spark použije různá pravidla typové coercie pro vyřešení nesouladů mezi datovými typy. Pravidla jsou konzistentně založená na prioritě datového typu.
spark.sql.storeAssignmentPolicy organizace 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, legacy a strict.
  • ANSI: Spark provádí 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 integer nebo double na boolean.
  • legacy: Spark umožňuje převod typu, pokud je platným 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á funkce ve Sparku 2.x a je kompatibilní s Hivem.
  • strict: Spark neumožňuje žádnou potenciální ztrátu přesnosti ani zkrácení dat při převodu typů, 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, které tento článek představí jednotlivě: přetypování, přiřazení pro uložení a automatický 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é hodnoty. Pokud je spark.sql.ansi.enabled nastaveno na true a dojde k přetečení v numerických a intervalových aritmetických operacích, vyvolá se za běhu aritmetická výjimka.

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

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

Přetypování

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 "přetypovací specifikace" ve standardu ISO/IEC 9075-2:2011 Informační technologie — databázové jazyky — SQL — část 2: Foundation (SQL/Foundation), s výjimkou, že speciálně umožňuje následující jednoduché převody typů, které jsou zakázány dle standardu ANSI:

  • ČíselnýTyp <=> BooleovskýTyp
  • 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 Struna Datum Časové razítko Rozmezí logický Binární Pole Mapa Struktura
Číslo Й Й N N N Й N N N N
Struna Й Й Й Й Й Й Й N N N
Datum N Й Й Й N N N N N N
Časové razítko N Й Й Й N N N N N N
Rozmezí N Й N N Й N N N N N
logický Й Й N N N Й N N N N
Binární Й N N N N N Й N N N
Pole N N N N N N N Й N N
Mapa N N N N N N N N Й N
Struktura N N N N N N N N N Й
-- 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`
> 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 je ANSI. Pokud se při tomto nastavení datové typy zdrojových hodnot neshodují s cílovými typy sloupců, Spark SQL do příkazu automaticky přidá klauzule INSERT ANSI CAST. Během vkládání tabulek v rámci této zásady Spark kontroluje a odmítá neplatné přetypování, přičemž vyvolá výjimku, aby zajistil 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 spark.sql.storeAssignmentPolicy nastaveno na LEGACY, Spark SQL se vrátí k chování, které převládalo až do Sparku 2.x. V tomto režimu, místo použití ANSI CAST operací, použije původní CAST operace. 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)

Nucený převod typu

Typová propagace a precedenční pravidla

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 seznam precedence (od nejužšího po nejširší)
byte Bajt - Krátké celé číslo -> Int -> Dlouhé celé číslo -> Desetinné číslo -> Float* -> Double
Krátké Short - Int ->> Long -> Decimal-> Float* -> Double
int Int - Long ->> Decimal -> Float* -> Double
Dlouhé Long - Decimal ->> Float* -> Double
Desetinné číslo Desetinné číslo -> Float* -> Double
Plavat Plovák –> double
Dvojitá přesnost Dvojitá přesnost
Datum Datum –> časové razítko
Časové razítko Časové razítko
Struna Struna
Binární Binární
logický logický
Rozmezí Rozmezí
Mapa 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.
  • Odvoďte typ argumentu pro funkce, které očekávají společný argument pro více parametrů, jako jsou coalesce, least nebo greatest.
  • Odvozujte typy operandů pro operátory, jako jsou aritmetické operace nebo porovnání.
  • Odvozujte typ výsledku pro výrazy, jako je výraz podmínky.
  • Odvození typů elementu, klíče nebo hodnoty pro pole a mapové konstruktory.

Pokud se nejméně běžný typ přeloží na FLOAT, se použijí speciální pravidla. U hodnot typu float, pokud je některý z typů INT, BIGINT nebo DECIMAL, nejméně běžný typ se převede na DOUBLE, aby se zabránilo potenciální 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, pokud klíč v mapě neexistuje.
  • elt: Tato funkce vyvolá 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 CAST, ale na rozdíl od toho vrací NULL výsledek místo vyvolání výjimky při chybě za běhu.
  • try_add: je shodný s operátorem sčítání +, s tím rozdílem, že místo vyvolání výjimky při přetečení celočíselné hodnoty vrátí výsledek NULL.
  • 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=true i spark.sql.ansi.enforceReservedKeywords=true, Spark SQL používá analyzátor ANSI. Ve výchozím nastavení je spark.sql.ansi.enforceReservedKeywordsfalse.

V režimu analyzátoru ANSI spadají klíčová slova do dvou kategorií:

  • Vyhrazeno: Nejde použít jako identifikátory (tabulka, zobrazení, sloupec, funkce, alias atd.).
  • Nezarezervované: Působí jako klíčová slova pouze v konkrétních kontextech; jinak lze použít jako identifikátory. Jedná se například EXPLAIN SELECT ... o příkaz, ale EXPLAIN můžete ho použít jako identifikátor jinde.

Pokud se analyzátor ANSI nepoužívá, klíčová slova spadají do:

  • Nemá rezervaci: Stejná definice jako výše.
  • Strict-non-reserved: Podobné jako non-reserved, ale nemůže být použito jako aliasy tabulek.

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
PŘIDAT nevyhrazený nevyhrazený nevyhrazený
PO nevyhrazený nevyhrazený nevyhrazený
VŠE rezervovaný nevyhrazený rezervovaný
ZMĚNA nevyhrazený nevyhrazený rezervovaný
VŽDY nevyhrazený nevyhrazený nevyhrazený
ANALÝZA nevyhrazený nevyhrazený nevyhrazený
A rezervovaný nevyhrazený rezervovaný
PROTI nevyhrazený přísně-nevyhrazené nevyhrazený
LIBOVOLNÉ rezervovaný nevyhrazený rezervovaný
ARCHIV nevyhrazený nevyhrazený nevyhrazený
POLE nevyhrazený nevyhrazený rezervovaný
PROTOŽE rezervovaný nevyhrazený rezervovaný
ASC nevyhrazený nevyhrazený nevyhrazený
Na nevyhrazený nevyhrazený rezervovaný
OPRÁVNĚNÍ rezervovaný nevyhrazený rezervovaný
MEZI nevyhrazený nevyhrazený rezervovaný
OBA rezervovaný nevyhrazený rezervovaný
KBELÍK nevyhrazený nevyhrazený nevyhrazený
VĚDRA nevyhrazený nevyhrazený nevyhrazený
VEDLE nevyhrazený nevyhrazený rezervovaný
MEZIPAMĚŤ nevyhrazený nevyhrazený nevyhrazený
KASKÁDA nevyhrazený nevyhrazený nevyhrazený
Případ rezervovaný nevyhrazený rezervovaný
PŘEVOD rezervovaný nevyhrazený rezervovaný
VYMĚNIT nevyhrazený nevyhrazený nevyhrazený
KONTROLOVAT rezervovaný nevyhrazený rezervovaný
JASNÝ nevyhrazený nevyhrazený nevyhrazený
SHLUK nevyhrazený nevyhrazený nevyhrazený
Seskupený nevyhrazený nevyhrazený nevyhrazený
CODEGEN nevyhrazený nevyhrazený nevyhrazený
KOLACIONOVAT rezervovaný nevyhrazený rezervovaný
SBÍRKA nevyhrazený nevyhrazený nevyhrazený
COLUMN rezervovaný nevyhrazený rezervovaný
COLUMNS nevyhrazený nevyhrazený nevyhrazený
KOMENTÁŘ nevyhrazený nevyhrazený nevyhrazený
POTVRDIT nevyhrazený nevyhrazený rezervovaný
KOMPAKTNÍ nevyhrazený nevyhrazený nevyhrazený
KOMPRIMACE nevyhrazený nevyhrazený nevyhrazený
VÝPOČET nevyhrazený nevyhrazený nevyhrazený
ZŘETĚZIT nevyhrazený nevyhrazený nevyhrazený
CONSTRAINT rezervovaný nevyhrazený rezervovaný
NÁKLADY nevyhrazený nevyhrazený nevyhrazený
VYTVOŘIT rezervovaný nevyhrazený rezervovaný
KŘÍŽ rezervovaný přísně-nevyhrazené rezervovaný
KRYCHLE nevyhrazený nevyhrazený rezervovaný
SOUČASNÝ nevyhrazený nevyhrazený rezervovaný
aktuální datum rezervovaný nevyhrazený rezervovaný
AKTUÁLNÍ_ČAS rezervovaný nevyhrazený rezervovaný
CURRENT_TIMESTAMP rezervovaný nevyhrazený rezervovaný
AKTUÁLNÍ_UŽIVATEL rezervovaný nevyhrazený rezervovaný
Údaje nevyhrazený nevyhrazený nevyhrazený
DATABÁZE nevyhrazený nevyhrazený nevyhrazený
DATABÁZE nevyhrazený nevyhrazený nevyhrazený
DEN nevyhrazený nevyhrazený nevyhrazený
DBPROPERTIES nevyhrazený nevyhrazený nevyhrazený
DEFINOVÁNO nevyhrazený nevyhrazený nevyhrazený
VYMAZAT nevyhrazený nevyhrazený rezervovaný
ODDĚLENÝ nevyhrazený nevyhrazený nevyhrazený
DESC nevyhrazený nevyhrazený nevyhrazený
POPSAT nevyhrazený nevyhrazený rezervovaný
Systém souborů DFS nevyhrazený nevyhrazený nevyhrazený
ADRESÁŘE nevyhrazený nevyhrazený nevyhrazený
ADRESÁŘ nevyhrazený nevyhrazený nevyhrazený
ODLIŠNÝ rezervovaný nevyhrazený rezervovaný
DISTRIBUOVAT nevyhrazený nevyhrazený nevyhrazený
DIV nevyhrazený nevyhrazený nikoli klíčové slovo
Pustit nevyhrazený nevyhrazený rezervovaný
jinak rezervovaný nevyhrazený rezervovaný
KONEC rezervovaný nevyhrazený rezervovaný
ÚNIK rezervovaný nevyhrazený rezervovaný
UTOČIL nevyhrazený nevyhrazený nevyhrazený
KROMĚ rezervovaný přísně-nevyhrazené rezervovaný
VÝMĚNA nevyhrazený nevyhrazený nevyhrazený
EXISTUJE nevyhrazený nevyhrazený rezervovaný
EXPLAIN nevyhrazený nevyhrazený nevyhrazený
VÝVOZ nevyhrazený nevyhrazený nevyhrazený
Rozšířeno nevyhrazený nevyhrazený nevyhrazený
EXTERNÍ nevyhrazený nevyhrazený rezervovaný
EXTRAKT nevyhrazený nevyhrazený rezervovaný
NEPRAVDA rezervovaný nevyhrazený rezervovaný
PŘINÉST rezervovaný nevyhrazený rezervovaný
POLE nevyhrazený nevyhrazený nevyhrazený
FILTR rezervovaný nevyhrazený rezervovaný
Formát souboru nevyhrazený nevyhrazený nevyhrazený
FIRST nevyhrazený nevyhrazený nevyhrazený
FN nevyhrazený nevyhrazený nevyhrazený
NÁSLEDUJÍCÍ nevyhrazený nevyhrazený nevyhrazený
PRO rezervovaný nevyhrazený rezervovaný
ZAHRANIČNÍ rezervovaný nevyhrazený rezervovaný
FORMÁT nevyhrazený nevyhrazený nevyhrazený
NAFORMÁTOVANÝ nevyhrazený nevyhrazený nevyhrazený
Od rezervovaný nevyhrazený rezervovaný
ÚPLNÝ rezervovaný přísně-nevyhrazené rezervovaný
FUNKCE nevyhrazený nevyhrazený rezervovaný
FUNKCE nevyhrazený nevyhrazený nevyhrazený
GENEROVANÝ nevyhrazený nevyhrazený nevyhrazený
GLOBÁLNÍ nevyhrazený nevyhrazený rezervovaný
GRANT rezervovaný nevyhrazený rezervovaný
DOTACE nevyhrazený nevyhrazený nevyhrazený
SKUPINA rezervovaný nevyhrazený rezervovaný
SESKUPENÍ nevyhrazený nevyhrazený rezervovaný
HAVING rezervovaný nevyhrazený rezervovaný
HODINA nevyhrazený nevyhrazený nevyhrazený
KDYŽ nevyhrazený nevyhrazený nikoli klíčové slovo
IGNOROVAT nevyhrazený nevyhrazený nevyhrazený
DOVOZ nevyhrazený nevyhrazený nevyhrazený
V rezervovaný nevyhrazený rezervovaný
Rejstřík nevyhrazený nevyhrazený nevyhrazený
INDEXY nevyhrazený nevyhrazený nevyhrazený
VNITŘNÍ rezervovaný přísně-nevyhrazené rezervovaný
INPATH nevyhrazený nevyhrazený nevyhrazený
Formát vstupu nevyhrazený nevyhrazený nevyhrazený
INSERT nevyhrazený nevyhrazený rezervovaný
PRŮSEČÍK rezervovaný přísně-nevyhrazené rezervovaný
interval nevyhrazený nevyhrazený rezervovaný
DO rezervovaný nevyhrazený rezervovaný
JE rezervovaný nevyhrazený rezervovaný
POLOŽKY nevyhrazený nevyhrazený nevyhrazený
JOIN rezervovaný přísně-nevyhrazené rezervovaný
JSON nevyhrazený nevyhrazený nevyhrazený
KLÍČ nevyhrazený nevyhrazený nevyhrazený
KLÍČE nevyhrazený nevyhrazený nevyhrazený
POSLEDNÍ nevyhrazený nevyhrazený nevyhrazený
BOČNÍ rezervovaný přísně-nevyhrazené rezervovaný
LÍNÝ nevyhrazený nevyhrazený nevyhrazený
VEDOUCÍ rezervovaný nevyhrazený rezervovaný
LEVÝ rezervovaný přísně-nevyhrazené rezervovaný
To se mi líbí nevyhrazený nevyhrazený rezervovaný
ILIKE nevyhrazený nevyhrazený nevyhrazený
LIMIT nevyhrazený nevyhrazený nevyhrazený
ŘÁDKY nevyhrazený nevyhrazený nevyhrazený
LIST nevyhrazený nevyhrazený nevyhrazený
NÁKLAD nevyhrazený nevyhrazený nevyhrazený
Lokální nevyhrazený nevyhrazený rezervovaný
UMÍSTĚNÍ nevyhrazený nevyhrazený nevyhrazený
ZAMKNOUT nevyhrazený nevyhrazený nevyhrazený
ZÁMKY nevyhrazený nevyhrazený nevyhrazený
LOGICKÝ nevyhrazený nevyhrazený nevyhrazený
Makro nevyhrazený nevyhrazený nevyhrazený
MAPA nevyhrazený nevyhrazený nevyhrazený
SLÍCOVANÝ nevyhrazený nevyhrazený nevyhrazený
SLOUČIT nevyhrazený nevyhrazený nevyhrazený
MINUTA nevyhrazený nevyhrazený nevyhrazený
MINUS nevyhrazený přísně-nevyhrazené nevyhrazený
MĚSÍC nevyhrazený nevyhrazený nevyhrazený
MSCK nevyhrazený nevyhrazený nevyhrazený
NAMESPACE nevyhrazený nevyhrazený nevyhrazený
OBORY NÁZVŮ nevyhrazený nevyhrazený nevyhrazený
PŘIROZENÝ rezervovaný přísně-nevyhrazené rezervovaný
NE nevyhrazený nevyhrazený rezervovaný
NE rezervovaný nevyhrazený rezervovaný
NULA rezervovaný nevyhrazený rezervovaný
NULL nevyhrazený nevyhrazený nevyhrazený
Z nevyhrazený nevyhrazený rezervovaný
ZAPNUTO rezervovaný přísně-nevyhrazené rezervovaný
POUZE rezervovaný nevyhrazený rezervovaný
MOŽNOST nevyhrazený nevyhrazený nevyhrazený
MOŽNOSTI nevyhrazený nevyhrazený nevyhrazený
NEBO rezervovaný nevyhrazený rezervovaný
OBJEDNÁVKA rezervovaný nevyhrazený rezervovaný
VEN nevyhrazený nevyhrazený rezervovaný
VNĚJŠÍ rezervovaný nevyhrazený rezervovaný
Výstupní formát nevyhrazený nevyhrazený nevyhrazený
PŘES nevyhrazený nevyhrazený nevyhrazený
PŘEKRYVY rezervovaný nevyhrazený rezervovaný
PŘEKRYTÍ nevyhrazený nevyhrazený nevyhrazený
PŘEPSAT nevyhrazený nevyhrazený nevyhrazený
PARTITION nevyhrazený nevyhrazený rezervovaný
SEGMENTOVANÝ nevyhrazený nevyhrazený nevyhrazený
ODDÍLY nevyhrazený nevyhrazený nevyhrazený
PROCENTO nevyhrazený nevyhrazený nevyhrazený
PIVOT nevyhrazený nevyhrazený nevyhrazený
UMISŤOVÁNÍ nevyhrazený nevyhrazený nevyhrazený
POSTAVENÍ nevyhrazený nevyhrazený rezervovaný
PŘEDCHOZÍ nevyhrazený nevyhrazený nevyhrazený
PRIMÁRNÍ rezervovaný nevyhrazený rezervovaný
ŘEDITELÉ nevyhrazený nevyhrazený nevyhrazený
VLASTNOSTI nevyhrazený nevyhrazený nevyhrazený
Očista nevyhrazený nevyhrazený nevyhrazený
QUALIFY rezervovaný nevyhrazený rezervovaný
DOTAZ nevyhrazený nevyhrazený nevyhrazený
ROZMEZÍ nevyhrazený nevyhrazený rezervovaný
PŘÍJEMCE nevyhrazený nevyhrazený nevyhrazený
RECIPIENTS nevyhrazený nevyhrazený nevyhrazený
RECORDREADER nevyhrazený nevyhrazený nevyhrazený
Zapisovač nevyhrazený nevyhrazený nevyhrazený
ZOTAVIT SE nevyhrazený nevyhrazený nevyhrazený
REDUKOVAT nevyhrazený nevyhrazený nevyhrazený
ODKAZY rezervovaný nevyhrazený rezervovaný
REFRESH nevyhrazený nevyhrazený nevyhrazený
REGEXP nevyhrazený nevyhrazený nikoli klíčové slovo
REMOVE nevyhrazený nevyhrazený nevyhrazený
Přejmenovat nevyhrazený nevyhrazený nevyhrazený
OPRAVIT nevyhrazený nevyhrazený nevyhrazený
NAHRADIT nevyhrazený nevyhrazený nevyhrazený
RESET nevyhrazený nevyhrazený nevyhrazený
RESPEKT nevyhrazený nevyhrazený nevyhrazený
OMEZIT nevyhrazený nevyhrazený nevyhrazený
REVOKE nevyhrazený nevyhrazený rezervovaný
PRAVÝ rezervovaný přísně-nevyhrazené rezervovaný
RLIKE nevyhrazený nevyhrazený nevyhrazený
Role nevyhrazený nevyhrazený nevyhrazený
ROLE nevyhrazený nevyhrazený nevyhrazený
VRÁCENÍ ZPĚT nevyhrazený nevyhrazený rezervovaný
KUMULACE nevyhrazený nevyhrazený rezervovaný
Řádek nevyhrazený nevyhrazený rezervovaný
řádky nevyhrazený nevyhrazený rezervovaný
SCHEMA nevyhrazený nevyhrazený nevyhrazený
SCHÉMATA nevyhrazený nevyhrazený nikoli klíčové slovo
VTEŘINA nevyhrazený nevyhrazený nevyhrazený
SELECT rezervovaný nevyhrazený rezervovaný
POLO nevyhrazený přísně-nevyhrazené nevyhrazený
ODDĚLENÝ nevyhrazený nevyhrazený nevyhrazený
SERDE nevyhrazený nevyhrazený nevyhrazený
SERDEPROPERTIES nevyhrazený nevyhrazený nevyhrazený
UŽIVATEL_SESSION rezervovaný nevyhrazený rezervovaný
SET nevyhrazený nevyhrazený rezervovaný
NASTAVUJE nevyhrazený nevyhrazený nevyhrazený
SDÍLET nevyhrazený nevyhrazený nevyhrazený
SHARES nevyhrazený nevyhrazený nevyhrazený
UKÁZAT nevyhrazený nevyhrazený nevyhrazený
ZKOSENÝ nevyhrazený nevyhrazený nevyhrazený
NĚJAKÝ rezervovaný nevyhrazený rezervovaný
ŘADIT nevyhrazený nevyhrazený nevyhrazený
SEŘAZENÝ nevyhrazený nevyhrazený nevyhrazený
ZAČÍNAT nevyhrazený nevyhrazený rezervovaný
STATISTIKA nevyhrazený nevyhrazený nevyhrazený
ULOŽENÝ nevyhrazený nevyhrazený nevyhrazený
VRSTVIT nevyhrazený nevyhrazený nevyhrazený
STRUKTURA nevyhrazený nevyhrazený nevyhrazený
SUBSTR nevyhrazený nevyhrazený nevyhrazený
podřetězec nevyhrazený nevyhrazený nevyhrazený
SYNC nevyhrazený nevyhrazený nevyhrazený
TABLE rezervovaný nevyhrazený rezervovaný
TABLES nevyhrazený nevyhrazený nevyhrazený
TABLESAMPLE nevyhrazený nevyhrazený rezervovaný
TBLPROPERTIES nevyhrazený nevyhrazený nevyhrazený
Dočasný pracovník nevyhrazený nevyhrazený nikoli klíčové slovo
DOČASNÝ nevyhrazený nevyhrazený nevyhrazený
UKONČENÝ nevyhrazený nevyhrazený nevyhrazený
POTOM rezervovaný nevyhrazený rezervovaný
ČAS rezervovaný nevyhrazený rezervovaný
K rezervovaný nevyhrazený rezervovaný
DOTYK nevyhrazený nevyhrazený nevyhrazený
STOPOVÁNÍ rezervovaný nevyhrazený rezervovaný
TRANSAKCE nevyhrazený nevyhrazený nevyhrazený
TRANSAKCE nevyhrazený nevyhrazený nevyhrazený
TRANSFORMOVAT nevyhrazený nevyhrazený nevyhrazený
ZASTŘIHNOUT nevyhrazený nevyhrazený nevyhrazený
PRAVDIVÝ nevyhrazený nevyhrazený rezervovaný
ZKRÁTIT nevyhrazený nevyhrazený rezervovaný
TRY_CAST nevyhrazený nevyhrazený nevyhrazený
TYP nevyhrazený nevyhrazený nevyhrazený
Obnovit z archivu nevyhrazený nevyhrazený nevyhrazený
NEOMEZENÝ nevyhrazený nevyhrazený nevyhrazený
zrušit cache nevyhrazený nevyhrazený nevyhrazený
UNIE rezervovaný přísně-nevyhrazené rezervovaný
JEDINEČNÝ rezervovaný nevyhrazený rezervovaný
Neznámé rezervovaný nevyhrazený rezervovaný
ODEMKNOUT nevyhrazený nevyhrazený nevyhrazený
NENASTAVENÝ nevyhrazený nevyhrazený nevyhrazený
UPDATE nevyhrazený nevyhrazený rezervovaný
Použití nevyhrazený nevyhrazený nevyhrazený
UŽIVATEL rezervovaný nevyhrazený rezervovaný
Použití rezervovaný přísně-nevyhrazené rezervovaný
VALUES nevyhrazený nevyhrazený rezervovaný
ZOBRAZIT nevyhrazený nevyhrazený nevyhrazený
VIEWS nevyhrazený nevyhrazený nevyhrazený
Když... rezervovaný nevyhrazený rezervovaný
WHERE rezervovaný nevyhrazený rezervovaný
WINDOW nevyhrazený nevyhrazený rezervovaný
S rezervovaný nevyhrazený rezervovaný
ROK nevyhrazený nevyhrazený nevyhrazený
ZÓNA nevyhrazený nevyhrazený nevyhrazený