SnowConvert AI - Problèmes BigQuery

Note

Portée de la conversion

SnowConvert AI pour Google BigQuery prend actuellement en charge l’évaluation et la traduction pour les TABLES et les VIEWS. Bien que SnowConvert AI puisse reconnaître d’autres types d’instructions, ces derniers ne sont pas complètement pris en charge.

Cette page fournit une référence complète sur la manière dont SnowConvert AI traduit les éléments de grammaire Google BigQuery en équivalents Snowflake. Dans cette référence de traduction, vous trouverez des exemples de code, des résultats d’équivalence fonctionnelle, des différences clés, des recommandations, des problèmes connus et des descriptions de chaque transformation.

SSC-EWI-BQ0001

Snowflake ne prend pas en charge la clause d’options.

Avertissement

Cet EWI est obsolète. Veuillez vous référer à SSC-EWI-0016 pour la dernière version de cet EWI.

Sévérité

Medium

Description

Cet EWI est ajouté aux instructions DDL lorsque les OPTIONS comprennent des options non prises en charge par Snowflake.

Exemple de code 

Code d’entrée :

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;

Code de sortie :

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;
Recommandations 
  • Ajoutez des modifications manuelles à l’expression non transformée.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-BQ0002

Le micro-partitionnement est automatiquement effectué sur toutes les tables Snowflake.

Note

Ce problème est obsolète et n’est plus généré par SnowConvert AI.

Gravité

Medium

Description

Cet avertissement est ajouté à la table Create lorsque la clause Partition By est présente. PARTITION BY est une clause facultative qui contrôle le partitionnement des tables, mais qui n’est pas prise en charge dans Snowflake.

Toutes les données des tables Snowflake sont automatiquement divisées en micro-partitions qui sont des unités de stockage contiguës. Chaque micro-partition contient entre 50 MB et 500 MB de données non compressées. Cette taille et cette structure permettent « d’élaguer » granulairement de très grandes tables qui peuvent comprendre des millions, voire des centaines de millions, de micro-partitions.

Snowflake stocke les métadonnées de toutes les lignes stockées dans une micro-partition, y compris :

  • La plage de valeurs pour chacune des colonnes de la micro-partition.

  • Le nombre de valeurs distinctes.

  • Propriétés supplémentaires utilisées à la fois pour l’optimisation et le traitement efficace des requêtes.

De plus, les tables sont partitionnées de manière transparente en suivant l’ordre des données au fur et à mesure de leur insertion/chargement. Pour plus d’informations, veuillez consulter les [Avantages du micro-partitionnement](https://docs.snowflake.com/fr/user-guide/tables-clustering-micropartitions#benefins-of-micro-partitioninghttps://docs.snowflake. com/en/user-guide/tables-clustering-micropartitions#benedits-of-micro-partitioning).

Exemple de code

Code d’entrée :
BigQuery
 CREATE TABLE table1(
    transaction_id INT, 
    transaction_date DATE
)
PARTITION BY transaction_date;
Code généré :
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" }}';

Recommandations

  • Aucune action supplémentaire de la part de l’utilisateur n’est requise. Cette recommandation est simplement donnée à titre informatif.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-BQ0003

Pending SnowConvert AI translation for differential privacy.

Gravité

Medium

Description

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.

Exemple de code

Code d’entrée :
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;
Code généré :
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;

Recommandations

  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 ne prend pas en charge les fenêtres nommées.

Gravité

Medium

Description

BigQuery permet de définir et d’utiliser des fenêtres nommées dans des fonctions d’agrégation. Elles sont définies dans la clause WINDOW de la requête. Elles sont utilisées (et peuvent l’être) à l’intérieur de la clause OVER de ces fonctions.

Snowflake ne prend pas en charge la déclaration de fenêtres nommées. Envisagez de prendre la définition de la fenêtre et de l’appliquer à toutes les utilisations de cette fenêtre directement dans la clause OVER des fonctions.

Exemple de code

Code d’entrée :
BigQuery
 SELECT 
    COUNT(col1) OVER(myWindow)
FROM 
    test.exampleTable
WINDOW 
    myWindow AS (ORDER BY col2);
Code généré :
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);

Recommandations

  • Examinez les définitions de vos fenêtres nommées. Il se peut que vous puissiez prendre la définition et l’appliquer à la clause OVER des fonctions dans lesquelles elle est utilisée. Cependant, gardez à l’esprit que les différences fonctionnelles entre les cadres de fenêtre BigQuery et Snowflake continueront de s’appliquer. Considérez le cas suivant comme exemple :

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;

