CREATE TABLE z formatem Hive
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] w celu analizy i domyślnie tworzy tabelę Delta.
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
.PODZIELONE 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żyj klauzuliDELIMITED
do zastosowania natywnego SerDe i określ ogranicznik, znak ucieczki, znak NUL itd.SERDE
Określa dedykowane narzędzie 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 oraz zdefiniowania ogranicznika, znaku ucieczki, znaku null itd.POLA ROZDZIELONE PRZEZ
Służy do definiowania separatora kolumn.
ELEMENTY KOLEKCJI ZAKOŃCZONE PRZEZ
Służy do definiowania separatora elementów kolekcji.
KLUCZE MAPY KOŃCZĄCE SIĘ NA
Służy do definiowania separatora klucza mapy.
WIERSZE ZAKOŃCZONE PRZEZ
Służy do definiowania separatora wierszy.
NULL ZDEFINIOWANE JAKO
Służy do definiowania określonej wartości dla wartości NULL.
UCIEKANO PRZEZ
Zdefiniuj mechanizm ucieczki.
ELEMENTY KOLEKCJI ZAKOŃCZONE PRZEZ
Zdefiniuj separator elementu kolekcji.
KLUCZE MAPY ZAKOŃCZONE ZNAKIEM
Zdefiniuj separator klucza mapy.
WIERSZE ZAKOŃCZONE ZNAKIEM
Zdefiniuj separator wierszy.
WARTOŚĆ NULL ZDEFINIOWANA JAKO
Zdefiniuj konkretną wartość dla elementu
NULL
.PRZECHOWYWANE JAKO
Format pliku dla tabeli. Dostępne formaty obejmują
TEXTFILE
, ,SEQUENCEFILE
,RCFILE
ORC
,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 zROW FORMAT SERDE
, a tylkoTEXTFILE
może być używany zROW FORMAT DELIMITED
.LOKALIZACJA
Ścieżka do katalogu, w którym są przechowywane dane tabeli, co może być ścieżką w magazynie rozproszonym.
KOMENTARZ
Literał ciągowy 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/';