適用対象:
Databricks Runtime
Hive 形式を使用してテーブルを定義します。
構文
CREATE [ EXTERNAL ] TABLE [ IF NOT EXISTS ] table_identifier
[ ( col_name1[:] col_type1 [ COMMENT col_comment1 ], ... ) ]
[ COMMENT table_comment ]
[ PARTITIONED BY ( col_name2[:] col_type2 [ COMMENT col_comment2 ], ... )
| ( col_name1, col_name2, ... ) ]
[ ROW FORMAT row_format ]
[ STORED AS file_format ]
[ LOCATION path ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
[ AS select_statement ]
row_format:
: SERDE serde_class [ WITH SERDEPROPERTIES (k1=v1, k2=v2, ... ) ]
| DELIMITED [ FIELDS TERMINATED BY fields_terminated_char [ ESCAPED BY escaped_char ] ]
[ COLLECTION ITEMS TERMINATED BY collection_items_terminated_char ]
[ MAP KEYS TERMINATED BY map_key_terminated_char ]
[ LINES TERMINATED BY row_terminated_char ]
[ NULL DEFINED AS null_char ]
列定義句と AS SELECT 句の間の句は、任意の順序で表示できます。 たとえば、COMMENT table_comment の後に TBLPROPERTIES を記述できます。
Note
STORED AS または ROW FORMAT のいずれかの句を指定する必要があります。 それ以外の場合、SQL パーサーは CREATE TABLE [USING] 構文を使用して解析し、既定で Delta テーブルを作成します。
パラメーター
table_identifier
テーブル名。スキーマ名を使用して修飾します (省略可能)。
構文:
[schema_name.] table_nameEXTERNAL
LOCATIONで指定されたパスを使用してテーブルを定義します。でパーティション分割
指定された列でテーブルをパーティション分割します。
行フォーマット
特定のテーブルのカスタム SerDe を指定するには、
SERDE句を使用します。 それ以外の場合は、DELIMITED句を用いてネイティブ SerDe を使用し、区切り記号、エスケープ文字、null 文字などを指定します。SERDE
特定のテーブルのカスタム SerDe を指定します。
serde_class
カスタム SerDe の完全修飾クラス名を指定します。
SERDEPROPERTIES
SerDe 定義のタグ付けに使用されるキーと値のペアの一覧。
DELIMITED
DELIMITED句を使用すると、ネイティブ SerDe を指定し、区切り記号、エスケープ文字、null 文字などを明示することができます。フィールドの区切り文字
列の区切りを定義するために使用されます。
で終了するコレクション項目
コレクション項目の区切りを定義するために使用されます。
終了するキーをマップする
マップ キーの区切りを定義するために使用されます。
行の終端指定
行の区切りを定義するために使用されます。
NULL と定義する
NULL を表す特定の値を定義するために使用されます。
エスケープされた担当者
エスケープ メカニズムを定義します。
で終了するコレクション項目
コレクション項目の区切りを定義します。
終了するキーをマップする
マップ キーの区切りを定義します。
行の終了を
行の区切りを定義します。
NULL が定義されている
NULLを表す特定の値を定義します。として保存
テーブルのファイル形式。 使用できる形式には、
TEXTFILE、SEQUENCEFILE、RCFILE、ORC、PARQUET、AVROがあります。 または、INPUTFORMATとOUTPUTFORMATを使用して、独自の入力形式と出力形式を指定することもできます。TEXTFILEで使用できるのはSEQUENCEFILE、RCFILE、ROW FORMAT SERDEの形式のみです。また、TEXTFILEで使用できるのはROW FORMAT DELIMITEDのみです。LOCATION
テーブル データが格納されているディレクトリへのパス。これは、分散ストレージ上のパスである場合があります。
COMMENT
テーブルについて説明する文字列リテラル。
TBLPROPERTIES
テーブル定義のタグ付けに使用されるキーと値のペアの一覧。
AS セレクトステートメント
select ステートメントのデータを使用してテーブルを設定します。
例
--Use hive format
CREATE TABLE student (id INT, name STRING, age INT) STORED AS ORC;
--Use data from another table
CREATE TABLE student_copy STORED AS ORC
AS SELECT * FROM student;
--Specify table comment and properties
CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
STORED AS ORC
TBLPROPERTIES ('foo'='bar');
--Specify table comment and properties with different clauses order
CREATE TABLE student (id INT, name STRING, age INT)
STORED AS ORC
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
--Create partitioned table
CREATE TABLE student (id INT, name STRING)
PARTITIONED BY (age INT)
STORED AS ORC;
--Create partitioned table with different clauses order
CREATE TABLE student (id INT, name STRING)
STORED AS ORC
PARTITIONED BY (age INT);
--Use Row Format and file format
CREATE TABLE student (id INT, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
--Use complex datatype
CREATE EXTERNAL TABLE family(
name STRING,
friends ARRAY<STRING>,
children MAP<STRING, INT>,
address STRUCT<street: STRING, city: STRING>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\'
COLLECTION ITEMS TERMINATED BY '_'
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
NULL DEFINED AS 'foonull'
STORED AS TEXTFILE
LOCATION '/tmp/family/';
--Use predefined custom SerDe
CREATE TABLE avroExample
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES ('avro.schema.literal'='{ "namespace": "org.apache.hive",
"name": "first_schema",
"type": "record",
"fields": [
{ "name":"string1", "type":"string" },
{ "name":"string2", "type":"string" }
] }');
--Use personalized custom SerDe(we may need to `ADD JAR xxx.jar` first to ensure we can find the serde_class,
--or you may run into `CLASSNOTFOUND` exception)
ADD JAR /tmp/hive_serde_example.jar;
CREATE EXTERNAL TABLE family (id INT, name STRING)
ROW FORMAT SERDE 'com.ly.spark.serde.SerDeExample'
STORED AS INPUTFORMAT 'com.ly.spark.example.serde.io.SerDeExampleInputFormat'
OUTPUTFORMAT 'com.ly.spark.example.serde.io.SerDeExampleOutputFormat'
LOCATION '/tmp/family/';