SnowConvert AI - Problemas do BigQuery

Nota

Escopo de conversão

O SnowConvert AI para Google BigQuery atualmente é compatível com avaliação e tradução de TABLES e VIEWS. Embora o SnowConvert AI possa reconhecer outros tipos de instruções, elas não são totalmente compatíveis.

Esta página fornece uma referência abrangente de como o SnowConvert AI traduz elementos de gramática do Google BigQuery para equivalentes do Snowflake. Nesta referência de tradução, você encontrará exemplos de código, resultados de equivalência funcional, principais diferenças, recomendações, problemas conhecidos e descrições de cada transformação.

SSC-EWI-BQ0001

O Snowflake não é compatível com a cláusula de opções.

Aviso

Este EWI está obsoleto; consulte SSC-EWI-0016 para obter a versão mais recente deste EWI.

Severidade

Medium

Descrição

Este EWI é adicionado a instruções DDL quando o OPTIONS não tem opções compatíveis com o Snowflake.

Exemplo de código

Código de entrada:

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;

Código de saída:

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;
Recomendações

SSC-EWI-BQ0002

O microparticionamento é realizado automaticamente em todas as tabelas Snowflake.

Nota

Este problema está obsoleto e não é mais gerado pelo SnowConvert AI

Gravidade

Média

Descrição

Este aviso é adicionado a Create table quando a cláusula partition by está presente. PARTITION BY é uma cláusula opcional que controla o particionamento de tabela, mas não é compatível com o Snowflake.

Todos os dados nas tabelas Snowflake são automaticamente divididos em micropartições, que são unidades de armazenamento contíguas. Cada micropartição contém entre 50 MB e 500 MB de dados não comprimidos. Este tamanho e estrutura permitem a remoção extremamente granular em tabelas muito grandes, que podem ser compostas de milhões, ou mesmo centenas de milhões, de micropartições.

O Snowflake armazena metadados sobre todas as linhas armazenadas em uma micropartição, inclusive:

  • O intervalo de valores para cada uma das colunas na micropartição.

  • O número de valores distintos.

  • Propriedades adicionais utilizadas tanto para otimização quanto para o processamento eficiente de consultas.

As tabelas são particionadas de forma transparente usando a ordenação dos dados à medida que são inseridos/carregados. Para obter mais informações, consulte Benefícios do microparticionamento.

Exemplo de código

Código de entrada:
BigQuery
 CREATE TABLE table1(
    transaction_id INT, 
    transaction_date DATE
)
PARTITION BY transaction_date;
Código gerado:
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" }}';

Recomendações

  • Nenhuma ação adicional do usuário é necessária; ele é apenas informativo.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-BQ0003

Pending SnowConvert AI translation for differential privacy.

Gravidade

Medium

Descrição

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.

Exemplo de código

Código de entrada:
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;
Código gerado:
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;

Recomendações

  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

O Snowflake não é compatível com janelas nomeadas.

Gravidade

Medium

Descrição

O BigQuery permite a definição e o uso de janelas nomeadas em funções agregadas, elas são definidas na cláusula WINDOW da consulta em que são usadas e podem ser usadas dentro da cláusula OVER destas funções.

O Snowflake não é compatível com a declaração de janelas nomeadas. Considere usar a definição da janela e aplicá-la a todos os usos dessa janela diretamente na cláusula OVER das funções.

Exemplo de código

Código de entrada:
BigQuery
 SELECT 
    COUNT(col1) OVER(myWindow)
FROM 
    test.exampleTable
WINDOW 
    myWindow AS (ORDER BY col2);
Código gerado:
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);

Recomendações

  • Revise suas definições de janela nomeada; talvez seja possível usar a definição e aplicá-la à cláusula OVER das funções em que é utilizada. No entanto, tenha em mente as diferenças funcionais entre quadros de janela do BigQuery e do Snowflake ainda se aplicam, considere o seguinte caso como exemplo:

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;

