SnowConvert AI - BigQuery 문제

참고

변환 범위

Google BigQuery용 SnowConvert AI는 현재 TABLES 및 VIEWS에 대한 평가 및 변환을 지원합니다. SnowConvert AI는 다른 유형의 문을 인식할 수 있지만, 이러한 문 유형이 완전히 지원되지는 않습니다.

이 페이지에서는 SnowConvert AI에서 Google BigQuery 문법 요소를 그와 동등한 Snowflake 문법 요소로 변환하는 방법에 대한 포괄적인 참조를 제공합니다. 이 변환 참조에서는 각 변환에 대한 코드 예제, 기능적 동등성 결과, 주요 차이점, 권장 사항, 알려진 문제, 설명을 찾을 수 있습니다.

SSC-EWI-BQ0001

Snowflake는 options 절을 지원하지 않습니다.

경고

이 EWI은 더 이상 사용되지 않습니다. EWI의 최신 버전은 SSC-EWI-0016을 참조하세요.

심각도

Medium

설명

이 EWI는 OPTIONS에 Snowflake에서 지원되지 않는 옵션이 있는 경우 DDL 문에 추가됩니다.

코드 예제

입력 코드:

BigQuery
 CREATE VIEW my_view
OPTIONS (
  expiration_timestamp=TIMESTAMP "2026-01-01 00:00:00 UTC",
  privacy_policy='{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_columns": "ID"}}'
) AS
SELECT column1, column2
FROM my_table;

출력 코드:

Snowflake
 CREATE VIEW my_view
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0001 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: EXPIRATION_TIMESTAMP, PRIVACY_POLICY ***/!!!
OPTIONS(
  expiration_timestamp=TIMESTAMP "2026-01-01 00:00:00 UTC",
  privacy_policy='{"aggregation_threshold_policy": {"threshold": 50, "privacy_unit_columns": "ID"}}'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "03/26/2025",  "domain": "test" }}'
AS
SELECT column1, column2
FROM
  my_table;
권장 사항
  • 변환되지 않은 식에 수동 변경 사항을 추가합니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-BQ0002

마이크로 파티셔닝은 모든 Snowflake 테이블에서 자동으로 수행됩니다.

참고

이 문제는 더 이상 사용되지 않으며 SnowConvert AI에서 더 이상 생성되지 않습니다.

심각도

Medium

설명

이 경고는 partition by 절이 있는 경우 Create table에 추가됩니다. PARTITION BY테이블 분할을 제어하는 선택적 절이지만 Snowflake에서는 지원되지 않습니다.

Snowflake 테이블의 모든 데이터는 인접한 저장소 단위인 마이크로 파티션으로 자동 분할됩니다. 각 마이크로 파티션에는 50MB에서 500MB 사이의 압축되지 않은 데이터가 포함되어 있습니다. 이 크기와 구조는 수백만 또는 수억 개의 마이크로 파티션으로 구성될 수 있는 초대형 테이블의 매우 세분화된 정리를 허용합니다.

Snowflake는 다음을 포함하여 마이크로 파티션에 저장된 모든 행에 대한 메타데이터를 저장합니다.

  • 마이크로 파티션의 각 열에 대한 값 범위입니다.

  • 고유 값의 수입니다.

  • 최적화 및 효율적인 쿼리 처리에 사용되는 추가 속성입니다.

또한 테이블은 삽입/로드되는 데이터의 순서를 사용하여 투명하게 분할됩니다. 자세한 내용은 마이크로 파티셔닝의 이점을 참조하세요.

코드 예제

입력 코드:
BigQuery
 CREATE TABLE table1(
    transaction_id INT, 
    transaction_date DATE
)
PARTITION BY transaction_date;
생성된 코드:
Snowflake
 CREATE TABLE table1 (
    transaction_id INT,
  transaction_date DATE
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0002 - MICRO-PARTITIONING IS AUTOMATICALLY PERFORMED ON ALL SNOWFLAKE TABLES. ***/!!!
PARTITION BY transaction_date
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "04/09/2025",  "domain": "test" }}';

