적용 대상:
Databricks 런타임
Hive 형식을 사용하여 테이블을 정의합니다.
구문
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 SELECT 절 사이의 절은 임의의 순서로 나타날 수 있습니다. 예를 들어 COMMENT table_comment 뒤에 TBLPROPERTIES를 작성할 수 있습니다.
참고
STORED AS 절 또는 ROW FORMAT 절 중 하나를 지정해야 합니다. 그렇지 않으면 SQL 파서는 CREATE TABLE [USING] 구문을 사용하여 구문 분석하고 기본적으로 델타 테이블을 만듭니다.
매개 변수
table_identifier
선택적으로 스키마 이름으로 정규화된 테이블 이름입니다.
구문:
[schema_name.] table_name외부
LOCATION에 제공된 경로를 사용하여 테이블을 정의합니다.에 의해 분할됨
지정한 열을 사용하여 테이블을 분할합니다.
행 형식
SERDE절을 사용하여 한 테이블에 대한 사용자 지정 SerDe를 지정합니다. 그렇지 않으면DELIMITED절을 사용하여 네이티브 SerDe를 사용하고 구분 기호, 이스케이프 문자, Null 문자 등을 지정합니다.SERDE
한 테이블에 대한 사용자 지정 SerDe를 지정합니다.
serde_class
사용자 지정 SerDe의 정규화된 클래스 이름을 지정합니다.
SERDEPROPERTIES
SerDe 정의에 태그를 지정하는 데 사용되는 키-값 쌍의 목록입니다.
DELIMITED
DELIMITED절을 사용하여 네이티브 SerDe를 지정하고 구분 기호, 이스케이프 문자, Null 문자 등을 지정할 수 있습니다.필드는 다음으로 종료됨
열 구분 기호를 정의하는 데 사용됩니다.
컬렉션 항목 종료 기준
컬렉션 항목 구분 기호를 정의하는 데 사용됩니다.
맵 키 종료
맵 키 구분 기호를 정의하는 데 사용됩니다.
라인 끝 구분자
행 구분 기호를 정의하는 데 사용됩니다.
NULL 정의
NULL에 대한 특정 값을 정의하는 데 사용됩니다.
에 의해 탈출
이스케이프 메커니즘을 정의합니다.
컬렉션 항목 종료 기준
컬렉션 항목 구분 기호를 정의합니다.
맵 키 종료
맵 키 구분 기호를 정의합니다.
라인 끝 구분자
행 구분 기호를 정의합니다.
NULL 정의
NULL에 특정 값을 정의합니다.로 저장됨
테이블의 파일 형식입니다. 사용할 수 있는 형식에는
TEXTFILE,SEQUENCEFILE,RCFILE,ORC,PARQUET,AVRO가 있습니다. 또는INPUTFORMAT및OUTPUTFORMAT을 통해 고유한 입력 및 출력 형식을 지정할 수 있습니다.TEXTFILE,SEQUENCEFILE,RCFILE형식만ROW FORMAT SERDE와 함께 사용할 수 있으며,TEXTFILE형식만ROW FORMAT DELIMITED와 함께 사용할 수 있습니다.LOCATION
분산 스토리지의 경로일 수 있는 테이블 데이터가 저장되는 디렉터리의 경로입니다.
COMMENT
테이블을 설명하는 문자열 리터럴입니다.
TBLPROPERTIES
테이블 정의에 태그를 지정하는 데 사용되는 키-값 쌍의 목록입니다.
AS select_statement (AS 선택문)
select 문에서 가져온 데이터를 사용하여 테이블을 채웁니다.
예제
--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/';