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
。
備註
您必須指定 STORED AS
或 ROW FORMAT
條款。 否則,SQL 剖析器會使用 CREATE TABLE [USING] 語法來剖析它,並預設建立 Delta 數據表。
參數
table_identifier
數據表名稱,選擇性地以架構名稱限定。
語法:
[schema_name.] table_name
EXTERNAL
使用
LOCATION
中提供的路徑來定義數據表。分割依據
透過指定的欄分割資料表。
行格式
使用
SERDE
子句為一個資料表指定自訂的 SerDe。 否則,請使用DELIMITED
子句來使用原生 SerDe,並指定分隔符、逸出字元、Null 字元等等。SERDE
指定一個資料表的自訂 SerDe。
serde_class
指定自訂 SerDe 的完整類別名稱。
SERDEPROPERTIES
用來標記 SerDe 定義的索引鍵/值組清單。
分隔
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
。位置
儲存表格數據的目錄路徑,這可能是分散式儲存上的路徑。
評論
用於描述表的字串字面值。
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/';