CREATE TABLE [USING]
적용 대상: Databricks SQL Databricks 런타임
선택적으로 데이터 원본을 사용하여 관리 또는 외부 테이블을 정의합니다.
구문
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
매개 변수
REPLACE
지정된 경우 테이블과 해당 내용이 이미 있는 경우 이를 바꿉니다. 이 절은 Delta Lake 테이블에만 지원됩니다.
참고 항목
Azure Databricks는 Delta Lake 테이블을 삭제하고 다시 만드는 대신
REPLACE
를 사용하는 것이 좋습니다.외부
지정한 경우 외부 테이블을 만듭니다. 외부 테이블을 만들 때 절도 제공해야
LOCATION
합니다. 외부 테이블이 삭제되면 해당 파일은LOCATION
삭제되지 않습니다.IF NOT EXISTS
지정되고 동일한 이름의 테이블이 이미 존재하는 경우 명령문은 무시됩니다.
IF NOT EXISTS
는REPLACE
와 함께 사용할 수 없습니다. 즉,CREATE OR REPLACE TABLE IF NOT EXISTS
가 허용되지 않습니다.-
만들 테이블의 이름입니다. 이름에는 임시 사양이 포함되지 않아야 합니다. 이름이 정규화되지 않으면 테이블이 현재 스키마에 만들어집니다.
생성된
hive_metastore
테이블에는 영숫자 ASCII 문자와 밑줄(INVALID_SCHEMA_OR_RELATION_NAME)만 포함될 수 있습니다. table_specification
이 선택적 절은 열 목록, 해당 형식, 속성, 설명 및 열 제약 조건을 정의합니다.
열 테이블 스키마를 정의하지 않으면
AS query
또는LOCATION
을 지정해야 합니다.-
열의 고유한 이름입니다.
열 매핑 속성(
'delta.columnMapping.mode' = 'name'
)이 없는 Delta Lake 테이블의 열 식별자에는 '(space), ',', ';', '{', '}', '(', ')' 문자가 포함되어서는 안 됩니다. 'n', 't', '='.테이블의
AVRO
열 식별자는 '' 또는 유니코드 문자(비 ASCII 문자 포함)로 시작하고 '', 유니코드 문자 및 숫자의 조합으로 시작해야 합니다. -
열의 데이터 형식을 지정합니다. Azure Databricks에서 지원하는 모든 데이터 형식이 모든 데이터 원본에서 지원되는 것은 아닙니다.
NOT NULL
지정된 경우 열은
NULL
값을 허용하지 않습니다. 이 절은 Delta Lake 테이블에만 지원됩니다.GENERATED ALWAYS AS ( expr )
이 절을 지정할 때 이 열의 값은 지정된
expr
에 의해 결정됩니다.expr
은 다음을 제외하고 리터럴, 테이블 내의 열 식별자 및 결정적 기본 제공 SQL 함수 또는 연산자로 구성될 수 있습니다.또한
expr
에는 하위 쿼리가 포함되어서는 안 됩니다.GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]
적용 대상: Databricks SQL Databricks Runtime 10.4 LTS 이상
ID 열을 정의합니다. 테이블에 쓸 때 ID 열에 대한 값을 제공하지 않으면 고유하고 통계적으로 증가하는(또는
step
이 음수인 경우 감소하는) 값이 자동으로 할당됩니다. 이 절은 Delta Lake 테이블에만 지원됩니다. 이 절은 데이터 형식이 BIGINT인 열에만 사용할 수 있습니다.자동으로 할당된 값은
start
로 시작하고step
씩 증가합니다. 할당된 값은 고유하지만 연속된다는 보장은 없습니다. 두 매개 변수 모두 선택 사항이며 기본값은 1입니다.step
는0
일 수 없습니다.자동 할당된 값이 ID 열 형식의 범위를 벗어나면 쿼리가 실패합니다.
ALWAYS
를 사용하는 경우 ID 열에 고유한 값을 제공할 수 없습니다.다음 작업은 지원되지 않습니다.
PARTITIONED BY
ID 열UPDATE
ID 열
참고 항목
Delta 테이블에서 ID 열을 선언하면 동시 트랜잭션이 비활성화됩니다. 대상 테이블에 대한 동시 쓰기가 필요하지 않은 경우 ID 열만 사용합니다.
기본 default_expression
적용 대상: Databricks SQL Databricks Runtime 11.3 LTS 이상
열이 지정되지 않은 경우
INSERT
,UPDATE
및MERGE ... INSERT
에 사용되는 열에 대한DEFAULT
값을 정의합니다.기본값이 지정되지 않은 경우 null 허용 열에
DEFAULT NULL
이 적용됩니다.default_expression
은 다음을 제외하고 리터럴 및 기본 제공 SQL 함수 또는 연산자로 구성될 수 있습니다.또한
default_expression
에는 하위 쿼리가 포함되어서는 안 됩니다.DEFAULT
는CSV
,JSON
,PARQUET
및ORC
원본에 대해 지원됩니다.COMMENT column_comment
열을 설명하는 문자열 리터럴입니다.
-
Important
이 기능은 공개 미리 보기 상태입니다.
Delta Lake 테이블의 열에 기본 키 또는 외래 키 제약 조건을 추가합니다.
hive_metastore
카탈로그의 테이블에는 제약 조건이 지원되지 않습니다.Delta Lake 테이블에 검사 제약 조건을 추가하려면 ALTER TABLE을 사용합니다.
-
적용 대상: Databricks SQL Databricks Runtime 12.2 LTS 이상 Unity 카탈로그만
Important
이 기능은 공개 미리 보기 상태입니다.
열 마스크 함수를 추가하여 중요한 데이터를 익명화합니다. 해당 열의 모든 향후 쿼리는 열의 원래 값 대신 열에 대해 해당 함수를 평가한 결과를 받게 됩니다. 이는 함수가 값을 수정할지 여부를 결정하기 위해 호출하는 사용자의 ID 및/또는 그룹 멤버 자격을 검사할 수 있는 세분화된 액세스 제어 목적에 유용할 수 있습니다.
-
Delta Lake 테이블에 정보 기본 키 또는 정보 외래 키 제약 조건을 추가합니다.
hive_metastore
카탈로그의 테이블에는 키 제약 조건이 지원되지 않습니다.Delta Lake 테이블에 검사 제약 조건을 추가하려면 ALTER TABLE을 사용합니다.
-
USING data_source
테이블에 사용할 파일 형식입니다.
data_source
는 다음 중 하나여야 합니다.AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
테이블에 사용할 다음 추가 파일 형식은 Databricks Runtime에서 지원됩니다.
JDBC
LIBSVM
- 사용자 지정
org.apache.spark.sql.sources.DataSourceRegister
구현의 정규화된 클래스 이름입니다.
USING
을 생략하면 기본값은DELTA
입니다.DELTA
이외의data_source
에 대해서는 테이블 카탈로그가hive_metastore
가 아닌 한LOCATION
도 지정해야 합니다.다음이 적용됩니다. Databricks Runtime
HIVE
는 Databricks Runtime에서 Hive SerDe 테이블을 만드는 데 지원됩니다. 대/소문자를 구분하지 않는 문자열 맵인OPTIONS
절을 사용하여 Hive 관련file_format
및row_format
을 지정할 수 있습니다.option_keys
는 다음과 같습니다.FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
선택적으로 새 테이블에 대한 위치, 분할, 클러스터링, 옵션, 설명 및 사용자 정의 속성을 지정합니다. 각 하위 절은 한 번만 지정할 수 있습니다.
-
열의 하위 집합으로 테이블을 분할하는 선택적 절입니다.
참고 항목
델타 테이블을 정의하지 않으면 분할 열이 열 사양의 앞부분에서 정의되어 있더라도 테이블 끝에 배치됩니다. 델타 테이블 대신
PARTITIONED BY
사용하는CLUSTER BY
것이 좋습니다. -
적용 대상: Databricks SQL Databricks Runtime 13.3 이상
열의 하위 집합으로 델타 테이블을 클러스터하는 선택적 절입니다. 다른 테이블을 클러스터하려면 .를 사용합니다
clustered_by_clause
.Delta Lake 액체 클러스터링 함께
PARTITIONED BY
사용할 수 없습니다. clustered_by_clause
선택적으로 열의 하위 집합을 사용하여 테이블 또는 각 파티션을 고정된 수의 해시 버킷으로 클러스터링합니다.
클러스터링은 Delta Lake 테이블에 대해 지원되지 않습니다.
CLUSTERED BY
각 파티션을 클러스터링할 열 집합을 지정하거나 파티션이 지정되지 않은 경우 테이블을 지정합니다.
-
테이블에서
column_identifier
를 참조하는 식별자입니다. 둘 이상의 열을 지정하는 경우 중복이 없어야 합니다. 클러스터링은 파티션 수준에서 작동하므로 파티션 열의 이름을 클러스터 열로도 지정해서는 안 됩니다.
-
SORTED BY
선택적으로 버킷의 행에 대한 정렬 순서를 유지합니다.
sort_column
버킷을 정렬할 기준이 되는 열입니다. 열은 파티션 열이 아니어야 합니다. 정렬 열은 고유해야 합니다.
ASC 또는 DESC
선택적으로
sort_column
이 오름차순(ASC
) 또는 내림차순(DESC
)으로 정렬되는지 여부를 지정합니다. 기본값은ASC
입니다.
INTO num_buckets BUCKETS
각 파티션(또는 파티션이 지정되지 않은 경우 테이블)이 분할되는 버킷 수를 지정하는 INTEGER 리터럴입니다.
LOCATION path [ WITH ( CREDENTIAL credential_name ) ]
테이블 데이터가 저장된 디렉터리에 대한 선택적 경로(분산 스토리지의 경로일 수 있음)입니다.
path
는 STRING 리터럴이어야 합니다. 위치를 지정하지 않으면 테이블은managed table
로 간주되고 Azure Databricks는 기본 테이블 위치를 만듭니다.위치를 지정하면 테이블이 외부 테이블이 됩니다.
hive_metastore
카탈로그에 없는 테이블의 경우path
테이블은 유효한 스토리지 자격 증명이 지정되지 않는 한 외부 위치에 의해 보호되어야 합니다.관리되는 테이블의 위치와 겹치는 위치에는 외부 테이블을 만들 수 없습니다.
Delta Lake 테이블의 경우 데이터가 있으면 테이블 구성이
LOCATION
에서 상속됩니다. 따라서 Delta Lake 테이블에 대해TBLPROPERTIES
,table_specification
또는PARTITIONED BY
절이 지정된 경우 Delta Lake 위치 데이터와 정확히 일치해야 합니다.-
하나 이상의 사용자 정의 테이블 옵션을 설정하거나 다시 설정합니다.
COMMENT table_comment
테이블을 설명하는 문자열 리터럴입니다.
-
선택적으로 하나 이상의 사용자 정의 속성을 설정합니다.
WITH ROW FILTER 절
적용 대상: Databricks SQL Databricks Runtime 12.2 LTS 이상 Unity 카탈로그만
Important
이 기능은 공개 미리 보기 상태입니다.
테이블에 행 필터 함수를 추가합니다. 해당 테이블의 모든 이후 쿼리는 함수가 부울 TRUE로 평가되는 행의 하위 집합을 받게 됩니다. 이는 함수가 특정 행을 필터링할지 여부를 결정하기 위해 호출하는 사용자의 ID 및/또는 그룹 멤버 자격을 검사할 수 있는 세분화된 액세스 제어 목적에 유용할 수 있습니다.
-
AS query
이 선택적 절은
query
의 데이터를 사용하여 테이블을 채웁니다.query
를 지정할 때table_specification
도 지정해서는 안 됩니다. 테이블 스키마는 쿼리에서 파생됩니다.Azure Databricks는 기본 데이터 원본을 입력 쿼리의 데이터로 덮어쓰므로 테이블이 만들어져 입력 쿼리와 정확히 동일한 데이터가 포함되도록 합니다.
예
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/mnt/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));