Hive 形式を使用した CREATE TABLE
適用対象: 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
句の間の句は、任意の順序で表示できます。 たとえば、TBLPROPERTIES
の後に COMMENT table_comment
を記述できます。
Note
STORED AS
または ROW FORMAT
のいずれかの句を指定する必要があります。 それ以外の場合、SQL パーサーは既定で CREATE TABLE [USING] 構文を使用して解析を行い、Delta テーブルを作成します。
パラメーター
table_identifier
テーブル名。スキーマ名を使用して修飾します (省略可能)。
構文:
[schema_name.] table_name
EXTERNAL
LOCATION
で指定されたパスを使用してテーブルを定義します。PARTITIONED BY
指定された列でテーブルをパーティション分割します。
ROW FORMAT
特定のテーブルのカスタム SerDe を指定するには、
SERDE
句を使用します。 それ以外の場合は、DELIMITED
句を用いてネイティブ SerDe を使用し、区切り記号、エスケープ文字、null 文字などを指定します。SERDE
特定のテーブルのカスタム SerDe を指定します。
serde_class
カスタム SerDe の完全修飾クラス名を指定します。
SERDEPROPERTIES
SerDe 定義のタグ付けに使用されるキーと値のペアの一覧。
DELIMITED
DELIMITED
句を使用すると、ネイティブ SerDe を指定し、区切り記号、エスケープ文字、null 文字などを明示することができます。FIELDS TERMINATED BY
列の区切りを定義するために使用されます。
COLLECTION ITEMS TERMINATED BY
コレクション項目の区切りを定義するために使用されます。
MAP KEYS TERMINATED BY
マップ キーの区切りを定義するために使用されます。
LINES TERMINATED BY
行の区切りを定義するために使用されます。
NULL DEFINED AS
NULL を表す特定の値を定義するために使用されます。
ESCAPED BY
エスケープ メカニズムを定義します。
COLLECTION ITEMS TERMINATED BY
コレクション項目の区切りを定義します。
MAP KEYS TERMINATED BY
マップ キーの区切りを定義します。
LINES TERMINATED BY
行の区切りを定義します。
NULL DEFINED AS
NULL
を表す特定の値を定義します。STORED AS
テーブルのファイル形式。 使用できる形式には、
TEXTFILE
、SEQUENCEFILE
、RCFILE
、ORC
、PARQUET
、AVRO
があります。 または、INPUTFORMAT
とOUTPUTFORMAT
を使用して、独自の入力形式と出力形式を指定することもできます。ROW FORMAT SERDE
で使用できるのはTEXTFILE
、SEQUENCEFILE
、RCFILE
の形式のみです。また、ROW FORMAT DELIMITED
で使用できるのはTEXTFILE
のみです。LOCATION
テーブル データが格納されているディレクトリへのパス。これは、分散ストレージ上のパスである場合があります。
COMMENT
テーブルについて説明する文字列リテラル。
TBLPROPERTIES
テーブル定義のタグ付けに使用されるキーと値のペアの一覧。
AS select_statement
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/';