Ces deux requêtes produiront les mêmes lignes, mais les résultats Snowflake ne seront pas ordonnés. En effet, la clause ORDER BY pour les cadres de fenêtre n’a pas d’impact sur l’ensemble de l’ordre des requêtes, comme cela est le cas dans BigQuery.

SSC-EWI-BQ0005

Javascript code has not been validated by SnowConvert AI.

Gravité

Élevé

Description

SnowConvert AI ne transforme pas le code Javascript. Étant donné que le code Javascript extrait des fonctions BigQuery n’a pas du tout été modifié, celui-ci pourrait avoir besoin de quelques ajustements pour fonctionner sur Snowflake.

Exemple de code

Code d’entrée :
BigQuery
 CREATE FUNCTION test.languageJs (x integer, y integer)
RETURNS integer
LANGUAGE js
AS "return x * y;";
Code généré :
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;
$$;

Recommandations

  • Examinez l’ensemble du code Javascript avant le déploiement.

  • Les paramètres Javascript dans Snowflake doivent être en majuscules.

  • For more information, visit Snowflake’s Introduction to Javascript UDFs.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-BQ0006

Le paramètre orienté dans la fonction ST_GEOGFROMTEXT n’est pas pris en charge dans Snowflake.

Gravité

Faible

Description

Cet avertissement est ajouté lorsque le paramètre orienté est spécifié dans la fonction ST_GEOGFROMTEXT, car il n’est pas pris en charge dans Snowflake. Si ce paramètre est défini sur TRUE, tout polygone dans l’entrée est supposé être orienté comme suit : si quelqu’un longe la limite du polygone dans l’ordre des sommets d’entrée, l’intérieur du polygone se trouve à gauche. Cela permet à WKT de représenter des polygones plus grands qu’un hémisphère. Si le paramètre orienté est défini sur FALSE ou omis, cette fonction renvoie le polygone avec la plus petite surface.

Exemple de code

Code d’entrée :
BigQuery
 SELECT ST_GEOGFROMTEXT('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))', TRUE);
Code généré :
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))');

Recommandations

  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

La séquence d’échappement n’est pas valide dans Snowflake.

Gravité

Faible

Description

Le caractère Cloche (\a) et le caractère Vertical (\v) sont des séquences d’échappement valides dans BigQuery, mais pas dans 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.

Exemple de code

Code d’entrée :
BigQuery
 SELECT "\a";
SELECT "\v";
Code généré :
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';

Recommandations

  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

La séquence d’échappement Unicode à 8 chiffres hexadécimaux n’est pas prise en charge dans Snowflake.

Gravité

Faible

Description

BigQuery prend en charge les séquences Unicode à 8 chiffres hexadécimaux. Snowflake ne prend pas en charge ce type de séquences Unicode.

Cet avertissement est ajouté lorsqu’une séquence Unicode à 8 chiffres hexadécimaux est trouvée lors de la traduction du code BigQuery. En savoir plus sur les séquences d’échappement dans BigQuery.

Exemple de code

Code d’entrée :
BigQuery
 SELECT "\U00100000";
