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 테이블에만 지원됩니다.

    REPLACE는 테이블 기록을 유지합니다.

    참고 항목

    Azure Databricks는 Delta Lake 테이블을 삭제하고 다시 만드는 대신 REPLACE를 사용하는 것이 좋습니다.

  • 외부

    지정한 경우 외부 테이블을 만듭니다. 외부 테이블을 만들 때 절도 제공해야 LOCATION 합니다. 외부 테이블이 삭제되면 해당 파일은 LOCATION 삭제되지 않습니다.

  • IF NOT EXISTS

    지정되고 동일한 이름의 테이블이 이미 존재하는 경우 명령문은 무시됩니다.

    IF NOT EXISTSREPLACE와 함께 사용할 수 없습니다. 즉, CREATE OR REPLACE TABLE IF NOT EXISTS가 허용되지 않습니다.

  • table_name

    만들 테이블의 이름입니다. 이름에는 임시 사양이 포함되지 않아야 합니다. 이름이 정규화되지 않으면 테이블이 현재 스키마에 만들어집니다.

    생성된 hive_metastore 테이블에는 영숫자 ASCII 문자와 밑줄(INVALID_SCHEMA_OR_RELATION_NAME)만 포함될 수 있습니다.

  • table_specification

    이 선택적 절은 열 목록, 해당 형식, 속성, 설명 및 열 제약 조건을 정의합니다.

    열 테이블 스키마를 정의하지 않으면 AS query 또는 LOCATION을 지정해야 합니다.

    • column_identifier

      열의 고유한 이름입니다.

      열 매핑 속성('delta.columnMapping.mode' = 'name')이 없는 Delta Lake 테이블의 열 식별자에는 '(space), ',', ';', '{', '}', '(', ')' 문자가 포함되어서는 안 됩니다. 'n', 't', '='.

      테이블의 AVRO 열 식별자는 '' 또는 유니코드 문자(비 ASCII 문자 포함)로 시작하고 '', 유니코드 문자 및 숫자의 조합으로 시작해야 합니다.

    • column_type

      열의 데이터 형식을 지정합니다. 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입니다. step0일 수 없습니다.

      자동 할당된 값이 ID 열 형식의 범위를 벗어나면 쿼리가 실패합니다.

      ALWAYS를 사용하는 경우 ID 열에 고유한 값을 제공할 수 없습니다.

      다음 작업은 지원되지 않습니다.

      • PARTITIONED BY ID 열
      • UPDATE ID 열

      참고 항목

      Delta 테이블에서 ID 열을 선언하면 동시 트랜잭션이 비활성화됩니다. 대상 테이블에 대한 동시 쓰기가 필요하지 않은 경우 ID 열만 사용합니다.

    • 기본 default_expression

      적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 11.3 LTS 이상

      열이 지정되지 않은 경우 INSERT, UPDATEMERGE ... INSERT에 사용되는 열에 대한 DEFAULT 값을 정의합니다.

      기본값이 지정되지 않은 경우 null 허용 열에 DEFAULT NULL이 적용됩니다.

      default_expression은 다음을 제외하고 리터럴 및 기본 제공 SQL 함수 또는 연산자로 구성될 수 있습니다.

      또한 default_expression에는 하위 쿼리가 포함되어서는 안 됩니다.

      DEFAULTCSV, JSON, PARQUETORC 원본에 대해 지원됩니다.

    • COMMENT column_comment

      열을 설명하는 문자열 리터럴입니다.

    • column_constraint

      Important

      이 기능은 공개 미리 보기 상태입니다.

      Delta Lake 테이블의 열에 기본 키 또는 외래 키 제약 조건을 추가합니다.

      hive_metastore 카탈로그의 테이블에는 제약 조건이 지원되지 않습니다.

      Delta Lake 테이블에 검사 제약 조건을 추가하려면 ALTER TABLE을 사용합니다.

    • MASK 절

      적용 대상:검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 12.2 LTS 이상 검사 '예'로 표시 Unity 카탈로그만

      Important

      이 기능은 공개 미리 보기 상태입니다.

      열 마스크 함수를 추가하여 중요한 데이터를 익명화합니다. 해당 열의 모든 향후 쿼리는 열의 원래 값 대신 열에 대해 해당 함수를 평가한 결과를 받게 됩니다. 이는 함수가 값을 수정할지 여부를 결정하기 위해 호출하는 사용자의 ID 및/또는 그룹 멤버 자격을 검사할 수 있는 세분화된 액세스 제어 목적에 유용할 수 있습니다.

    • table_constraint

      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_formatrow_format을 지정할 수 있습니다. option_keys는 다음과 같습니다.

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • table_clauses

    선택적으로 새 테이블에 대한 위치, 분할, 클러스터링, 옵션, 설명 및 사용자 정의 속성을 지정합니다. 각 하위 절은 한 번만 지정할 수 있습니다.

    • PARTITIONED BY

      열의 하위 집합으로 테이블을 분할하는 선택적 절입니다.

      참고 항목

      델타 테이블을 정의하지 않으면 분할 열이 열 사양의 앞부분에서 정의되어 있더라도 테이블 끝에 배치됩니다. 델타 테이블 대신 PARTITIONED BY 사용하는 CLUSTER BY 것이 좋습니다.

    • CLUSTER BY

      적용 대상: 검사 '예'로 표시 Databricks SQL 검사 '예'로 표시 Databricks Runtime 13.3 이상

      열의 하위 집합으로 델타 테이블을 클러스터하는 선택적 절입니다. 다른 테이블을 클러스터하려면 .를 사용합니다 clustered_by_clause.

      Delta Lake 액체 클러스터링 함께 PARTITIONED BY사용할 수 없습니다.

    • clustered_by_clause

      선택적으로 열의 하위 집합을 사용하여 테이블 또는 각 파티션을 고정된 수의 해시 버킷으로 클러스터링합니다.

      클러스터링은 Delta Lake 테이블에 대해 지원되지 않습니다.

      • CLUSTERED BY

        각 파티션을 클러스터링할 열 집합을 지정하거나 파티션이 지정되지 않은 경우 테이블을 지정합니다.

        • cluster_column

          테이블에서 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 위치 데이터와 정확히 일치해야 합니다.

    • OPTIONS

      하나 이상의 사용자 정의 테이블 옵션을 설정하거나 다시 설정합니다.

    • COMMENT table_comment

      테이블을 설명하는 문자열 리터럴입니다.

    • TBLPROPERTIES

      선택적으로 하나 이상의 사용자 정의 속성을 설정합니다.

    • 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));