Hive格式使用 CREATE TABLE
適用於: Databricks Runtime
使用 Hive 格式定義 table。
語法
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 ]
column 定義子句與 AS SELECT
子句之間的子句可以依任何順序顯示。 例如,您可以在 之後COMMENT table_comment
撰寫 TBLPROPERTIES
。
注意
您必須指定 STORED AS
或 ROW FORMAT
子句。 否則,SQL 剖析器會使用 CREATE TABLE [USING] 語法來剖析它,並預設建立 Delta table。
Parameters
table_identifier
table 名稱,選擇性地以 schema 名稱限定。
語法:
[schema_name.] table_name
EXTERNAL
使用
LOCATION
中提供的路徑定義 table。PARTITIONED BY
依指定的 columns分割 table。
數據列格式
使用
SERDE
子句來指定一個 table的自定義 SerDe。 否則,請使用DELIMITED
子句來使用原生 SerDe,並指定分隔符、逸出字元、Null 字元等等。SERDE
指定一個自定義的 SerDe 用於 table。
serde_class
指定自訂 SerDe 的完整類別名稱。
SERDEPROPERTIES
用來標記 SerDe 定義的索引鍵/值組 list。
分隔
DELIMITED
子句可用來指定原生 SerDe,並指出分隔符、逸出字元、Null 字元等等。欄位終止者
用來定義 column 分隔符。
結束的集合專案
用來定義集合專案分隔符。
對應索引鍵終止者
用來定義對應索引鍵分隔符。
結束的行
用來定義數據列分隔符。
定義為 NULL
用來定義 NULL 的特定值。
逸出者
定義逸出機制。
結束的集合專案
定義收集項分隔符。
對應索引鍵終止者
定義對應索引鍵分隔符。
結束的行
定義數據列分隔符。
定義為 NULL
定義的特定值
NULL
。STORED AS
table的檔案格式。 可用的格式包括
TEXTFILE
、SEQUENCEFILE
、、RCFILE
ORC
、PARQUET
與AVRO
。 或者,您可以透過INPUTFORMAT
和OUTPUTFORMAT
指定自己的輸入和輸出格式。 只有格式TEXTFILE
、SEQUENCEFILE
、 和RCFILE
可以搭配ROW FORMAT SERDE
使用,而且只能TEXTFILE
搭配 使用ROW FORMAT DELIMITED
。位置
儲存數據的 wheretable 目錄路徑,這可能是分散式儲存的路徑。
評論
用於描述 table的字串字面量。
TBLPROPERTIES
用於標記 table 定義的 list 索引鍵/值組。
AS select_statement
使用來自 select 語句的數據填入 table。
範例
--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/';