Delen via


CREATE TABLE met Hive-indeling

Van toepassing op: vinkje als ja aan 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 de DELIMITED 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 AVROPARQUET. ORCRCFILESEQUENCEFILETEXTFILE U kunt ook uw eigen indelingen voor invoer en uitvoer opgeven via INPUTFORMAT en OUTPUTFORMAT. Alleen indelingen TEXTFILE, SEQUENCEFILEen RCFILE kunnen worden gebruikt met ROW FORMAT SERDE en alleen TEXTFILE met ROW 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/';