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 ]
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';
출력 코드:¶
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" }}';
명시적 열 목록이 없는 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';
출력 코드:¶
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" }}';
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';
출력 코드:¶
--** 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" }}';
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'
);
출력 코드:¶
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" }}';