Estas duas consultas produzirão as mesmas linhas, mas os resultados do Snowflake não serão ordenados, isto porque a cláusula ORDER BY para quadros de janela não afeta toda a ordenação da consulta como faz no BigQuery.

SSC-EWI-BQ0005

Javascript code has not been validated by SnowConvert AI.

Gravidade

High

Descrição

O SnowConvert AI não transforma o código Javascript. Como o código Javascript extraído das funções do BigQuerynão foram alteradas, esse código pode precisar de alguns ajustes para funcionar no Snowflake.

Exemplo de código

Código de entrada:
BigQuery
 CREATE FUNCTION test.languageJs (x integer, y integer)
RETURNS integer
LANGUAGE js
AS "return x * y;";
Código gerado:
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;
$$;

Recomendações

SSC-EWI-BQ0006

O parâmetro orientado na função ST_GEOGFROMTEXT não é compatível com o Snowflake.

Gravidade

Low

Descrição

Este aviso é adicionado quando o parâmetro orientado é especificado na função ST_GEOGFROMTEXT, porque não é compatível com o Snowflake. Se este parâmetro for definido como TRUE, presume-se que qualquer polígono na entrada é orientado da seguinte forma: se alguém caminha ao longo do limite do polígono na ordem dos vértices de entrada, o interior do polígono será para a esquerda. Isto permite que WKT represente polígonos maiores que um fuso horário. Se o orientado é FALSE ou omitido, esta função retorna o polígono com a menor área.

Exemplo de código

Código de entrada:
BigQuery
 SELECT ST_GEOGFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', TRUE);
Código gerado:
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))');

Recomendações

  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

A sequência de escape não é válida no Snowflake.

Gravidade

Low

Descrição

O caractere de sino (\a) e o caractere vertical (\v) são sequências de escape válidas no BigQuery, mas não no 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.

Exemplo de código

Código de entrada:
BigQuery
 SELECT "\a";
SELECT "\v";
Código gerado:
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';

Recomendações

  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

A sequência de escape Unicode de oito dígitos hexadecimais não é compatível com o Snowflake.

Gravidade

Low

Descrição

O BigQuery é compatível com sequências Unicode de 8 dígitos hexadecimais. O Snowflake não é compatível com este tipo de sequências Unicode.

Este aviso é adicionado quando uma sequência Unicode de 8 dígitos hexadecimais é encontrada ao traduzir código do BigQuery. Mais sobre Sequências de escape do BigQuery.

Exemplo de código

Código de entrada:
BigQuery
 SELECT "\U00100000";
Código gerado:
Snowflake
 SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0008 - EIGHT HEX DIGIT UNICODE ESCAPE SEQUENCE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
    '\U00100000';

Recomendações

  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.

Gravidade

High

Descrição

O Snowflake requer uma cláusula RETURNS TABLE válida para instruções CREATE TABLE FUNCTION. O SnowConvert AI tem que construir uma nova a partir do zero. Para isso, é feita uma análise na consulta CREATE TABLE FUNCTION para inferir corretamente os tipos das colunas da tabela resultante; no entanto, pode haver cenários em que o SnowConvert AI atualmente tem uma limitação para poder construir a cláusula de retorno corretamente.

Estes cenários serão considerados no futuro, mas, enquanto isso, este erro será adicionado.

Exemplo de código

Código de entrada:
BigQuery
 CREATE TABLE FUNCTION tableValueFunction2()
AS
SELECT *
REPLACE("John" AS employee_name)
FROM employees;
Código gerado:
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
  $$;

Recomendações

  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

Gravidade

Medium

Descrição

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.

Exemplo de código

Código de entrada:
BigQuery
 CREATE EXTERNAL TABLE my_dataset.sensor_readings
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://my_bucket/sensors/*.parquet']
);
Código gerado:
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']
);

Recomendações

  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

A atribuição de variável de sessão de tipo de dados complexo não é compatível com o Snowflake

Gravidade

Medium

Descrição

No BigQuery, a declaração de uma variável no nível do script permite que ela seja usada em todo o script para replicar esse comportamento no Snowflake. Variáveis SQL são usadas.

