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á-la e cria um Delta table por padrão.
Parameters
table_identifier
Um nome table, opcionalmente qualificado com um nome schema.
Sintaxe:
[schema_name.] table_name
EXTERNA
Define o table usando o caminho fornecido em
LOCATION
.PARTICIONADO POR
Particiona o table com o columnsespecificado.
FORMATO DA LINHA
Utilize a cláusula
SERDE
para especificar um SerDe personalizado para um 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 marcar a definição 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 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 wheretable onde os dados são armazenados, o que pode ser um caminho no armazenamento distribuído.
COMENTAR
Um string literal para descrever o table.
TBLPROPERTIES
Um conjunto de pares chave-valor list utilizado para marcar a definição table.
COMO select_statement
Preenche o table usando os dados da instruçã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/';