권장 사항

  • 추가적인 사용자 작업은 필요하지 않으며, 참고용일 뿐입니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-BQ0003

Pending SnowConvert AI translation for differential privacy.

심각도

Medium

설명

BigQuery allows applying differential privacy over some statistical functions to introduce noise in the data, making it difficult to extract information about individuals when analyzing query results.

Snowflake now supports differential privacy natively. However, SnowConvert AI has not yet implemented the translation for this feature. Any use of differential privacy in BigQuery will be commented out and this issue will be generated to flag the need for manual conversion.

코드 예제

입력 코드:
BigQuery
 SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=id)
    item,
    COUNT(quantity, contribution_bounds_per_group => (0,100)) total_quantity
FROM professors
GROUP BY item;
생성된 코드:
Snowflake
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0003 - PENDING SNOWCONVERT AI TRANSLATION FOR DIFFERENTIAL PRIVACY. ***/!!!
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=id)
    item,
    COUNT(quantity,
                    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0003 - PENDING SNOWCONVERT AI TRANSLATION FOR DIFFERENTIAL PRIVACY. ***/!!! contribution_bounds_per_group => (0,100)) total_quantity
FROM
  professors
GROUP BY item;

권장 사항

  1. Use native Snowflake support: Snowflake now supports differential privacy natively. Rewrite the BigQuery differential privacy syntax using Snowflake’s privacy policies and privacy budgets.

  2. Key differences: Snowflake’s differential privacy implementation uses privacy policies assigned to tables/views, privacy budgets to manage analyst queries, and privacy domains for fact and dimension columns. The syntax differs from BigQuery’s inline WITH DIFFERENTIAL_PRIVACY clause.

  3. Further reading: Snowflake Differential Privacy Overview

SSC-EWI-BQ0004

Snowflake는 명명된 윈도우를 지원하지 않습니다.

심각도

Medium

설명

BigQuery는 집계 함수에서 명명된 윈도우의 정의 및 사용을 허용합니다. 이러한 윈도우는 쿼리의 WINDOW 절에 정의되며 해당 함수의 OVER 절 내부에서 사용할 수 있습니다.

Snowflake는 명명된 윈도우 선언을 지원하지 않습니다. 윈도우 정의를 가져와 함수의 OVER 절에서 해당 윈도우의 모든 용도에 직접 적용하는 것이 좋습니다.

코드 예제

입력 코드:
BigQuery
 SELECT 
    COUNT(col1) OVER(myWindow)
FROM 
    test.exampleTable
WINDOW 
    myWindow AS (ORDER BY col2);
생성된 코드:
Snowflake
 SELECT
    COUNT(col1)
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0004 - SNOWFLAKE DOES NOT SUPPORT NAMED WINDOWS. ***/!!! OVER(myWindow)
FROM
    test.exampleTable
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0004 - SNOWFLAKE DOES NOT SUPPORT NAMED WINDOWS. ***/!!!
WINDOW
    myWindow AS (ORDER BY col2);

권장 사항

  • 명명된 윈도우 정의를 검토하면 해당 정의를 가져와 정의가 사용되는 함수의 OVER 절에 적용할 수 있습니다. 그러나 BigQuery 및 Snowflake 윈도우 프레임 간의 기능적 차이는 계속 적용되며, 다음 사례를 예로 들어 보겠습니다.

BigQuery:

 SELECT 
    COUNT(col1) OVER(myWindow)
FROM 
    test.exampleTable
WINDOW 
    myWindow AS (ORDER BY col2);

Snowflake:

 SELECT 
    COUNT(col1) OVER(ORDER BY col2)
FROM 
    test.exampleTable;

윈도우 프레임에 대한 ORDER BY 절은 BigQuery에서와 같이 전체 쿼리 순서에 영향을 미치지 않으므로 이 두 쿼리는 동일한 행을 생성하지만 Snowflake 결과는 정렬되지 않습니다.

SSC-EWI-BQ0005

Javascript code has not been validated by SnowConvert AI.

심각도

높음

설명

