CREATE TABLE avec le format Hive
S’applique à : Databricks Runtime
Définit une table à l’aide du format Hive.
Syntaxe
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 ]
Les clauses situées entre la clause de définition de colonne et la clause AS SELECT
peuvent apparaître dans n'importe quel ordre. Par exemple, vous pouvez écrire COMMENT table_comment
après TBLPROPERTIES
.
Remarque
Vous devez spécifier la clause STORED AS
ou ROW FORMAT
. Sinon, l'analyseur SQL utilise la syntaxe CREATE TABLE [USING] pour l'analyser et crée une table Delta par défaut.
Paramètres
table_identifier
Nom de table, éventuellement qualifié avec un nom de schéma.
Syntaxe :
[schema_name.] table_name
EXTERNAL
Définit la table en utilisant le chemin fourni dans
LOCATION
.PARTITIONNÉ PAR
Partitionne la table créée par les colonnes spécifiées.
ROW FORMAT
Utilisez la clause
SERDE
pour spécifier une infrastructure SerDe personnalisée pour une table. Sinon, utilisez la clauseDELIMITED
pour désigner l’infrastructure SerDe native natif et spécifier le délimiteur, le caractère d’échappement, le caractère Null, etc.SERDE
Spécifie un SerDe personnalisé pour une table.
serde_class
Spécifie un nom de classe complet d'un SerDe personnalisé.
SERDEPROPERTIES
Liste de paires clé-valeur utilisées pour étiqueter la définition de SerDe.
DELIMITED
Vous pouvez utiliser la clause
DELIMITED
pour spécifier l’élément SerDe natif et indiquer le délimiteur, le caractère d’échappement, le caractère Null, etc.FIELDS TERMINATED BY
Permet de définir un séparateur de colonnes.
COLLECTION ITEMS TERMINATED BY
Permet de définir un séparateur d'éléments de collection.
MAP KEYS TERMINATED BY
Permet de définir un séparateur de clés de mappage.
LINES TERMINATED BY
Permet de définir un séparateur de lignes.
NULL DEFINED AS
Permet de définir la valeur spécifique pour NULL.
ESCAPED BY
Définissez le mécanisme d’échappement.
COLLECTION ITEMS TERMINATED BY
Définissez un séparateur d'éléments de collection.
MAP KEYS TERMINATED BY
Définissez un séparateur de clés de mappage.
LINES TERMINATED BY
Définissez un séparateur de lignes.
NULL DEFINED AS
Définissez la valeur spécifique pour
NULL
.STORED AS
Format de fichier pour la table. Les formats disponibles sont
TEXTFILE
,SEQUENCEFILE
,RCFILE
,ORC
,PARQUET
etAVRO
. Vous pouvez également spécifier vos propres formats d’entrée et de sortie à l’aide deINPUTFORMAT
etOUTPUTFORMAT
. Seuls les formatsTEXTFILE
,SEQUENCEFILE
etRCFILE
peuvent être utilisés avecROW FORMAT SERDE
, et seul le formatTEXTFILE
peut être utilisé avecROW FORMAT DELIMITED
.LOCATION
Chemin d’accès au répertoire sous lequel les données de table sont stockées, qui peut être un chemin d’accès sur le stockage distribué.
COMMENT
Littéral de chaîne pour décrire la colonne.
TBLPROPERTIES
Liste de paires clé-valeur utilisées pour étiqueter la définition de table.
AS select_statement
Remplit la table à l’aide des données de l’instruction SELECT.
Exemples
--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/';