CREATE TABLE met Hive-indeling
Van toepassing op: Databricks Runtime
Definieert een tabel met hive-indeling.
Syntaxis
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 ]
De componenten tussen de kolomdefinitiecomponent en de AS SELECT
component kunnen in elke volgorde worden weergegeven. U kunt bijvoorbeeld schrijven COMMENT table_comment
na TBLPROPERTIES
.
Notitie
U moet de STORED AS
of ROW FORMAT
component opgeven. Anders gebruikt de SQL-parser de syntaxis CREATE TABLE [USING] om deze te parseren en wordt standaard een Delta-tabel gemaakt.
Parameters
table_identifier
Een tabelnaam, eventueel gekwalificeerd met een schemanaam.
Syntaxis:
[schema_name.] table_name
EXTERN
Definieert de tabel met behulp van het pad dat is opgegeven in
LOCATION
.GEPARTITIONEERD DOOR
Partitioneert de tabel op basis van de opgegeven kolommen.
RIJOPMAAK
Gebruik de
SERDE
component om een aangepaste SerDe voor één tabel op te geven. Gebruik anders de component om deDELIMITED
systeemeigen SerDe te gebruiken en geef het scheidingsteken, escapeteken, null-teken enzovoort op.SERDE
Hiermee geeft u een aangepaste SerDe voor één tabel.
serde_class
Hiermee geeft u een volledig gekwalificeerde klassenaam van een aangepaste SerDe.
SERDEPROPERTIES
Een lijst met sleutel-waardeparen die worden gebruikt om de SerDe-definitie te taggen.
GESCHEIDEN
De
DELIMITED
component kan worden gebruikt om de systeemeigen SerDe op te geven en het scheidingsteken, escape-teken, null-teken enzovoort op te geven.VELDEN BEËINDIGD DOOR
Wordt gebruikt om een kolomscheidingsteken te definiëren.
VERZAMELINGSITEMS BEËINDIGD DOOR
Wordt gebruikt om een scheidingsteken voor verzamelingsitems te definiëren.
KAARTSLEUTELS BEËINDIGD DOOR
Wordt gebruikt om een scheidingsteken voor kaartsleutels te definiëren.
REGELS BEËINDIGD DOOR
Wordt gebruikt om een rijscheidingsteken te definiëren.
NULL GEDEFINIEERD ALS
Wordt gebruikt om de specifieke waarde voor NULL te definiëren.
ONTSNAPT DOOR
Definieer het escape-mechanisme.
VERZAMELINGSITEMS BEËINDIGD DOOR
Definieer een scheidingsteken voor verzamelingsitems.
KAARTSLEUTELS BEËINDIGD DOOR
Definieer een scheidingsteken voor kaartsleutels.
REGELS BEËINDIGD DOOR
Definieer een rijscheidingsteken.
NULL GEDEFINIEERD ALS
Definieer de specifieke waarde voor
NULL
.OPGESLAGEN ALS
De bestandsindeling voor de tabel. Beschikbare indelingen zijn onder andere , , , , en
AVRO
PARQUET
.ORC
RCFILE
SEQUENCEFILE
TEXTFILE
U kunt ook uw eigen indelingen voor invoer en uitvoer opgeven viaINPUTFORMAT
enOUTPUTFORMAT
. Alleen indelingenTEXTFILE
,SEQUENCEFILE
enRCFILE
kunnen worden gebruikt metROW FORMAT SERDE
en alleenTEXTFILE
metROW FORMAT DELIMITED
.PLAATS
Pad naar de map waarin tabelgegevens worden opgeslagen. Dit kan een pad zijn voor gedistribueerde opslag.
COMMENTAAR
Een letterlijke tekenreeks om de tabel te beschrijven.
TBLPROPERTIES
Een lijst met sleutel-waardeparen die worden gebruikt om de tabeldefinitie te taggen.
AS-select_statement
Hiermee wordt de tabel gevuld met behulp van de gegevens uit de select-instructie.
Voorbeelden
--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/';