SnowConvert AI는 Javascript 코드를 변환하지 않습니다. BigQuery의 함수에서 추출된 Javascript 코드는 전혀 변경되지 않았으므로, 이 코드가 Snowflake에서 작동하려면 약간의 조정이 필요할 수 있습니다.

코드 예제

입력 코드:
BigQuery
 CREATE FUNCTION test.languageJs (x integer, y integer)
RETURNS integer
LANGUAGE js
AS "return x * y;";
생성된 코드:
Snowflake
 CREATE FUNCTION test.languageJs (x integer, y integer)
RETURNS DOUBLE
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0005 - JAVASCRIPT CODE HAS NOT BEEN VALIDATED BY SNOWCONVERT AI. ***/!!!
AS
$$
return x * y;
$$;

권장 사항

SSC-EWI-BQ0006

ST_GEOGFROMTEXT 함수의 지향 매개 변수는 Snowflake에서 지원되지 않습니다.

심각도

낮음

설명

이 경고는 Snowflake에서 지원되지 않는 지향 매개 변수가 ST_GEOGFROMTEXT 함수에 지정된 경우에 추가됩니다. 이 매개 변수가 TRUE로 설정된 경우 입력의 모든 다각형은 다음과 같이 방향이 지정되는 것으로 가정됩니다. 즉, 입력 꼭짓점의 순서로 다각형 경계를 따라 걷는 경우 다각형의 내부는 왼쪽에 있습니다. 이를 통해 WKT는 반구보다 큰 다각형을 나타낼 수 있습니다. 지향성이 FALSE이거나 생략된 경우, 이 함수는 면적이 가장 작은 다각형을 반환합니다.

코드 예제

입력 코드:
BigQuery
 SELECT ST_GEOGFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', TRUE);
생성된 코드:
Snowflake
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0006 - ORIENTED PARAMETER IN THE ST_GEOGFROMTEXT FUNCTION IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
 ST_GEOGFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))');

권장 사항

  1. Review polygon orientation: If the oriented parameter was set to TRUE, verify that the polygon does not span more than a hemisphere. Snowflake’s ST_GEOGFROMTEXT always returns the polygon with the smallest area.

  2. Manual validation: For polygons larger than a hemisphere, consider splitting them into smaller polygons or using alternative geospatial representations.

  3. Remove the parameter: After manual review, remove the oriented parameter from the function call, as Snowflake’s ST_GEOGFROMTEXT accepts only the WKT string argument.

SSC-EWI-BQ0007

이스케이프 시퀀스는 Snowflake에서 유효하지 않습니다.

심각도

낮음

설명

종형 문자(\a) 및 세로 문자(\v)는 BigQuery에서 유효한 이스케이프 시퀀스이지만, Snowflake에서는 유효하지 않습니다.

This warning is added when a bell character or vertical character escape sequence is found when translating BigQuery code. For more information, see BigQuery Escape Sequences.

코드 예제

입력 코드:
BigQuery
 SELECT "\a";
SELECT "\v";
생성된 코드:
Snowflake
 SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0007 - ESCAPE SEQUENCE \a IS NOT VALID IN SNOWFLAKE. ***/!!!
    '\a';
SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0007 - ESCAPE SEQUENCE \v IS NOT VALID IN SNOWFLAKE. ***/!!!
    '\v';

권장 사항

  1. Replace with Unicode escapes: Replace \a (bell character, U+0007) with \x07 and \v (vertical tab, U+000B) with \x0B, which are supported by Snowflake.

  2. Review usage: If the escape sequence was used for formatting purposes, consider whether it is still needed in the Snowflake context.

SSC-EWI-BQ0008

8자리 16진수 유니코드 이스케이프 시퀀스는 Snowflake에서 지원되지 않습니다.

심각도

낮음

설명

BigQuery는 8자리 16진수의 유니코드 시퀀스를 지원합니다. Snowflake는 이러한 종류의 유니코드 시퀀스를 지원하지 않습니다.

이 경고는 BigQuery 코드를 변환할 때 8자리 16진수 유니코드 시퀀스가 발견되는 경우에 추가됩니다. BigQuery 이스케이프 시퀀스에 대해 자세히 알아보세요.

