CREATE TABLE com formato Hive
Aplica-se a: Databricks Runtime
Define uma tabela 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 de coluna e a cláusula AS SELECT
podem aparecer em qualquer ordem. Por exemplo, você pode escrever COMMENT table_comment
após TBLPROPERTIES
.
Observação
Você deve especificar a cláusula STORED AS
ou ROW FORMAT
. Caso contrário, o analisador SQL usa a sintaxe CREATE TABLE [USING] para analisar e cria uma tabela Delta por padrão.
Parâmetros
table_identifier
Um nome de tabela, opcionalmente qualificado com um nome de esquema.
Sintaxe:
[schema_name.] table_name
EXTERNAL
Define a tabela usando o caminho fornecido em
LOCATION
.PARTITIONED BY
Particiona a tabela pelas colunas especificadas.
FORMATO DA LINHA
Use a cláusula
SERDE
para especificar um SerDe personalizado para uma tabela. Caso contrário, use a cláusulaDELIMITED
para usar o SerDe nativo e especifique o delimitador, o caractere de escape, o caractere nulo e assim por diante.SERDE
Especifica um SerDe personalizado para uma tabela.
serde_class
Especifica um nome de classe totalmente qualificado de um SerDe personalizado.
SERDEPROPERTIES
Uma lista de pares chave-valor usados para marcar a definição de SerDe.
DELIMITED
A cláusula
DELIMITED
pode ser usada para especificar o SerDe nativo e indicar o delimitador, caractere de escape, caractere nulo e assim por diante.FIELDS TERMINATED BY
Usado para definir um separador de coluna.
COLLECTION ITEMS TERMINATED BY
Usado para definir um separador de item de coleção.
MAP KEYS TERMINATED BY
Usado para definir um separador de chave de mapa.
LINES TERMINATED BY
Usado para definir um separador de linha.
NULL DEFINED AS
Usado para definir o valor específico para NULL.
ESCAPED BY
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 ENCERRADAS POR
Defina um separador de linha.
NULL DEFINIDO COMO
Defina o valor específico para
NULL
.ARMAZENADO COMO
O formato de arquivo para a tabela. 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 por meio deINPUTFORMAT
eOUTPUTFORMAT
. Somente os formatosTEXTFILE
,SEQUENCEFILE
eRCFILE
podem ser usados comROW FORMAT SERDE
e somenteTEXTFILE
podem ser usado comROW FORMAT DELIMITED
.LOCATION
Um caminho para o diretório onde os dados da tabela estão armazenados, que pode ser um caminho no armazenamento distribuído.
COMMENT
Um literal de cadeia de caracteres para descrever a tabela.
TBLPROPERTIES
Uma lista de pares chave-valor usados para marcar a definição da tabela.
AS select_statement
Preenche a tabela 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/';