Code généré :
Snowflake
 SELECT
    !!!RESOLVE EWI!!! /*** SSC-EWI-BQ0008 - EIGHT HEX DIGIT UNICODE ESCAPE SEQUENCE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
    '\U00100000';

Recommandations

  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.

Gravité

Élevé

Description

Snowflake requiert une clause RETURNS TABLE valide pour les instructions CREATE TABLE FUNCTION. SnowConvert AI doit en construire une nouvelle à partir de zéro. Pour ce faire, une analyse est effectuée sur la requête CREATE TABLE FUNCTION afin d’inférer correctement les types des colonnes de la table résultante. Cependant, il peut y avoir des scénarios où SnowConvert AI présente une limitation qui l’empêche de construire correctement la clause de retour.

Ces scénarios seront pris en compte à l’avenir, mais en attendant, cette erreur sera ajoutée.

Exemple de code

Code d’entrée :
BigQuery
 CREATE TABLE FUNCTION tableValueFunction2()
AS
SELECT *
REPLACE("John" AS employee_name)
FROM employees;
Code généré :
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
  $$;

Recommandations

  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

Gravité

Medium

Description

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.

Exemple de code

Code d’entrée :
BigQuery
 CREATE EXTERNAL TABLE my_dataset.sensor_readings
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://my_bucket/sensors/*.parquet']
);
Code généré :
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']
);

Recommandations

  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

L’attribution de variables de session d’un type de données complexe n’est pas prise en charge dans Snowflake.

Gravité

Medium

Description

Dans BigQuery, la déclaration d’une variable au niveau du script permet de l’utiliser dans l’ensemble du script. Pour répliquer ce comportement dans Snowflake, des variables SQL sont utilisées.

Cependant, la déclaration de variables de types de données complexes comme ARRAY, GEOGRAPHY, STRUCT ou JSON échouera dans Snowflake lors de la tentative de définition de la valeur sur la variable SQL. Lorsque SnowConvert AI détectera un de ces cas, cet EWI sera ajouté à la déclaration de la variable SQL.

Les variables de ces types peuvent être déclarées sans problème à l’intérieur d’instructions de bloc et d’autres instructions de procédure. Cet EWI ne s’applique qu’aux variables déclarées au niveau du script.

Exemple de code

Code d’entrée :
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;
Code généré :
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;

Recommandations

  • Si les utilisations de la variable sont limitées à une seule portée, ou si sa valeur n’est jamais modifiée, envisagez de déclarer la variable localement dans les portées qui l’utilisent. Ainsi, le problème sera résolu.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-BQ0012

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

Gravité

Élevé

Description

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.

Exemple de code

Code d’entrée :
BigQuery
 INSERT INTO test.tuple_sample
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));
Code généré :
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));

Recommandations

  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

Le format de données de tables externes n’est pas pris en charge dans Snowflake.

Avertissement

Cet EWI est obsolète. Veuillez vous référer à SSC-EWI-0029 pour la dernière version de cet EWI.

Gravité

Medium

Description

Snowflake prend en charge les formats BigQuery suivants :

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.

Exemple de code

Code d’entrée :
BigQuery
 CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
  format = 'DATASTORE_BACKUP',
  uris = ['gs://backup_bucket/backup_folder/*']
);
Code généré :
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/*']
);

Recommandations

SSC-EWI-BQ0014

Hive partitioned external tables are not supported in Snowflake

Gravité

Medium

Description

Snowflake ne prend pas en charge les tables externes partitionnées Hive. Lorsque la clause WITH PARTITION COLUMNS sera trouvée dans la table externe, elle sera marquée comme non prise en charge à l’aide de cet EWI.

Exemple de code

Code d’entrée :
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);
Code généré :
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" }}';

Recommandations

  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

Avertissement

Cet EWI est obsolète. Veuillez vous référer à SSC-EWI-0032 pour la dernière version de cet EWI.

Description

Lors de la transformation de l’instruction CREATE EXTERNAL TABLE, SnowConvert AI générera un espace réservé EXTERNAL_STAGE devant être remplacé par la zone de préparation externe créée pour la connexion avec l’emplacement externe de Snowflake.

Veuillez vous référer aux guides suivants pour configurer l’intégration de stockage et la zone de préparation externe nécessaires dans votre compte Snowflake :

Exemple de code

Code d’entrée :
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']
);
Code généré :
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);

Recommandations

  • Configurez votre connexion externe dans le compte Snowflake et remplacez l’espace réservé EXTERNAL_STAGE pour effectuer la transformation.

  • Si vous avez besoin de plus d’assistance, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.

SSC-EWI-BQ0016

Sélectionner * avec plusieurs opérateurs UNNEST produira une ambiguïté dans les colonnes.

Avertissement

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

Gravité

Medium

Description

Dans le cadre de la transformation SnowConvert pour l’opérateur UNNEST, la fonction FLATTEN est utilisée. Cette fonction génère plusieurs colonnes non nécessaires pour émuler la fonctionnalité d’opérateur UNNEST, comme les colonnes THIS ou PATH.

Lorsqu’un SELECT * avec l’opération UNNEST sera trouvé, SnowConvert supprimera les colonnes non nécessaires à l’aide du mot-clé EXCLUDE. Cependant, lorsque plusieurs opérateurs UNNEST sont utilisés dans la même instruction, les colonnes ne peuvent pas être supprimées en raison de problèmes d’ambiguïté. Cet EWI sera généré pour signaler ces cas.

Il est recommandé de développer la liste des expressions SELECT afin de ne spécifier que les colonnes attendues et de résoudre ce problème.

Exemple de code

Code d’entrée :
BigQuery
SELECT * FROM UNNEST ([10,20,30]);

SELECT * FROM UNNEST ([10,20,30]) AS numbers, UNNEST(['Hi', 'Hello', 'Bye']) AS words;
Code généré :
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

Gravité

Medium

Description

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.

Exemple de code

Code d’entrée :
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;
Code généré :
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;

Recommandations

  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;