SnowConvert AI - Hive - CREATE EXTERNAL TABLE

Applies to
  • Hive SQL

  • Spark SQL

  • Databricks SQL

설명

외부 테이블은 데이터 소스를 사용하여 새 테이블을 정의합니다. (Spark SQL 언어 참조 CREATE 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 ]
Copy

Spark/Databricks의 CREATE EXTERNAL TABLE 문이 Snowflake에서 CREATE EXTERNAL TABLE 문으로 변환됩니다. 그러나 이 변환에는 사용자 개입이 필요합니다.

SnowConvert AI에서 수행된 변환을 완료하려면 파일이 있는 외부 소스에 대해 액세스 권한이 있는 저장소 통합, 외부 스테이지 및 (선택 사항) 알림 통합을 정의해야 합니다. 각 공급자에 대한 연결을 설정하는 방법은 다음 가이드를 참조하세요.

이 페이지에 표시된 변환에 대한 중요한 고려 사항은 다음과 같습니다.

  • @EXTERNAL_STAGE 자리 표시자는 이전 가이드에 따라 생성된 외부 스테이지로 바꿔야 합니다.

  • 외부 스테이지는 버킷의 루트를 가리키는 것으로 간주됩니다. 각 테이블에 대해 생성된 PATTERN 절은 버킷 맨 아래에서 시작하는 파일/폴더 경로를 지정하므로 버킷의 다른 위치를 가리키는 외부 스테이지를 정의하면 원치 않는 동작이 발생할 수 있다는 점을 고려하는 것이 중요합니다.

  • 오류를 방지하기 위해 AUTO_REFRESH = FALSE 절이 생성됩니다. 외부 테이블 메타데이터의 자동 새로 고침은 Snowflake 계정 클라우드 공급자와 버킷 공급자가 동일하고 알림 통합이 생성된 경우에만 유효합니다.

샘플 소스 패턴

명시적 열 목록이 있는 외부 테이블 만들기

열 목록이 제공되면 SnowConvert AI는 파일 값을 추출하기 위해 각 열에 대한 AS 표현식 열 옵션을 자동으로 생성합니다.

입력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS external_table
(
  order_id int,
  date string,
  client_name string,
  total float
)
USING AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Copy

출력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS external_table
(
  order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
  date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
  client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
  total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "spark",  "convertedOn": "06/18/2025",  "domain": "no-domain-provided" }}';
Copy

명시적 열 목록이 없는 CREATE EXTERNAL TABLE

열 목록이 제공되지 않는 경우, BigQuery는 파일 구조에서 열의 스키마를 자동으로 감지합니다. 이 동작을 복제하기 위해 SnowConvert AI는 INFER_SCHEMA 함수를 사용하여 열 정의를 생성하는 USING TEMPLATE 절을 생성합니다.

INFER_SCHEMA 함수가 작동하려면 파일 형식이 필요하므로 SnowConvert AI는 이를 위해 임시 파일 형식을 생성합니다. 이 파일 형식은 CREATE EXTERNAL TABLE 문을 실행할 때만 필요하며, 세션이 종료되면 자동으로 삭제됩니다.

입력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS external_table_No_Columns
using AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Copy

출력 코드:

CREATE OR REPLACE TEMPORARY FILE FORMAT SC_HIVE_FORMAT_ORDERS_NO_COLUMNS_FORMAT
TYPE = AVRO;
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_No_Columns USING TEMPLATE (
SELECT
  ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
  --** SSC-FDM-0035 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
  TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_HIVE_FORMAT_ORDERS_NO_COLUMNS_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "spark",  "convertedOn": "06/18/2025",  "domain": "no-domain-provided" }}';
Copy

Hive 형식을 사용하는 CREATE EXTERNAL TABLE

Hive 형식을 사용한 외부 테이블 생성도 지원됩니다. 사용자에게 해당 테이블에 삽입하는 기능이 지원되지 않음을 알리는 FDM이 추가될 예정입니다.

입력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS External_table_hive_format
(
  order_id int,
  date string,
  client_name string,
  total float
)
stored as AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Copy

출력 코드:

--** SSC-FDM-HV0001 - INSERTING VALUES INTO AN EXTERNAL TABLE IS NOT SUPPORTED IN SNOWFLAKE **
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
  order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
  date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
  client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
  total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "spark",  "convertedOn": "06/18/2025",  "domain": "no-domain-provided" }}';
Copy

Known Issues

1. 지원되지 않는 파일 형식이 있는 외부 테이블

Snowflake는 다음 Spark 형식을 지원합니다.

  • CSV

  • PARQUET

  • ORC

  • XML

  • JSON

  • AVRO

다른 형식은 지원되지 않는 것으로 표시됩니다.

2. 지원되지 않는 테이블 옵션

일부 테이블 옵션은 SnowConvert AI에서 지원되지 않으며 EWI로 표시됩니다.

입력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
  order_id int,
  date string,
  client_name string,
  total float
)
using AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro'
Tblproperties (
    'unsupported_table_option' = 'value'
);
Copy

출력 코드:

CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
  order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
  date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
  client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
  total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
    !!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
    LOCATION = @EXTERNAL_STAGE
    AUTO_REFRESH = false
    PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
    FILE_FORMAT = (TYPE = AVRO)
    !!!RESOLVE EWI!!! /*** SSC-EWI-0016 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: 'UNSUPPORTED_TABLE_OPTION'. ***/!!!
    TBLPROPERTIES (
  'unsupported_table_option' = 'value'
    )
    COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "spark",  "convertedOn": "06/19/2025",  "domain": "no-domain-provided" }}';
Copy