코드 예제

입력 코드:
BigQuery
 SELECT "\U00100000";
생성된 코드:
Snowflake
 SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0008 - EIGHT HEX DIGIT UNICODE ESCAPE SEQUENCE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
    '\U00100000';

권장 사항

  1. Use surrogate pairs: Convert the 8-hex-digit Unicode sequence into two 4-hex-digit surrogate pair sequences. For example, \U00100000 can be represented using surrogate pairs \uDBC0\uDC00.

  2. Use CHR function: Alternatively, use Snowflake’s CHR function with the Unicode code point to generate the character at runtime.

SSC-EWI-BQ0009

SnowConvert AI was unable to generate the correct return table clause. Missing symbol information.

심각도

높음

설명

Snowflake에는 CREATE TABLE FUNCTION 문에 유효한 RETURNS TABLE 절이 필요합니다. SnowConvert AI는 처음부터 새로 만들어야 합니다. 이를 수행하려면 결과 테이블의 열 유형을 올바르게 추론하기 위해 CREATE TABLE FUNCTION 쿼리에 대한 분석이 수행되지만, 현재 SnowConvert AI에 반환 절을 올바르게 작성하는 데 제한이 있는 시나리오가 있을 수 있습니다.

이러한 시나리오는 향후 고려될 예정이지만, 그동안 이 오류가 추가될 예정입니다.

코드 예제

입력 코드:
BigQuery
 CREATE TABLE FUNCTION tableValueFunction2()
AS
SELECT *
REPLACE("John" AS employee_name)
FROM employees;
생성된 코드:
Snowflake
 CREATE FUNCTION tableValueFunction2 ()
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0009 - SNOWCONVERT AI WAS UNABLE TO GENERATE THE CORRECT RETURN TABLE CLAUSE. MISSING SYMBOL INFORMATION. ***/!!!
RETURNS TABLE (
)
AS
  $$
      SELECT
        * REPLACE("John" AS employee_name) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'ExceptReplaceOperator' NODE ***/!!!
      FROM
        employees
  $$;

권장 사항

  1. Manually define the RETURNS TABLE clause: Inspect the original BigQuery TABLE FUNCTION body to determine the column names and types of the result set, then populate the empty RETURNS TABLE() clause with the correct column definitions.

  2. Provide source references: If the issue is caused by missing references, ensure all referenced tables and views are included in the input provided to SnowConvert AI.

SSC-EWI-BQ0010

The resulting table has no columns

심각도

Medium

설명

This EWI is added when SnowConvert AI creates an external table whose definition has no columns. External tables in BigQuery can be defined using only OPTIONS (e.g., FORMAT and URIS) without explicit column definitions, relying on schema inference. When the resulting table structure has no columns after conversion, SnowConvert AI emits this EWI to flag that manual definition of the table schema may be required.

코드 예제

입력 코드:
BigQuery
 CREATE EXTERNAL TABLE my_dataset.sensor_readings
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://my_bucket/sensors/*.parquet']
);
생성된 코드:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0010 - THE RESULTING TABLE HAS NO COLUMNS ***/!!!
CREATE EXTERNAL TABLE my_dataset.sensor_readings
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://my_bucket/sensors/*.parquet']
);

권장 사항

  1. Provide column definitions: If the source BigQuery external table uses inferred schema, manually add the expected column definitions to the generated Snowflake external table based on the actual file structure.

  2. Use INFER_SCHEMA: Consider using Snowflake’s INFER_SCHEMA function with a sample file path (without wildcards) to generate the table template.

  3. Include table definitions: Ensure all referenced table or view definitions are included in the input provided to SnowConvert AI so that symbol information can be collected.

SSC-EWI-BQ0011

복잡한 데이터 타입의 세션 변수 할당은 Snowflake에서 지원되지 않음

심각도

Medium

설명

BigQuery에서는 스크립트 수준에서 변수를 선언하면 전체 스크립트에서 변수를 사용할 수 있으며, Snowflake SQL 변수에서 이 동작을 복제하기 위해 사용됩니다.

