CREATE TABLE med Hive-format
Gäller för: Databricks Runtime
Definierar en table med hjälp av Hive-format.
Syntax
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 ]
Satserna mellan column definitionssatsen och AS SELECT
-satsen kan visas i valfri ordning. Du kan till exempel skriva COMMENT table_comment
efter TBLPROPERTIES
.
Kommentar
Du måste ange antingen STORED AS
eller-satsen ROW FORMAT
. Annars använder SQL-parsern CREATE TABLE [USING] syntax för att parsa den och skapar en Delta-table som standard.
Parameters
table_identifier
Ett table namn, möjligen kvalificerat med ett schema namn.
Syntax:
[schema_name.] table_name
EXTERN
Definierar table med hjälp av sökvägen i
LOCATION
.PARTITIONERAD AV
Partitioner table enligt den angivna columns.
RADFORMAT
Använd
SERDE
-satsen för att ange en anpassad SerDe för en table. Annars använder duDELIMITED
-satsen för att använda den interna SerDe och ange avgränsare, escape-tecken, null-tecken och så vidare.SERDE
Specificerar en anpassad SerDe för en table.
serde_class
Anger ett fullständigt kvalificerat klassnamn för en anpassad SerDe.
SERDEPROPERTIES
Ett list nyckel-värdepar som används för att tagga SerDe-definitionen.
AVGRÄNSAD
Satsen
DELIMITED
kan användas för att ange den interna SerDe och ange avgränsare, escape-tecken, null-tecken och så vidare.FÄLT SOM AVSLUTATS AV
Används för att definiera en column avgränsare.
SAMLINGSOBJEKT AVSLUTADE AV
Används för att definiera en avgränsare för samlingsobjekt.
MAP-NYCKLAR AVSLUTADES AV
Används för att definiera en mappningsnyckelavgränsare.
RADER SOM AVSLUTATS AV
Används för att definiera en radavgränsare.
NULL DEFINIERAT SOM
Används för att definiera det specifika värdet för NULL.
ESCAPE BY
Definiera escape-mekanismen.
SAMLINGSOBJEKT AVSLUTADE AV
Definiera en avgränsare för samlingsobjekt.
MAP-NYCKLAR AVSLUTADES AV
Definiera en mappningsnyckelavgränsare.
RADER SOM AVSLUTATS AV
Definiera en radavgränsare.
NULL DEFINIERAT SOM
Definiera det specifika värdet för
NULL
.LAGRAD SOM
Filformatet för table. Tillgängliga format är
TEXTFILE
, ,SEQUENCEFILE
RCFILE
,ORC
,PARQUET
ochAVRO
. Du kan också ange egna in- och utdataformat viaINPUTFORMAT
ochOUTPUTFORMAT
. Endast formatTEXTFILE
,SEQUENCEFILE
ochRCFILE
kan användas medROW FORMAT SERDE
och kan endastTEXTFILE
användas medROW FORMAT DELIMITED
.PLATS
Sökvägen till katalogen där wheretable-data lagras, vilket kan vara en sökväg på distribuerad lagring.
KOMMENTAR
En strängliteral som beskriver table.
TBLPROPERTIES
Ett list nyckel-/värde-par som används för att tagga table-definition.
AS-select_statement
Fyller i table med hjälp av data från select-instruktionen.
Exempel
--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/';