BUAT TABEL dengan format Hive

Berlaku untuk:check marked yes Databricks Runtime

Menentukan tabel menggunakan format Apache Hive.

Sintaks

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 ]

Klausul antara klausul definisi kolom dan AS SELECT klausul dapat muncul dalam urutan apa pun. Misalnya, Anda dapat menulis COMMENT table_comment setelah TBLPROPERTIES.

Catatan

Anda harus menentukan klausa STORED AS atau ROW FORMAT . Jika tidak, parser SQL menggunakan sintaks BUAT TABEL [USING] untuk mengurainya dan membuat tabel Delta secara default.

Parameter

  • table_identifier

    Nama tabel, secara opsional memenuhi syarat dengan nama skema.

    Sintaks:[schema_name.] table_name

  • EKSTERNAL

    Menentukan tabel menggunakan jalur yang disediakan dalam LOCATION.

  • DIPARTISI OLEH

    Partisi tabel berdasarkan kolom yang ditentukan.

  • FORMAT BARIS

    Gunakan klausul SERDE untuk menentukan SerDe kustom satu tabel. Jika tidak, gunakan klausul DELIMITED untuk menggunakan SerDe asli dan menentukan pemisah, karakter escape, karakter null, dan sebagainya.

  • SERDE

    Menentukan SerDe kustom untuk satu tabel.

  • serde_class

    Menentukan nama kelas yang sepenuhnya memenuhi syarat dari SerDe kustom.

  • SERDEPROPERTIES

    Daftar pasangan nilai kunci yang digunakan untuk menandai definisi SerDe.

  • DELIMITED

    Klausul DELIMITED dapat digunakan untuk menentukan SerDe asli dan menyatakan pemisah, karakter escape, karakter null, dan sebagainya.

  • BIDANG DIHENTIKAN OLEH

    Digunakan untuk menentukan pemisah kolom.

  • ITEM KOLEKSI DIHENTIKAN OLEH

    Digunakan untuk menentukan pemisah item pengumpulan.

  • KUNCI PEMETAAN DIHENTIKAN OLEH

    Digunakan untuk menentukan pemisah kunci peta.

  • GARIS DIHENTIKAN OLEH

    Digunakan untuk menentukan pemisah baris.

  • NULL DITENTUKAN SEBAGAI

    Digunakan untuk menentukan nilai spesifik untuk NULL.

  • ESCAPED OLEH

    Tentukan mekanisme escape.

  • ITEM KOLEKSI DIHENTIKAN OLEH

    Menentukan pemisah item pengumpulan.

  • KUNCI PEMETAAN DIHENTIKAN OLEH

    Menentukan pemisah kunci peta.

  • GARIS DIHENTIKAN OLEH

    Menentukan pemisah baris.

  • NULL DITENTUKAN SEBAGAI

    Menentukan nilai spesifik untuk NULL.

  • DISIMPAN SEBAGAI

    Format file untuk tabel. Format yang tersedia meliputi TEXTFILE, SEQUENCEFILE, RCFILE, ORC, PARQUET, dan AVRO. Atau, Anda dapat menentukan format input dan output Anda sendiri melalui INPUTFORMAT dan OUTPUTFORMAT. Hanya format TEXTFILE, SEQUENCEFILE, dan RCFILE yang dapat digunakan dengan ROW FORMAT SERDE dan hanya TEXTFILE yang dapat digunakan dengan ROW FORMAT DELIMITED.

  • LOKASI

    Jalur ke direktori tempat data tabel disimpan, yang bisa menjadi jalur pada penyimpanan terdistribusi.

  • KOMENTAR

    String literal untuk menggambarkan tabel.

  • TBLPROPERTIES

    Daftar pasangan kunci nilai yang digunakan untuk menandai definisi tabel.

  • AS select_statement

    Mengisi tabel menggunakan data dari pernyataan pilih.

Contoh

--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/';