Aracılığıyla paylaş


CREATE TABLE, Hive biçiminde

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks Runtime

Hive biçimini kullanarak bir tablo tanımlar.

Sözdizimi

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 ]

Sütun tanımı ifadesi ile AS SELECT ifadesi arasındaki ifadeler herhangi bir sırada görünebilir. Örneğin, TBLPROPERTIES sonra COMMENT table_comment yazabilirsiniz.

Dikkat

STORED AS veya ROW FORMAT yan tümcesini belirtmeniz gerekir. Aksi takdirde, SQL ayrıştırıcısı ayrıştırmak için [USING] CREATE TABLE söz dizimini kullanır ve varsayılan olarak bir Delta tablosu oluşturur.

Parametreler

  • table_identifier

    İsteğe bağlı olarak şema adıyla nitelenmiş bir tablo adı.

    Sözdizimi:[schema_name.] table_name

  • DIŞ

    LOCATIONiçinde sağlanan yolu kullanarak tabloyu tanımlar.

  • BÖLÜMLERE GÖRE AYRIM

    Tabloyu belirtilen sütunlara göre bölümler.

  • Satır Biçimi

    Bir tablo için özel bir SerDe belirtmek için SERDE yan tümcesini kullanın. Aksi takdirde, yerel SerDe'yi kullanmak ve sınırlandırıcı, kaçış karakteri, null karakter vb. belirtmek için DELIMITED yan tümcesini kullanın.

  • SERDE

    Bir tablo için özel bir SerDe belirtir.

  • serde_class

    Özel bir SerDe'nin tam sınıf adını belirtir.

  • SERDEPROPERTIES

    SerDe tanımını etiketlemek için kullanılan anahtar-değer çiftlerinin listesi.

  • SINIRLANDIRILMIŞ

    DELIMITED yan tümcesi yerel SerDe'yi belirtmek ve sınırlayıcıyı, kaçış karakterini, null karakteri vb. belirtmek için kullanılabilir.

  • SONLANDıRıLAN ALANLAR

    Bir sütun ayırıcı tanımlamak için kullanılır.

  • SONLANDıRıLAN KOLEKSIYON ÖĞELERI

    Koleksiyon öğesi ayırıcısı tanımlamak için kullanılır.

  • HARıTA ANAHTARLARı, KARAKTERLE SONLANDıRıLıR

    Harita anahtarı ayırıcısı tanımlamak için kullanılır.

  • SONLANDIRILAN SATIRLAR

    Satır ayırıcı tanımlamak için kullanılır.

  • NULL OLARAK TANıMLANMıŞ

    NULL için belirli bir değeri tanımlamak için kullanılır.

  • KAÇTI

    Kaçış mekanizmasını tanımlayın.

  • SONLANDıRıLAN KOLEKSIYON ÖĞELERI

    Koleksiyon öğesi ayırıcısı tanımlayın.

  • SONLANDıRıLAN EŞLEME ANAHTARLARı

    Harita anahtarı ayırıcı tanımlayın.

  • SATIRLAR ‹karakter› İLE SONLANDIRILIR

    Satır ayırıcısı tanımlayın.

  • NULL OLARAK TANıMLANMıŞ

    için NULLbelirli bir değeri tanımlayın.

  • OLARAK DEPOLANDI

    Tablonun dosya biçimi. Kullanılabilir biçimler , TEXTFILE, SEQUENCEFILE, RCFILE, ORCve PARQUETbiçimlerini içerirAVRO. Alternatif olarak ve aracılığıyla INPUTFORMATOUTPUTFORMATkendi giriş ve çıkış biçimlerinizi belirtebilirsiniz. Yalnızca TEXTFILE, SEQUENCEFILE ve RCFILE biçimleri ROW FORMAT SERDE ile kullanılabilir ve yalnızca TEXTFILEROW FORMAT DELIMITED ile kullanılabilir.

  • YER

    Tablo verilerinin depolandığı dizinin yolu. Dağıtılmış depolamada da bir yol olabilir.

  • YORUM

    Tabloyu tanımlayan bir sabit dize.

  • TBLPROPERTIES

    Tablo tanımını etiketlemek için kullanılan anahtar-değer çiftlerinin listesi.

  • AS select_statement

    Select deyimindeki verileri kullanarak tabloyu doldurur.

Örnekler

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