Partager via


CREATE TABLE avec le format Hive

S’applique à : coche marquée oui 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 clause DELIMITED 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 et AVRO. Vous pouvez également spécifier vos propres formats d’entrée et de sortie à l’aide de INPUTFORMAT et OUTPUTFORMAT. Seuls les formats TEXTFILE, SEQUENCEFILE et RCFILE peuvent être utilisés avec ROW FORMAT SERDE, et seul le format TEXTFILE peut être utilisé avec ROW 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/';