Entretanto, a declaração de variáveis de tipos de dados complexos como ARRAY, GEOGRAPHY, STRUCT ou JSON falhará no Snowflake ao tentar definir o valor para a variável SQL. Quando o SnowConvert AI detecta um desses casos, este EWI será adicionado à declaração de variável SQL.

Variáveis desses tipos podem ser declaradas sem problemas dentro de instruções de bloco e outras instruções processuais. Este EWI aplica-se somente a variáveis declaradas no nível do script.

Exemplo de código

Código de entrada:
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;
Código gerado:
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;

Recomendações

  • Se os usos da variável estiverem limitados a um único escopo ou seu valor nunca for modificado, considere declarar a variável localmente nos escopos que a utilizam, isso resolverá o problema.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-BQ0012

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

Gravidade

High

Descrição

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.

Exemplo de código

Código de entrada:
BigQuery
 INSERT INTO test.tuple_sample
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));
Código gerado:
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));

Recomendações

  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

O formato de dados da tabela externa é incompatível com o Snowflake

Aviso

Este EWI está obsoleto; consulte SSC-EWI-0029 para obter a versão mais recente deste EWI.

Gravidade

Medium

Descrição

O Snowflake é compatível com os seguintes formatos do 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.

Exemplo de código

Código de entrada:
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
  format = 'DATASTORE_BACKUP',
  uris = ['gs://backup_bucket/backup_folder/*']
);
Código gerado:
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/*']
);

Recomendações

SSC-EWI-BQ0014

Hive partitioned external tables are not supported in Snowflake

Gravidade

Medium

Descrição

O Snowflake não é compatível com tabelas externas particionadas do Hive. Quando a cláusula WITH PARTITION COLUMNS for encontrada na tabela externa, ela será marcada como incompatível usando este EWI.

Exemplo de código

Código de entrada:
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);
Código gerado:
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" }}';

Recomendações

  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

Aviso

Este EWI está obsoleto; consulte SSC-EWI-0032 para obter a versão mais recente deste EWI.

Descrição

Ao transformar a instrução CREATE EXTERNAL TABLE, o SnowConvert AI vai gerar um espaço reservado EXTERNAL_STAGE, que precisa ser substituído pela área de preparação externa criada para conexão com a localização externa pelo Snowflake.

Consulte os seguintes guias para configurar a integração de armazenamento e a área de preparação externa necessários em sua conta Snowflake:

Exemplo de código

Código de entrada:
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']
);
Código gerado:
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);

Recomendações

  • Configure sua conexão externa na conta Snowflake e substitua o espaço reservado EXTERNAL_STAGE para concluir a transformação.

  • Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com

SSC-EWI-BQ0016

Selecionar * com vários operadores UNNEST produzirá ambiguidade na coluna

Aviso

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

Gravidade

Medium

Descrição

Como parte da transformação do SnowConvert para o operador UNNEST, a função FLATTEN é usada, a qual gera várias colunas que não são necessárias para emular a funcionalidade do operador UNNEST, como as colunas THIS ou PATH.

Quando um SELECT * com o operador UNNEST for encontrado, o SnowConvert removerá as colunas desnecessárias usando a palavra-chave EXCLUDE; no entanto, quando vários operadores UNNEST são usados na mesma instrução, as colunas não podem ser removidas devido a problemas de ambiguidade. Este EWI será gerado para marcar tais casos.

Recomenda-se expandir a lista de expressões SELECT para especificar apenas as colunas esperadas e resolver esse problema.

Exemplo de código

Código de entrada:
BigQuery
SELECT * FROM UNNEST ([10,20,30]);

SELECT * FROM UNNEST ([10,20,30]) AS numbers, UNNEST(['Hi', 'Hello', 'Bye']) AS words;
Código gerado:
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

Gravidade

Medium

Descrição

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.

Exemplo de código

Código de entrada:
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;
Código gerado:
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;

Recomendações

  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;