Databricks Runtime での ANSI 準拠
適用対象: Databricks Runtime
この記事では、Databricks Runtime での ANSI 準拠について説明します。 Databricks SQL の ANSI モードについては、「ANSI_MODE」を参照してください。
Spark SQL には、ANSI SQL 標準への準拠をサポートするために、spark.sql.ansi.enabled
と spark.sql.storeAssignmentPolicy
の 2 つのオプションがあります。
spark.sql.ansi.enabled
が true
に設定されている場合、Spark SQL は、Hive 準拠するのではなく、ANSI 準拠の言語を使用します。 たとえば、SQL の演算子/関数への入力が無効である場合、Spark は、null の結果を返すのではなく、実行時に例外をスローします。 ANSI 言語機能の中には、ANSI SQL 標準に直接は由来しないものもありますが、その動作は ANSI SQL のスタイルに合わせて調整されます。
さらに、Spark SQL にはテーブルに行を格納するときに、暗黙的なキャストの動作を制御する独自のオプションがあります。 キャスト動作は、標準のストア割り当てルールとして定義されています。
spark.sql.storeAssignmentPolicy
が ANSI
に設定されている場合、Spark SQL は ANSI ストアの割り当て規則に準拠します。 既定値は ANSI
でも、構成 spark.sql.ansi.enabled
は既定で無効になっているため、これは個別の構成です。
次の表は、この動作をまとめたものです。
プロパティ名 | Default | 意味 |
---|---|---|
spark.sql.ansi.enabled |
false | true の場合、Spark は ANSI SQL 仕様に準拠しようとします。 - 整数または 10 進フィールドに対する操作でオーバーフローが発生した場合、ランタイム例外をスローします。 - ANSI SQL の予約キーワードを SQL パーサーの識別子として使用禁止します。 |
spark.sql.storeAssignmentPolicy |
ANSI | データ型が異なる列に値を格納すると、Spark は型変換を実行します。 強制型変換規則には、ANSI 、legacy 、strict の 3 つのポリシーがあります。- ANSI : Spark では、ANSI SQL に従って強制型変換が実行されます。 実際には、この動作は PostgreSQL とほぼ同じです。 文字列を int に変換する、または double を boolean に変換するなど、特定の不適切な型変換を許可しません。- legacy : Spark では、有効なキャストである限り、強制型変換が許可されます。これは厳密なものではありません。 たとえば、文字列を int または double を boolean に変換することができます。 また、これは Spark 2.x の唯一の動作であり、Hive と互換性があります。- strict : Spark では、強制型変換で有効桁数の損失やデータの切り詰めを行うことはできません。たとえば、double から int または decimal から double への変換は許可されていません。 |
次のサブセクションでは、ANSI モードが有効になっている場合の、算術演算、型変換、SQL 解析での動作の変更について説明します。 Spark SQL での型変換では、キャスト、ストアの割り当て、強制型変換の 3 つの種類があり、この記事ではこれらを 1 つずつ説明します。
算術演算
Spark SQL では、数値型に対して実行される算術演算 (decimal を除く) は、既定でオーバーフローに対してチェックされません。
つまり、演算によってオーバーフローが発生した場合、結果は Java または Scala プログラムの対応する操作と同じになります (たとえば、2 つの整数の合計が表現可能な最大値よりも大きい場合、結果は負の数になります)。 一方、Spark SQL は、10 進数オーバーフローに対して null を返します。
spark.sql.ansi.enabled
が true
に設定され、数値とサイクル間隔の算術演算でオーバーフローが発生した場合、実行時に算術例外がスローされます。
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
キャスト
spark.sql.ansi.enabled
が true
に設定されている場合、CAST
構文による明示的なキャストは、文字列から整数へのキャストなど、標準で定義されている無効なキャスト パターンに対してランタイム例外をスローします。
Spark ANSI モードの CAST
句は、ISO/IEC 9075-2:2011 Information technology — Database languages - SQL — Part 2: Foundation (SQL/Foundation) のセクション 6.13 のキャスト仕様に関する説明で示されている構文規則に従います。ただし、ANSI 標準では許可されていない、次の単純な型変換は許可されている点を除きます。
- NumericType <=> BooleanType
- StringType <=> BinaryType
CAST
式のソースとターゲットのデータ型の有効な組み合わせは、次の表に示されています。
"Y" は、組み合わせが制限なく構文的に有効であることを示します。"N" は、その組み合わせが無効であることを示します。
SourceTarget | 数値 | string | Date | Timestamp | Interval | Boolean | Binary | Array | マップ | 構造体 |
---|---|---|---|---|---|---|---|---|---|---|
数値 | Y | 年 | N | N | N | 年 | N | N | N | N |
string | Y | 年 | 年 | 年 | 年 | 年 | 年 | N | N | N |
Date | N | Y | 年 | 年 | N | N | N | N | N | N |
Timestamp | N | Y | 年 | 年 | N | N | N | N | N | N |
Interval | N | 年 | N | N | 年 | N | N | N | N | N |
Boolean | Y | 年 | N | N | N | 年 | N | N | N | N |
Binary | Y | N | N | N | N | N | 年 | N | N | N |
Array | N | N | N | N | N | N | N | 年 | N | N |
マップ | N | N | N | N | N | N | N | N | 年 | N |
構造体 | 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
ストアの割り当て
spark.sql.storeAssignmentPolicy
設定の既定値は ANSI
です。 この設定では、ソース値のデータ型がターゲット列の型と一致しない場合、Spark SQL は自動的に ANSI CAST 句を INSERT ステートメントに追加します。
このポリシーに基づくテーブルの挿入中に、Spark は無効なキャストをチェックして拒否し、データ品質を確保するために例外をスローします。 つまり、型の不一致が原因で挿入が失敗した場合、データがテーブルに部分的に書き込まれることはありません。
例 :
-- 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
次の例は、Spark SQL が互換性のないデータの挿入を防ぎ、データの整合性を維持することを示しています。
spark.sql.storeAssignmentPolicy
が LEGACY
に設定されている場合、Spark SQL は Spark 2.x までの一般的な動作に戻ります。 このモードでは、ANSI CAST を使用する代わりに、従来の CAST 操作が適用されます。 このポリシーでは、テーブルの挿入中に無効なキャストを実行すると、例外がスローされるのではなく、NULL 値または正しくない値が挿入されます。
例 :
-- 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)
強制型変換
型の上位変換と優先順位
spark.sql.ansi.enabled
が true
に設定されている場合、Spark SQL では、データ型間の競合を解決する方法を制御するいくつかの規則を使用します。
この競合解決の中心となるのは、特定のデータ型の値を暗黙的に別のデータ型に昇格できるかどうかを定義する型の優先順位リストです。
データ型 | 優先順位リスト (最も狭い範囲から最も広い範囲の順) |
---|---|
Byte | Byte -> Short -> Int -> Long -> Decimal -> Float* -> Double |
ショート | Short -> Int -> Long -> Decimal-> Float* -> Double |
int | Int -> Long -> Decimal -> Float* -> Double |
long | Long -> Decimal -> Float* -> Double |
Decimal | Decimal -> Float* -> Double |
Float | Float -> Double |
Double | Double |
Date | Date -> Timestamp |
Timestamp | Timestamp |
String | string |
Binary | Binary |
Boolean | Boolean |
Interval | Interval |
マップ | Map** |
Array | Array** |
構造体 | Struct** |
- 最も一般的でない型解決の場合、精度の損失を回避するために浮動小数点はスキップされます。
** 複合型の場合、優先順位規則はそのコンポーネント要素に再帰的に適用されます。
文字列型と型指定されていない NULL には特別な規則が適用されます。 NULL は他の任意の型に昇格できますが、String は任意の単純データ型に昇格できます。
ここでは、優先順位リストを有向木として図で示しています:
最も一般的でない型解決
一連の型の最も一般的でない型は、一連の型のすべての要素によって優先順位リストから到達可能な最も狭い型です。
最も一般的でない型解決は、次の場合に使用します。
- ある型のパラメーターを必要としている関数を、より狭い型の引数を使用して呼び出すことができるかどうかを決定します。
- 複数のパラメーター (結合、最小、最大など) の共有引数型を必要とする関数の引数型を派生させます。
- 算術演算や比較などの演算子のオペランド型を派生させます。
- case 式などの式の結果型を派生させる。
- 配列コンストラクターとマップ コンストラクターの要素、キー、または値の型を派生させます。
最も一般的でない型が FLOAT に解決される場合は、特別な規則が適用されます。 float 型の値で、型のいずれかが INT、BIGINT、または DECIMAL の場合、桁数が失われないようにするために、最も一般的でない型は DOUBLE にプッシュされます。
-- 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 関数
一部の SQL 関数は、ANSI モード (spark.sql.ansi.enabled=true
) では動作が異なる場合があります。
size
: この関数は、ANSI モードでの null 入力に対して null を返します。element_at
:- 無効なインデックスを使用している場合、この関数は
ArrayIndexOutOfBoundsException
をスローします。 - キーがマップに存在しない場合、この関数は
NoSuchElementException
をスローします。
- 無効なインデックスを使用している場合、この関数は
elt
: 無効なインデックスを使用している場合、この関数はArrayIndexOutOfBoundsException
をスローします。make_date
: 結果の日付が無効な場合、この関数は例外で失敗します。make_timestamp
: 結果のタイムスタンプが無効な場合、この関数は例外で失敗します。make_interval
: 結果の間隔が無効な場合、この関数は例外で失敗します。next_day
: 入力が有効な週の日付でない場合、この関数はIllegalArgumentException
をスローします。parse_url
: 入力文字列が有効な URL でない場合、この関数はIllegalArgumentException
をスローします。to_date
: 入力文字列を解析できない場合、またはパターン文字列が無効な場合、この関数は例外で失敗します。to_timestamp
: 入力文字列を解析できない場合、またはパターン文字列が無効な場合、この関数は例外で失敗します。to_unix_timestamp
: 入力文字列を解析できない場合、またはパターン文字列が無効な場合、この関数は例外で失敗します。unix_timestamp
: 入力文字列を解析できない場合、またはパターン文字列が無効な場合、この関数は例外で失敗します。
SQL 演算子
一部の SQL 演算子は、ANSI モード (spark.sql.ansi.enabled=true
) では動作が異なる場合があります。
array_col[index]
: 無効なインデックスを使用している場合、この演算子はArrayIndexOutOfBoundsException
をスローします。map_col[key]
: キーがマップに存在しない場合、この演算子はNoSuchElementException
をスローします。CAST(string_col AS TIMESTAMP)
: 入力文字列を解析できない場合、この演算子は例外で失敗します。CAST(string_col AS DATE)
: 入力文字列を解析できない場合、この演算子は例外で失敗します。
ANSI モードの便利な関数
ANSI モードがオンの場合、無効な操作に対して例外がスローされます。 次の SQL 関数を使用して、このような例外を抑制できます。
try_cast
: ランタイム エラーで例外をスローする代わりにNULL
の結果を返す点を除き、CAST
と同じです。try_add
: 整数値オーバーフローで例外をスローする代わりにNULL
の結果を返す点を除き、加算演算子+
と同じです。try_divide
: 0 の除算で例外をスローする代わりにNULL
の結果を返す点を除き、除算演算子/
と同じです。
SQL キーワード
spark.sql.ansi.enabled
が true の場合、Spark SQL は ANSI モード パーサーを使用します。
このモードでは、Spark SQL には 2 種類のキーワードがあります。
- 予約キーワード: 予約済みで、テーブル、ビュー、列、関数、エイリアスなどの識別子として使用できないキーワード。
- 予約されていないキーワード: 特定のコンテキストでのみ特別な意味を持ち、他のコンテキストで識別子として使用できるキーワード。 たとえば、
EXPLAIN SELECT ...
はコマンドですが、EXPLAIN は他の場所で識別子として使用できます。
ANSI モードが無効になっている場合、Spark SQL には次の 2 種類のキーワードがあります。
- 予約されていないキーワード: ANSI モードが有効になっている場合と同じ定義。
- 予約されていない厳密なキーワード: 予約されていないキーワードの厳密なバージョン。テーブルの別名として使用することはできません。
既定では、spark.sql.ansi.enabled
は false です。
Spark SQL のすべてのキーワードの一覧を次に示します。
Keyword | Spark SQL ANSI モード | Spark SQL の既定モード | SQL-2016 |
---|---|---|---|
ADD | 予約されていない | 予約されていない | 予約されていない |
AFTER | 予約されていない | 予約されていない | 予約されていない |
ALL | 予約済み | 予約されていない | 予約済み |
ALTER | 予約されていない | 予約されていない | 予約済み |
ALWAYS | 予約されていない | 予約されていない | 予約されていない |
分析 | 予約されていない | 予約されていない | 予約されていない |
AND | 予約済み | 予約されていない | 予約済み |
ANTI | 予約されていない | 厳密で予約されていない | 予約されていない |
ANY | 予約済み | 予約されていない | 予約済み |
ARCHIVE | 予約されていない | 予約されていない | 予約されていない |
ARRAY | 予約されていない | 予約されていない | 予約済み |
AS | 予約済み | 予約されていない | 予約済み |
ASC | 予約されていない | 予約されていない | 予約されていない |
AT | 予約されていない | 予約されていない | 予約済み |
AUTHORIZATION | 予約済み | 予約されていない | 予約済み |
BETWEEN | 予約されていない | 予約されていない | 予約済み |
BOTH | 予約済み | 予約されていない | 予約済み |
BUCKET | 予約されていない | 予約されていない | 予約されていない |
BUCKETS | 予約されていない | 予約されていない | 予約されていない |
BY | 予約されていない | 予約されていない | 予約済み |
CACHE | 予約されていない | 予約されていない | 予約されていない |
CASCADE | 予約されていない | 予約されていない | 予約されていない |
CASE | 予約済み | 予約されていない | 予約済み |
CAST | 予約済み | 予約されていない | 予約済み |
CHANGE | 予約されていない | 予約されていない | 予約されていない |
CHECK | 予約済み | 予約されていない | 予約済み |
CLEAR | 予約されていない | 予約されていない | 予約されていない |
CLUSTER | 予約されていない | 予約されていない | 予約されていない |
CLUSTERED | 予約されていない | 予約されていない | 予約されていない |
CODEGEN | 予約されていない | 予約されていない | 予約されていない |
COLLATE | 予約済み | 予約されていない | 予約済み |
COLLECTION | 予約されていない | 予約されていない | 予約されていない |
COLUMN | 予約済み | 予約されていない | 予約済み |
COLUMNS | 予約されていない | 予約されていない | 予約されていない |
COMMENT | 予約されていない | 予約されていない | 予約されていない |
COMMIT | 予約されていない | 予約されていない | 予約済み |
COMPACT | 予約されていない | 予約されていない | 予約されていない |
COMPACTIONS | 予約されていない | 予約されていない | 予約されていない |
COMPUTE | 予約されていない | 予約されていない | 予約されていない |
CONCATENATE | 予約されていない | 予約されていない | 予約されていない |
CONSTRAINT | 予約済み | 予約されていない | 予約済み |
COST | 予約されていない | 予約されていない | 予約されていない |
CREATE | 予約済み | 予約されていない | 予約済み |
CROSS | 予約済み | 厳密で予約されていない | 予約済み |
CUBE | 予約されていない | 予約されていない | 予約済み |
CURRENT | 予約されていない | 予約されていない | 予約済み |
CURRENT_DATE | 予約済み | 予約されていない | 予約済み |
CURRENT_TIME | 予約済み | 予約されていない | 予約済み |
CURRENT_TIMESTAMP | 予約済み | 予約されていない | 予約済み |
CURRENT_USER | 予約済み | 予約されていない | 予約済み |
DATA | 予約されていない | 予約されていない | 予約されていない |
データ | 予約されていない | 予約されていない | 予約されていない |
DATABASES | 予約されていない | 予約されていない | 予約されていない |
DAY | 予約されていない | 予約されていない | 予約されていない |
DBPROPERTIES | 予約されていない | 予約されていない | 予約されていない |
DEFINED | 予約されていない | 予約されていない | 予約されていない |
DELETE | 予約されていない | 予約されていない | 予約済み |
DELIMITED | 予約されていない | 予約されていない | 予約されていない |
DESC | 予約されていない | 予約されていない | 予約されていない |
DESCRIBE | 予約されていない | 予約されていない | 予約済み |
DFS | 予約されていない | 予約されていない | 予約されていない |
DIRECTORIES | 予約されていない | 予約されていない | 予約されていない |
DIRECTORY | 予約されていない | 予約されていない | 予約されていない |
DISTINCT | 予約済み | 予約されていない | 予約済み |
DISTRIBUTE | 予約されていない | 予約されていない | 予約されていない |
DIV | 予約されていない | 予約されていない | キーワードではない |
DROP | 予約されていない | 予約されていない | 予約済み |
ELSE | 予約済み | 予約されていない | 予約済み |
END | 予約済み | 予約されていない | 予約済み |
ESCAPE | 予約済み | 予約されていない | 予約済み |
ESCAPED | 予約されていない | 予約されていない | 予約されていない |
EXCEPT | 予約済み | 厳密で予約されていない | 予約済み |
EXCHANGE | 予約されていない | 予約されていない | 予約されていない |
EXISTS | 予約されていない | 予約されていない | 予約済み |
EXPLAIN | 予約されていない | 予約されていない | 予約されていない |
EXPORT | 予約されていない | 予約されていない | 予約されていない |
EXTENDED | 予約されていない | 予約されていない | 予約されていない |
EXTERNAL | 予約されていない | 予約されていない | 予約済み |
EXTRACT | 予約されていない | 予約されていない | 予約済み |
FALSE | 予約済み | 予約されていない | 予約済み |
FETCH | 予約済み | 予約されていない | 予約済み |
FIELDS | 予約されていない | 予約されていない | 予約されていない |
FILTER | 予約済み | 予約されていない | 予約済み |
FILEFORMAT | 予約されていない | 予約されていない | 予約されていない |
FIRST | 予約されていない | 予約されていない | 予約されていない |
FN | 予約されていない | 予約されていない | 予約されていない |
FOLLOWING | 予約されていない | 予約されていない | 予約されていない |
FOR | 予約済み | 予約されていない | 予約済み |
FOREIGN | 予約済み | 予約されていない | 予約済み |
FORMAT | 予約されていない | 予約されていない | 予約されていない |
FORMATTED | 予約されていない | 予約されていない | 予約されていない |
FROM | 予約済み | 予約されていない | 予約済み |
FULL | 予約済み | 厳密で予約されていない | 予約済み |
FUNCTION | 予約されていない | 予約されていない | 予約済み |
FUNCTIONS | 予約されていない | 予約されていない | 予約されていない |
GENERATED | 予約されていない | 予約されていない | 予約されていない |
GLOBAL | 予約されていない | 予約されていない | 予約済み |
GRANT | 予約済み | 予約されていない | 予約済み |
GRANTS | 予約されていない | 予約されていない | 予約されていない |
GROUP | 予約済み | 予約されていない | 予約済み |
GROUPING | 予約されていない | 予約されていない | 予約済み |
HAVING | 予約済み | 予約されていない | 予約済み |
HOUR | 予約されていない | 予約されていない | 予約されていない |
IF | 予約されていない | 予約されていない | キーワードではない |
IGNORE | 予約されていない | 予約されていない | 予約されていない |
IMPORT | 予約されていない | 予約されていない | 予約されていない |
IN | 予約済み | 予約されていない | 予約済み |
INDEX | 予約されていない | 予約されていない | 予約されていない |
INDEXES | 予約されていない | 予約されていない | 予約されていない |
INNER | 予約済み | 厳密で予約されていない | 予約済み |
INPATH | 予約されていない | 予約されていない | 予約されていない |
INPUTFORMAT | 予約されていない | 予約されていない | 予約されていない |
INSERT | 予約されていない | 予約されていない | 予約済み |
INTERSECT | 予約済み | 厳密で予約されていない | 予約済み |
INTERVAL | 予約されていない | 予約されていない | 予約済み |
INTO | 予約済み | 予約されていない | 予約済み |
IS | 予約済み | 予約されていない | 予約済み |
ITEMS | 予約されていない | 予約されていない | 予約されていない |
JOIN | 予約済み | 厳密で予約されていない | 予約済み |
KEY | 予約されていない | 予約されていない | 予約されていない |
KEYS | 予約されていない | 予約されていない | 予約されていない |
LAST | 予約されていない | 予約されていない | 予約されていない |
LATERAL | 予約済み | 厳密で予約されていない | 予約済み |
LAZY | 予約されていない | 予約されていない | 予約されていない |
LEADING | 予約済み | 予約されていない | 予約済み |
LEFT | 予約済み | 厳密で予約されていない | 予約済み |
LIKE | 予約されていない | 予約されていない | 予約済み |
ILIKE | 予約されていない | 予約されていない | 予約されていない |
LIMIT | 予約されていない | 予約されていない | 予約されていない |
LINES | 予約されていない | 予約されていない | 予約されていない |
リスト | 予約されていない | 予約されていない | 予約されていない |
LOAD | 予約されていない | 予約されていない | 予約されていない |
LOCAL | 予約されていない | 予約されていない | 予約済み |
LOCATION | 予約されていない | 予約されていない | 予約されていない |
LOCK | 予約されていない | 予約されていない | 予約されていない |
LOCKS | 予約されていない | 予約されていない | 予約されていない |
LOGICAL | 予約されていない | 予約されていない | 予約されていない |
MACRO | 予約されていない | 予約されていない | 予約されていない |
MAP | 予約されていない | 予約されていない | 予約されていない |
MATCHED | 予約されていない | 予約されていない | 予約されていない |
MERGE | 予約されていない | 予約されていない | 予約されていない |
MINUTE | 予約されていない | 予約されていない | 予約されていない |
MINUS | 予約されていない | 厳密で予約されていない | 予約されていない |
MONTH | 予約されていない | 予約されていない | 予約されていない |
MSCK | 予約されていない | 予約されていない | 予約されていない |
NAMESPACE | 予約されていない | 予約されていない | 予約されていない |
NAMESPACES | 予約されていない | 予約されていない | 予約されていない |
NATURAL | 予約済み | 厳密で予約されていない | 予約済み |
NO | 予約されていない | 予約されていない | 予約済み |
NOT | 予約済み | 予約されていない | 予約済み |
NULL | 予約済み | 予約されていない | 予約済み |
NULLS | 予約されていない | 予約されていない | 予約されていない |
OF | 予約されていない | 予約されていない | 予約済み |
ON | 予約済み | 厳密で予約されていない | 予約済み |
ONLY | 予約済み | 予約されていない | 予約済み |
OPTION | 予約されていない | 予約されていない | 予約されていない |
OPTIONS | 予約されていない | 予約されていない | 予約されていない |
または | 予約済み | 予約されていない | 予約済み |
ORDER | 予約済み | 予約されていない | 予約済み |
OUT | 予約されていない | 予約されていない | 予約済み |
OUTER | 予約済み | 予約されていない | 予約済み |
OUTPUTFORMAT | 予約されていない | 予約されていない | 予約されていない |
OVER | 予約されていない | 予約されていない | 予約されていない |
OVERLAPS | 予約済み | 予約されていない | 予約済み |
OVERLAY | 予約されていない | 予約されていない | 予約されていない |
OVERWRITE | 予約されていない | 予約されていない | 予約されていない |
PARTITION | 予約されていない | 予約されていない | 予約済み |
PARTITIONED | 予約されていない | 予約されていない | 予約されていない |
PARTITIONS | 予約されていない | 予約されていない | 予約されていない |
PERCENT | 予約されていない | 予約されていない | 予約されていない |
PIVOT | 予約されていない | 予約されていない | 予約されていない |
PLACING | 予約されていない | 予約されていない | 予約されていない |
POSITION | 予約されていない | 予約されていない | 予約済み |
PRECEDING | 予約されていない | 予約されていない | 予約されていない |
PRIMARY | 予約済み | 予約されていない | 予約済み |
PRINCIPALS | 予約されていない | 予約されていない | 予約されていない |
PROPERTIES | 予約されていない | 予約されていない | 予約されていない |
PURGE | 予約されていない | 予約されていない | 予約されていない |
QUALIFY | 予約済み | 予約されていない | 予約済み |
QUERY | 予約されていない | 予約されていない | 予約されていない |
RANGE | 予約されていない | 予約されていない | 予約済み |
RECIPIENT | 予約されていない | 予約されていない | 予約されていない |
RECIPIENTS | 予約されていない | 予約されていない | 予約されていない |
RECORDREADER | 予約されていない | 予約されていない | 予約されていない |
RECORDWRITER | 予約されていない | 予約されていない | 予約されていない |
RECOVER | 予約されていない | 予約されていない | 予約されていない |
REDUCE | 予約されていない | 予約されていない | 予約されていない |
REFERENCES | 予約済み | 予約されていない | 予約済み |
REFRESH | 予約されていない | 予約されていない | 予約されていない |
REGEXP | 予約されていない | 予約されていない | キーワードではない |
REMOVE | 予約されていない | 予約されていない | 予約されていない |
RENAME | 予約されていない | 予約されていない | 予約されていない |
REPAIR | 予約されていない | 予約されていない | 予約されていない |
REPLACE | 予約されていない | 予約されていない | 予約されていない |
RESET | 予約されていない | 予約されていない | 予約されていない |
RESPECT | 予約されていない | 予約されていない | 予約されていない |
RESTRICT | 予約されていない | 予約されていない | 予約されていない |
REVOKE | 予約されていない | 予約されていない | 予約済み |
RIGHT | 予約済み | 厳密で予約されていない | 予約済み |
RLIKE | 予約されていない | 予約されていない | 予約されていない |
ROLE | 予約されていない | 予約されていない | 予約されていない |
ROLES | 予約されていない | 予約されていない | 予約されていない |
ROLLBACK | 予約されていない | 予約されていない | 予約済み |
ROLLUP | 予約されていない | 予約されていない | 予約済み |
ROW | 予約されていない | 予約されていない | 予約済み |
ROWS | 予約されていない | 予約されていない | 予約済み |
方式 | 予約されていない | 予約されていない | 予約されていない |
SCHEMAS | 予約されていない | 予約されていない | キーワードではない |
SECOND | 予約されていない | 予約されていない | 予約されていない |
SELECT | 予約済み | 予約されていない | 予約済み |
SEMI | 予約されていない | 厳密で予約されていない | 予約されていない |
SEPARATED | 予約されていない | 予約されていない | 予約されていない |
SERDE | 予約されていない | 予約されていない | 予約されていない |
SERDEPROPERTIES | 予約されていない | 予約されていない | 予約されていない |
SESSION_USER | 予約済み | 予約されていない | 予約済み |
SET | 予約されていない | 予約されていない | 予約済み |
SETS | 予約されていない | 予約されていない | 予約されていない |
SHARE | 予約されていない | 予約されていない | 予約されていない |
SHARES | 予約されていない | 予約されていない | 予約されていない |
SHOW | 予約されていない | 予約されていない | 予約されていない |
SKEWED | 予約されていない | 予約されていない | 予約されていない |
SOME | 予約済み | 予約されていない | 予約済み |
SORT | 予約されていない | 予約されていない | 予約されていない |
SORTED | 予約されていない | 予約されていない | 予約されていない |
START | 予約されていない | 予約されていない | 予約済み |
STATISTICS | 予約されていない | 予約されていない | 予約されていない |
STORED | 予約されていない | 予約されていない | 予約されていない |
STRATIFY | 予約されていない | 予約されていない | 予約されていない |
STRUCT | 予約されていない | 予約されていない | 予約されていない |
SUBSTR | 予約されていない | 予約されていない | 予約されていない |
SUBSTRING | 予約されていない | 予約されていない | 予約されていない |
同期 | 予約されていない | 予約されていない | 予約されていない |
TABLE | 予約済み | 予約されていない | 予約済み |
TABLES | 予約されていない | 予約されていない | 予約されていない |
TABLESAMPLE | 予約されていない | 予約されていない | 予約済み |
TBLPROPERTIES | 予約されていない | 予約されていない | 予約されていない |
TEMP | 予約されていない | 予約されていない | キーワードではない |
TEMPORARY | 予約されていない | 予約されていない | 予約されていない |
TERMINATED | 予約されていない | 予約されていない | 予約されていない |
THEN | 予約済み | 予約されていない | 予約済み |
TIME | 予約済み | 予約されていない | 予約済み |
TO | 予約済み | 予約されていない | 予約済み |
TOUCH | 予約されていない | 予約されていない | 予約されていない |
TRAILING | 予約済み | 予約されていない | 予約済み |
TRANSACTION | 予約されていない | 予約されていない | 予約されていない |
TRANSACTIONS | 予約されていない | 予約されていない | 予約されていない |
TRANSFORM | 予約されていない | 予約されていない | 予約されていない |
TRIM | 予約されていない | 予約されていない | 予約されていない |
TRUE | 予約されていない | 予約されていない | 予約済み |
TRUNCATE | 予約されていない | 予約されていない | 予約済み |
TRY_CAST | 予約されていない | 予約されていない | 予約されていない |
TYPE | 予約されていない | 予約されていない | 予約されていない |
UNARCHIVE | 予約されていない | 予約されていない | 予約されていない |
UNBOUNDED | 予約されていない | 予約されていない | 予約されていない |
UNCACHE | 予約されていない | 予約されていない | 予約されていない |
UNION | 予約済み | 厳密で予約されていない | 予約済み |
UNIQUE | 予約済み | 予約されていない | 予約済み |
UNKNOWN | 予約済み | 予約されていない | 予約済み |
UNLOCK | 予約されていない | 予約されていない | 予約されていない |
UNSET | 予約されていない | 予約されていない | 予約されていない |
UPDATE | 予約されていない | 予約されていない | 予約済み |
USE | 予約されていない | 予約されていない | 予約されていない |
USER | 予約済み | 予約されていない | 予約済み |
USING | 予約済み | 厳密で予約されていない | 予約済み |
VALUES | 予約されていない | 予約されていない | 予約済み |
VIEW | 予約されていない | 予約されていない | 予約されていない |
VIEWS | 予約されていない | 予約されていない | 予約されていない |
WHEN | 予約済み | 予約されていない | 予約済み |
WHERE | 予約済み | 予約されていない | 予約済み |
WINDOW | 予約されていない | 予約されていない | 予約済み |
WITH | 予約済み | 予約されていない | 予約済み |
YEAR | 予約されていない | 予約されていない | 予約されていない |
ZONE | 予約されていない | 予約されていない | 予約されていない |