مشاركة عبر


إنشاء جدول بتنسيق Hive

ينطبق على: وضع علامة Databricks Runtime

تعريف جدول باستخدام تنسيق Hive.

بناء الجملة

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 ]

يمكن أن تظهر العبارات بين عبارة تعريف العمود والعبارة AS SELECT بأي ترتيب. على سبيل المثال، يمكنك الكتابة COMMENT table_comment بعد TBLPROPERTIES.

إشعار

يجب تحديد إما عبارة STORED AS أو ROW FORMAT . وإلا، يستخدم محلل SQL بناء الجملة CREATE TABLE [USING] لتحليله وإنشاء جدول Delta بشكل افتراضي.

المعلمات

  • table_identifier

    اسم جدول، مؤهل اختياريا باسم مخطط.

    بناء الجملة: [schema_name.] table_name

  • خارجي

    تعريف الجدول باستخدام المسار المتوفر في LOCATION.

  • مقسمة حسب

    تقسيم الجدول حسب الأعمدة المحددة.

  • تنسيق الصف

    استخدم العبارة SERDE لتحديد SerDe مخصص لجدول واحد. بخلاف ذلك، استخدم العبارة DELIMITED لاستخدام SerDe الأصلي وحدد المحدد وحرف الإلغاء والحرف الفارغ وما إلى ذلك.

  • SERDE

    تحديد SerDe مخصص لجدول واحد.

  • serde_class

    تحديد اسم فئة مؤهل بالكامل ل SerDe مخصص.

  • خصائص SERDE

    قائمة أزواج قيم المفاتيح المستخدمة لوضع علامة على تعريف SerDe.

  • محدد

    DELIMITED يمكن استخدام العبارة لتحديد SerDe الأصلي وتحديد المحدد وحرف الإلغاء والحرف الفارغ وما إلى ذلك.

  • الحقول التي تم إنهاؤها بواسطة

    يستخدم لتعريف فاصل أعمدة.

  • تم إنهاء عناصر المجموعة بواسطة

    يستخدم لتعريف فاصل عناصر المجموعة.

  • تم إنهاء مفاتيح الخريطة بواسطة

    يستخدم لتعريف فاصل مفاتيح الخريطة.

  • الأسطر التي تم إنهاؤها بواسطة

    يستخدم لتعريف فاصل صف.

  • القيمة الخالية المعرفة على أنها

    يستخدم لتعريف القيمة المحددة ل NULL.

  • تم الهروب من قبل

    حدد آلية الإلغاء.

  • تم إنهاء عناصر المجموعة بواسطة

    تعريف فاصل عناصر المجموعة.

  • تم إنهاء مفاتيح الخريطة بواسطة

    تعريف فاصل مفاتيح الخريطة.

  • الأسطر التي تم إنهاؤها بواسطة

    تعريف فاصل صف.

  • القيمة الخالية المعرفة على أنها

    حدد القيمة المحددة ل NULL.

  • مخزن ك

    تنسيق الملف للجدول. تتضمن TEXTFILEالتنسيقات المتوفرة و RCFILESEQUENCEFILEوORCPARQUET.AVRO بدلا من ذلك، يمكنك تحديد تنسيقات الإدخال والإخراج الخاصة بك من خلال INPUTFORMAT و OUTPUTFORMAT. يمكن استخدام التنسيقات TEXTFILESEQUENCEFILEو RCFILE فقط مع ROW FORMAT SERDE و فقط TEXTFILE يمكن استخدامها مع ROW FORMAT DELIMITED.

  • مكان

    المسار إلى الدليل حيث يتم تخزين بيانات الجدول، والذي يمكن أن يكون مسارا على التخزين الموزع.

  • التعليق

    سلسلة حرفية لوصف الجدول.

  • TBLPROPERTIES

    قائمة أزواج قيم المفاتيح المستخدمة لوضع علامة على تعريف الجدول.

  • AS select_statement

    تعبئة الجدول باستخدام البيانات من عبارة التحديد.

الأمثلة

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