CREATE TABLE con formato de Hive
Se aplica a: Databricks Runtime
Define una tabla con el formato de Hive.
Sintaxis
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 ]
Las cláusulas entre la cláusula de definición de columna y la cláusula AS SELECT
pueden aparecer en cualquier orden. Por ejemplo, puede escribir COMMENT table_comment
después de TBLPROPERTIES
.
Nota:
Debe especificar la cláusula STORED AS
o ROW FORMAT
. De lo contrario, el analizador de SQL usa la sintaxis CREATE TABLE [USING] para analizarla y crea una tabla Delta de forma predeterminada.
Parámetros
table_identifier
Nombre de tabla, opcionalmente calificado con un nombre de esquema.
Sintaxis:
[schema_name.] table_name
EXTERNAL
Define la tabla con la ruta de acceso que se proporciona en
LOCATION
.PARTITIONED BY
Crea particiones de la tabla por las columnas especificadas.
FORMATO DE FILA
Use la cláusula
SERDE
para especificar un SerDe personalizado para una tabla. En caso contrario, use la cláusulaDELIMITED
para usar el SerDe nativo y especifique el delimitador, el carácter de escape, el carácter nulo, etc.SERDE
Especifica un SerDe personalizado para una tabla.
serde_class
Especifica un nombre de clase completo de un SerDe personalizado.
SERDEPROPERTIES
Lista de pares clave-valor usados para etiquetar la definición de SerDe.
DELIMITED
La cláusula
DELIMITED
se puede usar para especificar el SerDe nativo y el estado del delimitador, el carácter de escape, el carácter nulo, etc.FIELDS TERMINATED BY
Se usa para definir un separador de columnas.
COLLECTION ITEMS TERMINATED BY
Se usa para definir un separador de elemento de recopilación.
MAP KEYS TERMINATED BY
Se usa para definir un separador de claves de mapa.
LINES TERMINATED BY
Se usa para definir un separador de filas.
NULL DEFINED AS
Se usa para definir el valor específico de NULL.
ESCAPED BY
Define el mecanismo de escape.
COLLECTION ITEMS TERMINATED BY
Define un separador de elemento de recopilación.
MAP KEYS TERMINATED BY
Define un separador de claves de mapa.
LINES TERMINATED BY
Define un separador de filas.
NULL DEFINED AS
Define el valor específico de
NULL
.STORED AS
Formato de archivo de la tabla. Entre los formatos disponibles se incluyen
TEXTFILE
,SEQUENCEFILE
,RCFILE
,ORC
,PARQUET
yAVRO
. Como alternativa, puede especificar sus propios formatos de entrada y salida medianteINPUTFORMAT
yOUTPUTFORMAT
. Solo los formatosTEXTFILE
,SEQUENCEFILE
yRCFILE
se pueden usar conROW FORMAT SERDE
y soloTEXTFILE
se puede usar conROW FORMAT DELIMITED
.LOCATION
Ruta de acceso al directorio donde se almacenan los datos de tabla, que podría ser una ruta de acceso en el almacenamiento distribuido.
COMMENT
Literal de cadena para describir la tabla.
TBLPROPERTIES
Lista de pares clave-valor usados para etiquetar la definición de tabla.
AS select_statement
Rellena la tabla con los datos de la instrucción select.
Ejemplos
--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/';