SnowConvert AI - Hive - CREATE TABLE

Applies to
  • Hive SQL

  • Spark SQL

  • Databricks SQL

설명

현재 데이터베이스에 새 테이블을 생성합니다. 각각 고유한 데이터 타입의 데이터를 보관하는 열 목록을 정의합니다. 테이블의 소유자는 CREATE TABLE 명령의 발급자입니다.

자세한 내용은 CREATE TABLE 설명서를 참조하세요.

문법 구문

--DATASOURCE TABLE
CREATE TABLE [ IF NOT EXISTS ] table_identifier
    [ ( col_name1 col_type1 [ COMMENT col_comment1 ], ... ) ]
    USING data_source
    [ OPTIONS ( key1=val1, key2=val2, ... ) ]
    [ PARTITIONED BY ( col_name1, col_name2, ... ) ]
    [ CLUSTERED BY ( col_name3, col_name4, ... ) 
        [ SORTED BY ( col_name [ ASC | DESC ], ... ) ] 
        INTO num_buckets BUCKETS ]
    [ LOCATION path ]
    [ COMMENT table_comment ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
    [ AS select_statement ]
    
--HIVE FORMAT TABLE
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, ... ) ]
    [ CLUSTERED BY ( col_name1, col_name2, ...) 
        [ SORTED BY ( col_name1 [ ASC | DESC ], col_name2 [ ASC | DESC ], ... ) ] 
        INTO num_buckets BUCKETS ]
    [ ROW FORMAT row_format ]
    [ STORED AS file_format ]
    [ LOCATION path ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
    [ AS select_statement ]
    
--LIKE TABLE
CREATE TABLE [IF NOT EXISTS] table_identifier LIKE source_table_identifier
    USING data_source
    [ ROW FORMAT row_format ]
    [ STORED AS file_format ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
    [ LOCATION path ]
Copy

IF NOT EXISTS

설명

테이블이 아직 존재하지 않는 경우에만 생성되도록 하여 SQL 스크립트에서 중복 및 오류를 방지합니다.

Hint

이 구문은 Snowflake에서 완벽하게 지원됩니다.

적용 대상

  • Hive

  • Spark

  • Databricks

문법 구문

IF NOT EXISTS
Copy

샘플 소스 패턴

입력 코드:

CREATE TABLE IF NOT EXISTS table1 (
    col1 INTEGER
);
Copy

출력 코드:

CREATE TABLE IF NOT EXISTS table1 (
    col1 INTEGER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "sybase",  "convertedOn": "03/19/2024" }}';
Copy

PARTITION BY

설명

지정된 열을 기준으로 테이블에 파티션이 생성됩니다.

이 구문은 Snowflake에서는 필요하지 않습니다.

적용 대상

  • Hive

  • Spark

  • Databricks

문법 구문

PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
Copy

샘플 소스 패턴

입력 코드:

CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10, 2),
    order_status STRING
)
PARTITIONED BY (order_status);
Copy

출력 코드:

CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    order_date DATE,
    total_amount DECIMAL(10, 2),
    order_status STRING
);
Copy

CLUSTERED BY

설명

테이블에 생성된 파티션은 버킷팅를 위해 지정된 열을 기준으로 고정 버킷으로 버킷화됩니다.

이 문법은 부분적으로 지원됩니다.

적용 대상

  • Hive

  • Spark

  • Databricks

문법 구문

CLUSTERED BY (column_name1 [ASC|DESC], ...)
[SORTED BY (sort_column1 [ASC|DESC], ...)]
INTO num_buckets BUCKETS
Copy
  • 성능 최적화에 사용되는 CLUSTERED BY 절은 Snowflake에서 **CLUSTER BY**로 변환됩니다. 성능은 두 아키텍처 간에 다를 수 있습니다.

  • Snowflake는 마이크로 파티션 내에서 데이터 정렬을 자동으로 처리하므로 마이그레이션 중에 SORTED BY 절을 제거할 수 있습니다.

  • INTO BUCKETS 절, SparkSQL/Databrick 특정 분할 설정은 Snowflake에서 적용할 수 없으므로 완전히 제거해야 합니다.

샘플 소스 패턴

입력 코드:

CREATE TABLE table_name ( 
column1 data_type, column2 data_type, ... ) USING format CLUSTERED BY (bucketing_column1) SORTED BY (sorting_column1 DESC, sorting_column2 ASC) INTO 10 BUCKETS;
Copy

출력 코드:

CREATE TABLE table_name ( column1 data_type, column2 data_type, ... ) USING format
CLUSTER BY (bucketing_column1);
Copy

ROW FORMAT

설명

입력 및 출력의 행 형식을 지정합니다.

이 문법은 Snowflake에서 지원되지 않습니다.

적용 대상

  • Hive

  • Spark

  • Databricks

문법 구문

ROW FORMAT fow_format

row_format:
   { SERDE serde_class [ WITH SERDEPROPERTIES (serde_key = serde_val [, ...] ) ] |
     { 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 ] } }
Copy

샘플 소스 패턴

입력 코드:

CREATE TABLE parquet_table ( id INT, data STRING )  STORED AS TEXTFILE LOCATION '/mnt/delimited/target' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\' COLLECTION ITEMS TERMINATED BY ';' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' NULL DEFINED AS 'NULL_VALUE';
Copy

출력 코드:

CREATE TABLE delimited_like_delta LIKE source_delta_table STORED AS TEXTFILE LOCATION '/mnt/delimited/target'
!!!RESOLVE EWI!!! /*** SSC-EWI-HV0002 - THE ROW FORMAT CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!! ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\' COLLECTION ITEMS TERMINATED BY ';' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' NULL DEFINED AS 'NULL_VALUE';
Copy

STORED AS

설명

테이블 저장소의 파일 형식입니다.

이 문법은 Snowflake에서 지원되지 않습니다.

적용 대상

  • Hive

  • Spark

  • Databricks