CREATE TABLE mit Hive-Format
Gilt für: Databricks Runtime
Definiert eine Tabelle mithilfe des Hive-Formats.
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 ]
Die Klauseln zwischen der Spaltendefinitionsklausel und AS SELECT
-Klausel können eine beliebige Reihenfolge haben. Sie können zum Beispiel COMMENT table_comment
hinter TBLPROPERTIES
schreiben.
Hinweis
Sie müssen entweder die STORED AS
oder ROW FORMAT
-Klausel angeben. Andernfalls verwendet der SQL-Parser die Syntax CREATE TABLE [USING], um sie zu analysieren,und erstellt standardmäßig eine Delta-Tabelle.
Parameter
table_identifier
Ein Tabellenname, der optional mit einem Schemanamen qualifiziert werden kann.
Syntax:
[schema_name.] table_name
EXTERNAL
Definiert die Tabelle unter Verwendung des in
LOCATION
angegebenen Pfads.PARTITIONED BY
Partitioniert die Tabelle anhand der angegebenen Spalten.
ROW FORMAT
Verwenden Sie die
SERDE
-Klausel, um ein benutzerdefiniertes Serialisierungs-/Deserialisierungsprogramm (SerDe) für eine Tabelle anzugeben. Verwenden Sie andernfalls dieDELIMITED
-Klausel, um die native Serailisierung/Deserialisierung zu verwenden, und geben Sie das Trenn-, Escape- und NULL-Zeichen usw. an.SERDE
Gibt ein benutzerdefiniertes SerDe für eine Tabelle an.
serde_class
Gibt einen vollqualifizierter Klassenname eines benutzerdefinierten SerDe an.
SERDEPROPERTIES
Eine Liste von Schlüssel-Wert-Paaren, die zum Markieren der SerDe-Definition verwendet werden.
DELIMITED
Die Klausel
DELIMITED
kann verwendet werden, um das native SerDe sowie das Trennzeichen, Escapezeichen, NULL-Zeichen usw. anzugeben.FIELDS TERMINATED BY
Dient zum Angeben eines Spaltentrennzeichens.
COLLECTION ITEMS TERMINATED BY
Dient zum Angeben des Trennzeichens für Sammlungselemente.
MAP KEYS TERMINATED BY
Dient zum Angeben des Trennzeichens für Zuordnungsschlüssel.
LINES TERMINATED BY
Dient zum Angeben des Zeilentrennzeichens.
NULL DEFINED AS
Dient zum Angeben des spezifischen Werts für NULL.
ESCAPED BY
Definiert den Escapemechanismus.
COLLECTION ITEMS TERMINATED BY
Definiert das Trennzeichen für Sammlungselemente.
MAP KEYS TERMINATED BY
Definiert das Trennzeichen für Zuordnungsschlüssel.
LINES TERMINATED BY
Definiert das Zeilentrennzeichen.
NULL DEFINED AS
Definiert den spezifischen Wert für
NULL
.STORED AS
Das Dateiformat für die Tabelle. Zu den verfügbaren Formaten gehören
TEXTFILE
,SEQUENCEFILE
,RCFILE
,ORC
,PARQUET
undAVRO
. Alternativ können Sie auch überINPUTFORMAT
undOUTPUTFORMAT
ein eigenes Ein- und Ausgabeformat angeben. FürROW FORMAT SERDE
können nurTEXTFILE
,SEQUENCEFILE
undRCFILE
, fürROW FORMAT DELIMITED
nurTEXTFILE
verwendet werden.LOCATION
Pfad zu dem Verzeichnis, in dem Tabellendaten gespeichert werden. Dabei kann es sich um einen Pfad im verteilten Speicher handeln.
COMMENT
Ein Zeichenfolgenliteral zum Beschreiben der Tabelle.
TBLPROPERTIES
Eine Liste von Schlüssel-Wert-Paaren, die zum Markieren der Tabellendefinition verwendet werden.
AS select_statement
Füllt die Tabelle mithilfe der Daten aus der SELECT-Anweisung auf.
Beispiele
--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/';