그러나 ARRAY, GEOGRAPHY, STRUCT, JSON과 같이 복잡한 데이터 타입의 변수를 선언하면 Snowflake에서 SQL 변수에 값을 설정하려고 할 때 실패합니다. SnowConvert AI가 이러한 사례 중 하나를 감지하면 이 EWI가 SQL 변수 선언에 추가됩니다.

이러한 타입의 변수는 블록 문 및 기타 프로시저 문 내에서 문제 없이 선언할 수 있습니다. EWI는 스크립트 수준에서 선언된 변수에만 적용됩니다.

코드 예제

입력 코드:
BigQuery
 CREATE TABLE test.JsonTable
(
    col1 JSON
);

DECLARE myVar1 JSON DEFAULT JSON'{"name": "John", "age": 30}';

INSERT INTO test.JsonTable VALUES (myVar1);

BEGIN
    DECLARE myVar2 JSON DEFAULT JSON'{"name": "Mike", "age": 27}';
    INSERT INTO test.JsonTable VALUES (myVar2);
END;

SELECT col1 FROM test.JsonTable;
생성된 코드:
Snowflake
 CREATE TABLE test.JsonTable
(
    col1 VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}';

!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0011 - SESSION VARIABLE ASSIGNMENT OF COMPLEX DATATYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
SET myVar1 = (
    SELECT
        PARSE_JSON('{"name": "John", "age": 30}')
);

INSERT INTO test.JsonTable
VALUES ($myVar1);

BEGIN
    LET myVar2 VARIANT DEFAULT PARSE_JSON('{"name": "Mike", "age": 27}');
    INSERT INTO test.JsonTable
    VALUES (:myVar2);
END;

SELECT col1 FROM
    test.JsonTable;

권장 사항

  • 변수 사용이 단일 범위로 제한되거나 해당 값이 수정되지 않는 경우 변수를 사용하는 범위에서 로컬로 변수를 선언하는 것이 좋습니다. 그러면 문제가 해결됩니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-BQ0012

SnowConvert AI was unable to generate a correct OBJECT_CONSTRUCT parameter. Missing symbol information.

심각도

높음

설명

SnowConvert AI was unable to generate a correct OBJECT_CONSTRUCT parameter due to missing symbol information. This typically occurs when the table definition is not included in the input provided to SnowConvert AI, or when the table uses complex types (such as STRUCT) whose field names are needed to build the OBJECT_CONSTRUCT call.

코드 예제

입력 코드:
BigQuery
 INSERT INTO test.tuple_sample
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));
생성된 코드:
Snowflake
 INSERT INTO test.tuple_sample
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0012 - SNOWCONVERT AI WAS UNABLE TO GENERATE A CORRECT OBJECT_CONSTRUCT PARAMETER. MISSING SYMBOL INFORMATION. ***/!!!
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));

권장 사항

  1. Provide table definitions: Ensure all referenced table definitions (CREATE TABLE statements) are included in the input provided to SnowConvert AI so that symbol information can be collected.

  2. Manual replacement: Inspect the original BigQuery INSERT statement and manually construct the OBJECT_CONSTRUCT call with the correct field names and values matching the target table’s schema.

SSC-EWI-BQ0013

외부 테이블 데이터 형식은 Snowflake에서 지원되지 않습니다.

경고

이 EWI은 더 이상 사용되지 않습니다. EWI의 최신 버전은 SSC-EWI-0029를 참조하세요.

심각도

Medium

설명

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

BigQuery

Snowflake

AVRO

AVRO

CSV
GOOGLE_SHEETS

CSV

NEWLINE_DELIMITED_JSON
JSON

JSON

ORC

ORC

PARQUET

PARQUET

When an external table has other FORMAT not specified in the above table, this EWI will be generated to inform the user that the FORMAT is not supported.

코드 예제

입력 코드:
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
  format = 'DATASTORE_BACKUP',
  uris = ['gs://backup_bucket/backup_folder/*']
);
생성된 코드:
Snowflake
 !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0013 - EXTERNAL TABLE DATA FORMAT NOT SUPPORTED IN SNOWFLAKE ***/!!!
CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
  format = 'DATASTORE_BACKUP',
  uris = ['gs://backup_bucket/backup_folder/*']
);

권장 사항

SSC-EWI-BQ0014

Hive partitioned external tables are not supported in Snowflake

심각도

Medium

설명

Snowflake는 외부 테이블에서 WITH PARTITION COLUMNS 절이 발견되는 경우 Hive 분할 외부 테이블을 지원하지 않으며, 이 EWI를 사용하여 지원되지 않는 것으로 표시됩니다.

코드 예제

입력 코드:
BigQuery
 CREATE EXTERNAL TABLE test.CustomHivePartitionedTable
WITH PARTITION COLUMNS (
  field_1 STRING,
  field_2 INT64)
OPTIONS (
  uris = ['gs://sc_external_table_bucket/folder_with_parquet/*'],
  format = 'PARQUET',
  hive_partition_uri_prefix = 'gs://sc_external_table_bucket/folder_with_parquet',
  require_hive_partition_filter = false);
생성된 코드:
Snowflake
 CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_CUSTOMHIVEPARTITIONEDTABLE_FORMAT
TYPE = PARQUET;

CREATE EXTERNAL TABLE test.CustomHivePartitionedTable 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_TEST_CUSTOMHIVEPARTITIONEDTABLE_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0014 - HIVE PARTITIONED EXTERNAL TABLES ARE NOT SUPPORTED IN SNOWFLAKE ***/!!!
WITH PARTITION COLUMNS (
  field_1 STRING,
  field_2 INT64)
PATTERN = 'folder_with_parquet/.*'
FILE_FORMAT = (TYPE = PARQUET)
!!!RESOLVE EWI!!! /*** SSC-EWI-0016 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: HIVE_PARTITION_URI_PREFIX, REQUIRE_HIVE_PARTITION_FILTER. ***/!!!
OPTIONS(
  hive_partition_uri_prefix = 'gs://sc_external_table_bucket/folder_with_parquet',
  require_hive_partition_filter = false
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}';

권장 사항

  1. Remove the WITH PARTITION COLUMNS clause: Snowflake external tables use automatic partitioning based on the file path. Remove the WITH PARTITION COLUMNS clause from the generated code.

  2. Use Snowflake partitioning: Define partition columns using expressions in the external table’s column definitions. Snowflake can automatically infer partition columns from the directory structure.

  3. Hive metastore integration: If you use a Hive metastore, consider integrating it with Snowflake to synchronize external table metadata automatically.

SSC-EWI-BQ0015

External table requires an external stage to access an external location, define and replace the EXTERNAL_STAGE placeholder

경고

이 EWI은 더 이상 사용되지 않습니다. EWI의 최신 버전은 SSC-EWI-0032를 참조하세요.

설명

CREATE EXTERNAL TABLE 문을 변환할 때, SnowConvert AI는 Snowflake에서 외부 위치와 연결하기 위해 생성된 외부 스테이지로 바꿔야 하는 EXTERNAL_STAGE 자리 표시자를 생성합니다.

Snowflake 계정에서 필요한 저장소 통합 및 외부 스테이지를 설정하려면 다음 가이드를 참조하세요.

코드 예제

입력 코드:
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
  Employee_id INTEGER,
  Name STRING,
  Mail STRING,
  Position STRING,
  Salary INTEGER
)
OPTIONS(
  FORMAT='CSV',
  SKIP_LEADING_ROWS=1,
  URIS=['gs://sc_external_table_bucket/folder_with_csv/Employees.csv']
);
생성된 코드:
Snowflake
CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
  Employee_id INTEGER AS CAST(GET_IGNORE_CASE($1, 'c1') AS INTEGER),
  Name STRING AS CAST(GET_IGNORE_CASE($1, 'c2') AS STRING),
  Mail STRING AS CAST(GET_IGNORE_CASE($1, 'c3') AS STRING),
  Position STRING AS CAST(GET_IGNORE_CASE($1, 'c4') AS STRING),
  Salary INTEGER AS CAST(GET_IGNORE_CASE($1, 'c5') AS INTEGER)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Employees.csv'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER =1);

