CREATE TABLE with Hive format (CREATE TABLE with Hive format)
Dotyczy: Databricks Runtime
Definiuje tabelę przy użyciu formatu Hive.
Składnia
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 ]
Klauzule między klauzulą definicji kolumny i klauzulą AS SELECT
mogą być wyświetlane w dowolnej kolejności. Można na przykład napisać COMMENT table_comment
po TBLPROPERTIES
.
Uwaga
Musisz określić klauzulę STORED AS
or ROW FORMAT
. W przeciwnym razie analizator SQL używa składni CREATE TABLE [USING] do analizowania jej i domyślnie tworzy tabelę delty.
Parametry
table_identifier
Nazwa tabeli, opcjonalnie kwalifikowana z nazwą schematu.
Składnia:
[schema_name.] table_name
ZEWNĘTRZNY
Definiuje tabelę przy użyciu ścieżki podanej w pliku
LOCATION
.PARTYCJONOWANE PRZEZ
Partycjonuje tabelę według określonych kolumn.
FORMAT WIERSZA
Użyj klauzuli
SERDE
, aby określić niestandardową metodę SerDe dla jednej tabeli. W przeciwnym razie użyjDELIMITED
klauzuli , aby użyć natywnego serde i określić ogranicznik, znak ucieczki, znak null itd.SERDE
Określa niestandardową funkcję SerDe dla jednej tabeli.
serde_class
Określa w pełni kwalifikowaną nazwę klasy niestandardowego serde.
SERDEPROPERTIES
Lista par klucz-wartość używana do tagowania definicji SerDe.
ROZDZIELANY
Klauzulę
DELIMITED
można użyć do określenia natywnego serde i stanu ogranicznika, znaku ucieczki, znaku null itd.POLA ZAKOŃCZONE PRZEZ
Służy do definiowania separatora kolumn.
ELEMENTY KOLEKCJI ZAKOŃCZONE PRZEZ
Służy do definiowania separatora elementów kolekcji.
MAPUJ KLUCZE ZAKOŃCZONE PRZEZ
Służy do definiowania separatora klucza mapy.
WIERSZE ZAKOŃCZONE PRZEZ
Służy do definiowania separatora wierszy.
WARTOŚĆ NULL ZDEFINIOWANA JAKO
Służy do definiowania określonej wartości dla wartości NULL.
UCIECZKA PRZEZ
Zdefiniuj mechanizm ucieczki.
ELEMENTY KOLEKCJI ZAKOŃCZONE PRZEZ
Zdefiniuj separator elementu kolekcji.
MAPUJ KLUCZE ZAKOŃCZONE PRZEZ
Zdefiniuj separator klucza mapy.
WIERSZE ZAKOŃCZONE PRZEZ
Zdefiniuj separator wierszy.
WARTOŚĆ NULL ZDEFINIOWANA JAKO
Zdefiniuj konkretną wartość dla elementu
NULL
.PRZECHOWYWANE JAKO
Format pliku tabeli. Dostępne formaty obejmują
TEXTFILE
, ,SEQUENCEFILE
,ORC
RCFILE
,PARQUET
, iAVRO
. Alternatywnie można określić własne formaty wejściowe i wyjściowe za pomocą poleceńINPUTFORMAT
iOUTPUTFORMAT
. Tylko formatyTEXTFILE
,SEQUENCEFILE
iRCFILE
mogą być używane tylko z parametramiROW FORMAT SERDE
i można ich używać tylkoTEXTFILE
w programieROW FORMAT DELIMITED
.LOKALIZACJA
Ścieżka do katalogu, w którym są przechowywane dane tabeli, co może być ścieżką do magazynu rozproszonego.
KOMENTARZ
Literał ciągu opisujący tabelę.
TBLPROPERTIES
Lista par klucz-wartość używana do tagowania definicji tabeli.
AS select_statement
Wypełnia tabelę przy użyciu danych z instrukcji select.
Przykłady
--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/';