CREATE TABLE com formato Hive
Aplica-se a: Databricks Runtime
Define um table usando o formato Hive.
Sintaxe
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 cláusulas entre a cláusula de definição column e a cláusula AS SELECT
podem aparecer em qualquer ordem. Por exemplo, você pode escrever COMMENT table_comment
depois de TBLPROPERTIES
.
Nota
Você deve especificar a STORED AS
cláusula ou ROW FORMAT
. Caso contrário, o analisador SQL usa a sintaxe CREATE TABLE [USING] para analisá-lo e cria por padrão um Delta table.
Parameters
table_identifier
Um nome table, qualificado opcionalmente com um nome schema.
Sintaxe:
[schema_name.] table_name
EXTERNA
Define o table usando o caminho fornecido em
LOCATION
.PARTICIONADO POR
Particiona o table pelo columnsespecificado.
FORMATO DA LINHA
Utilize a cláusula
SERDE
para definir um SerDe personalizado para o table. Caso contrário, use aDELIMITED
cláusula para usar o SerDe nativo e especifique o delimitador, caractere de escape, caractere nulo e assim por diante.SERDE
Especifica um SerDe personalizado para um table.
serde_class
Especifica um nome de classe totalmente qualificado de um SerDe personalizado.
SERDEPROPRIEDADES
Uma list de pares chave-valor usados para etiquetar a definição de SerDe.
DELIMITADO
A
DELIMITED
cláusula pode ser usada para especificar o SerDe nativo e declarar o delimitador, caractere de escape, caractere nulo e assim por diante.CAMPOS TERMINADOS POR
Usado para definir um separador de column.
ITENS DE COLEÇÃO ENCERRADOS POR
Usado para definir um separador de item de coleção.
CHAVES DE MAPA TERMINADAS POR
Usado para definir um separador de chave de mapa.
LINHAS TERMINADAS POR
Usado para definir um separador de linha.
NULL DEFINIDO COMO
Usado para definir o valor específico para NULL.
ESCAPOU POR
Defina o mecanismo de escape.
ITENS DE COLEÇÃO ENCERRADOS POR
Defina um separador de item de coleção.
CHAVES DE MAPA TERMINADAS POR
Defina um separador de chave de mapa.
LINHAS TERMINADAS POR
Defina um separador de linha.
NULL DEFINIDO COMO
Defina o valor específico para
NULL
.ARMAZENADO COMO
O formato de arquivo para o table. Os formatos disponíveis incluem
TEXTFILE
,SEQUENCEFILE
,RCFILE
,ORC
,PARQUET
eAVRO
. Como alternativa, você pode especificar seus próprios formatos de entrada e saída através deINPUTFORMAT
eOUTPUTFORMAT
. Apenas formatosTEXTFILE
,SEQUENCEFILE
eRCFILE
pode ser usado comROW FORMAT SERDE
e sóTEXTFILE
pode ser usado comROW FORMAT DELIMITED
.LOCALIZAÇÃO
Caminho para o diretório onde os dados wheretable são armazenados, o que pode ser um caminho no armazenamento distribuído.
COMENTAR
Um literal de texto para descrever o table.
TBLPROPERTIES
Uma list de pares chave-valor usados para marcar a definição de table.
COMO select_statement
Preenche o table usando os dados da declaração select.
Exemplos
--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/';