권장 사항

  • Snowflake 계정에서 외부 연결을 설정하고 EXTERNAL_STAGE 자리 표시자를 대체하여 변환을 완료합니다.

  • 추가 지원이 필요한 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.

SSC-EWI-BQ0016

여러 UNNEST 연산자가 있는 Select *는 모호성을 생성합니다.

경고

This EWI is deprecated; please refer to SSC-FDM-0012 for the latest version of this issue.

심각도

Medium

설명

UNNEST 연산자에 대한 SnowConvert 변환의 일부로 FLATTEN 함수가 사용되며, 이 함수는 THIS 또는 PATH 열과 같은 UNNEST 연산자 기능을 에뮬레이션하는 데 필요하지 않은 여러 열을 생성합니다.

UNNEST 연산자가 있는 SELECT *가 발견된 경우, SnowConvert는 EXCLUDE 키워드를 사용하여 불필요한 열을 제거합니다. 그러나 여러 UNNEST 연산자가 동일한 문에서 사용되는 경우, 모호성 문제로 인해 열을 제거할 수 없으며 이러한 케이스를 표시하기 위해 EWI가 생성됩니다.

필요한 열만 지정하고 이 문제를 해결하기 위해 SELECT 식 목록을 확장하는 것이 좋습니다.

코드 예제

입력 코드:
BigQuery
SELECT * FROM UNNEST ([10,20,30]);

SELECT * FROM UNNEST ([10,20,30]) AS numbers, UNNEST(['Hi', 'Hello', 'Bye']) AS words;
생성된 코드:
Snowflake
SELECT
* EXCLUDE(SEQ, KEY, PATH, THIS, INDEX)
FROM
TABLE(FLATTEN(INPUT => [10,20,30])) AS F0_ (
SEQ,
KEY,
PATH,
INDEX,
F0_,
THIS
);

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0016 - SELECT * WITH MULTIPLE UNNEST OPERATORS WILL RESULT IN COLUMN AMBIGUITY IN SNOWFLAKE ***/!!!
 * FROM
TABLE(FLATTEN(INPUT => [10,20,30])) AS numbers (
SEQ,
KEY,
PATH,
INDEX,
numbers,
THIS
),
TABLE(FLATTEN(INPUT => ['Hi', 'Hello', 'Bye'])) AS words (
SEQ,
KEY,
PATH,
INDEX,
words,
THIS
);

SSC-EWI-BQ0017

Pending SnowConvert AI translation for UNNEST of an array of structs

심각도

Medium

설명

When unnesting an array of structs, BigQuery generates a column for each struct field and splits the struct values into their corresponding columns. SnowConvert AI does not yet support this transformation. Whenever SnowConvert AI detects that the UNNEST operator is applied over an array of structs, this EWI is generated to flag the need for manual conversion.

코드 예제

입력 코드:
BigQuery
CREATE TABLE test.myTestTable
(
  column1 ARRAY<STRUCT<x INT64, y STRING, z STRUCT<a INT64, b INT64>>>
);

SELECT structValues FROM test.myTestTable AS someTable, UNNEST(someTable.column1) AS structValues;
생성된 코드:
Snowflake
CREATE TABLE test.myTestTable
(
  column1 ARRAY DEFAULT []
);

SELECT structValues FROM
  test.myTestTable AS someTable,
  !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0017 - PENDING SNOWCONVERT AI TRANSLATION FOR UNNEST OF AN ARRAY OF STRUCTS ***/!!! UNNEST(someTable.column1) AS structValues;

권장 사항

  1. Use FLATTEN with LATERAL: Manually flatten the array column using Snowflake’s FLATTEN function, then extract individual struct fields using dot notation or GET on the VALUE column.

  2. Example workaround:

    SELECT f.VALUE:x::INT64 AS x, f.VALUE:y::STRING AS y
    FROM test.myTestTable AS t, LATERAL FLATTEN(INPUT => t.column1) AS f;