Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 CREATE TABLE [USING] Syntax, um sie zu analysieren und standardmäßig eine Delta-Tabelle zu erstellen.
Parameter
table_identifier
Ein Tabellenname, der optional mit einem Schemanamen qualifiziert werden kann.
Syntax:
[schema_name.] table_nameEXTERNAL
Definiert die Tabelle unter Verwendung des in
LOCATIONangegebenen Pfads.PARTITIONIERT VON
Partitioniert die Tabelle anhand der angegebenen Spalten.
ZEILENFORMAT
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
DELIMITEDkann verwendet werden, um das native SerDe sowie das Trennzeichen, Escapezeichen, NULL-Zeichen usw. anzugeben.FELDER GETRENNT DURCH
Dient zum Angeben eines Spaltentrennzeichens.
SAMMLELEMENTE MIT TRENNZEICHEN
Dient zum Angeben des Trennzeichens für Sammlungselemente.
ZUORDNEN VON SCHLÜSSELN, DIE BEENDET WERDEN
Dient zum Angeben des Trennzeichens für Zuordnungsschlüssel.
ZEILEN BEENDEN MIT
Dient zum Angeben des Zeilentrennzeichens.
NULL DEFINIERT ALS
Dient zum Angeben des spezifischen Werts für NULL.
ESCAPEZEICHEN VON
Definiert den Escapemechanismus.
SAMMLELEMENTE MIT TRENNZEICHEN
Definiert das Trennzeichen für Sammlungselemente.
ZUORDNEN VON SCHLÜSSELN, DIE BEENDET WERDEN
Definiert das Trennzeichen für Zuordnungsschlüssel.
ZEILEN BEENDEN MIT
Definiert das Zeilentrennzeichen.
NULL DEFINIERT ALS
Definiert den spezifischen Wert für
NULL.GESPEICHERT ALS
Das Dateiformat für die Tabelle. Zu den verfügbaren Formaten gehören
TEXTFILE,SEQUENCEFILE,RCFILE,ORC,PARQUETundAVRO. Alternativ können Sie auch überINPUTFORMATundOUTPUTFORMATein eigenes Ein- und Ausgabeformat angeben. FürTEXTFILEkönnen nurSEQUENCEFILE,RCFILEundROW FORMAT SERDE, fürTEXTFILEnurROW FORMAT DELIMITEDverwendet 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/';