SnowConvert AI - BigQueryの機能の違い¶
注釈
変換範囲
SnowConvert AI for Google BigQuery は現在、TABLES と VIEWS の評価と変換をサポートしています。SnowConvert AI は他のタイプのステートメントも認識できますが、完全にはサポートしていません。
SSC-FDM-BQ0001¶
Snowflakeでは、配列にアクセスすると、範囲外の正のインデックスに対してエラーではなく NULL が生成されます。
説明¶
Snowflakeで ARRAY オブジェクトにインデックスを使用してアクセスする場合、配列のサイズよりも大きなインデックスを指定すると、 NULL 値が返されます。これは、関数 SAFE_OFFSET または SAFE_ORDINAL が使用されない限り、範囲外のインデックスを使用して ARRAY にアクセスするとエラーが発生する BigQuery の動作とは異なります。
この警告は、安全でない ARRAY アクセスに追加されます。
コード例¶
入力コード:¶
BigQuery¶
SELECT ([40, 12, 30])[8];
SELECT ([40, 12, 30])[SAFE_OFFSET(8)];
生成されたコード:¶
Snowflake¶
SELECT
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
([40, 12, 30])[8];
SELECT
PUBLIC.SAFE_OFFSET_UDF( ([40, 12, 30]), 8);
ベストプラクティス¶
コード内の配列アクセスの使われ方を分析します。元のコードで範囲外エラーが発生するリスクがなかった場合は、違いは見られず、この警告は無視しても問題ありません。
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0002¶
例外システム変数はSnowflakeではサポートされていません。
説明¶
この FDM は、ステートメントが[BigQuery 内の例外変数](https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#beginexceptionend)を参照する場合に追加されます。なぜなら、これらの変数はSnowflakeではサポートされておらず、これらの変数の内容はSnowflakeで許可されている例外変数とは大きく異なるためです。 詳細については、[Snowflakeにおける例外処理](https://docs.snowflake.com/en/developer-guide/snowflake-scripting/exceptions)をご参照ください。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE PROCEDURE test.proc1()
BEGIN
SELECT 1/0;
EXCEPTION WHEN ERROR THEN
SELECT
@@error.message as message,
@@error.stack_trace as stack_trace,
@@error.statement_text as statement_text,
@@error.formatted_stack_trace as formatted_stack_trace;
END;
結果¶
[{
"message": "Query error: division by zero: 1 / 0 at [snowflake-snowconvert-team.test.proc1:2:3]",
"stack_trace": [{
"line": "2",
"column": "3",
"filename": null,
"location": "snowflake-snowconvert-team.test.proc1"
}, {
"line": "1",
"column": "1",
"filename": null,
"location": null
}],
"statement_text": "SELECT 1/0",
"formatted_stack_trace": "At snowflake-snowconvert-team.test.proc1[2:3]\nAt [1:1]\n"
}]
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE PROCEDURE test.proc1 ()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "04/09/2025", "domain": "test" }}'
AS
$$
BEGIN
SELECT 1/0;
EXCEPTION WHEN OTHER THEN
-- --** SSC-FDM-BQ0002 - EXCEPTION SYSTEM VARIABLES ARE NOT SUPPORTED IN SNOWFLAKE. **
-- SELECT
-- @@error.message as message,
-- @@error.stack_trace as stack_trace,
-- @@error.statement_text as statement_text,
-- @@error.formatted_stack_trace as formatted_stack_trace;
RETURN OBJECT_CONSTRUCT('SQLERRM', SQLERRM, 'SQLCODE', SQLCODE, 'SQLSTATE', SQLSTATE);
END;
$$;
結果¶
{
"SQLCODE": 100051,
"SQLERRM": "Division by zero",
"SQLSTATE": "22012"
}
ベストプラクティス¶
Snowflakeには、例外に関する情報を提供する3つの組み込み変数があります。
SQLSTATE:これは、 ANSI SQL 標準[SQLSTATE](https://en.wikipedia.org/wiki/SQLSTATE)をモデルにした5文字のコードです。
SQLERRM:これはエラーメッセージです。
SQLCODE:これは5桁の符号付き整数です。
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0003¶
従属オブジェクト情報が欠落しているため、正しい戻りテーブル句を生成できません。
説明¶
Snowflakeでは、 CREATE TABLE FUNCTION ステートメントに対して有効なRETURNS TABLE 句が必要です。
SnowConvert AI では、元の BigQuery ソースコードに RETURNS TABLE 句がなく、新しい句を最初から作成しなければならないシナリオに遭遇することがあります。これを行うには、結果のテーブルの列の型を適切に推測するために、 CREATE TABLE FUNCTION クエリが分析されます。SnowConvert AI が必要な情報を収集できない場合、この EWI が追加されます。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE TABLE FUNCTION function_name_noreturns_asterisk_join (parameter_name INTEGER)
AS
SELECT *
FROM unknownTable1 t1
JOIN unknownTable2 t2 ON t1.col1 = t2.fk_col1;
生成されたコード:¶
Snowflake¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "unknownTable1", "unknownTable2" **
CREATE OR REPLACE FUNCTION function_name_noreturns_asterisk_join (parameter_name INTEGER)
----** SSC-FDM-BQ0003 - UNABLE TO GENERATE CORRECT RETURNS TABLE CLAUSE DUE TO MISSING DEPENDENT OBJECT INFORMATION. **
--RETURNS TABLE (
--)
AS
$$
SELECT *
FROM
unknownTable1 t1
JOIN
unknownTable2 t2 ON t1.col1 = t2.fk_col1
$$;
ベストプラクティス¶
SnowConvert AI 、重要な情報にアクセスできるように、依存オブジェクトの定義は常に入力コードに含めるようにしてください。 ;
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0004¶
INFER_SCHEMA 関数は、テーブルテンプレートを生成するためにワイルドカードを含まないファイルパスを必要とするので、FILE_PATH プレースホルダーをそれに置き換えます
警告
このFDM は非推奨です。この FDM の最新バージョンについては、[SSC-FDM-0035](generalFDM.md#ssc-fdm-0035)をご参照ください。
説明¶
[INFER_SCHEMA](https://docs.snowflake.com/en/sql-reference/functions/infer_schema)関数は、ファイルの構造に基づいてテーブルの列定義を生成するためにSnowflakeで使用されます。この関数は、テーブルの列を構築するために使用されるファイルまたはフォルダーのパスを指定する LOCATION パラメーターを必要とします。ただし、このパスは正規表現に対応していないため、ワイルドカード* 文字はサポートされません。
テーブルに列がない場合、 SnowConvert AI はすべての URIS をチェックして、ワイルドカードを使用していないものを見つけ、 INFER _SCHEMA 関数で使用する。このような条件を満たす URI がない場合、この FDM と、 FILE_PATH プレースホルダーが生成されます。このプレースホルダーは、テーブルの列を生成するために、外部テーブルによって参照されるいずれかのファイルのパスに置き換える必要があります。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2
OPTIONS(
FORMAT='JSON',
URIS=['gs://sc_external_table_bucket/folder_with_json/*']
);
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2 USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-BQ0004 - 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_MY_EXTERNAL_TABLE_JSON2_FORMAT'))
)
!!!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_json/.*'
FILE_FORMAT = (TYPE = JSON);
ベストプラクティス¶
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0005¶
外部テーブルでは CSV ヘッダーの解析はサポートされていないため、列の名前を元の名前と一致するように変更する必要があります
説明¶
Currently, Snowflake external tables do not support parsing the header of CSV files. When an external table with no explicit column list and CSV file format is found, SnowConvert AI will produce the SKIP_HEADER file format option to avoid runtime errors, however, this will cause the table column names to have the autogenerated names c1, c2, ..., cN.
この FDM は、ヘッダーを解析できず、元の列名を保持するためには手動で列名を変更する必要があることを通知するために生成されます。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_csv
OPTIONS(
FORMAT='CSV',
URIS=['gs://sc_external_table_bucket/folder_with_csv/Employees.csv']
);
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_CSV_FORMAT
TYPE = CSV
SKIP_HEADER = 1;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_csv
--** SSC-FDM-BQ0005 - PARSING THE CSV HEADER IS NOT SUPPORTED IN EXTERNAL TABLES, COLUMNS MUST BE RENAMED TO MATCH THE ORIGINAL NAMES **
USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/folder_with_csv/Employees.csv', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_CSV_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
PATTERN = 'folder_with_csv/Employees.csv'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
ベストプラクティス¶
変換を完了するには、テーブル列の名前をファイルからの元の名前に変更してください。
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0006¶
Googleドライブからの読み込みはSnowflakeではサポートされていません。ファイルを外部の場所にアップロードし、 FILE_PATH プレースホルダーを置き換えてください。
説明¶
Snowflakeは、Google Driveにホストされているファイルからのデータの読み込みをサポートしていません。この FDM は、それを通知するために生成されます。外部ステージからアクセスできるように、Google Driveファイルを外部の場所にアップロードしてください。
PATTERN 句には、自動生成されたプレースホルダー FILE_PATH0、FILE_PATH1、...、FILE_PATHN が格納されます。このプレースホルダーは、ファイルが外部の場所に移動された後にファイル/フォルダーのパスに置き換えられます。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_drive_test
OPTIONS(
FORMAT='JSON',
URIS=['https://drive.google.com/open?id=someFileId']
);
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_DRIVE_TEST_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_drive_test 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_MY_EXTERNAL_TABLE_DRIVE_TEST_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS AN EXTERNAL LOCATION, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
--** SSC-FDM-BQ0006 - READING FROM GOOGLE DRIVE IS NOT SUPPORTED IN SNOWFLAKE, UPLOAD THE FILES TO THE EXTERNAL LOCATION AND REPLACE THE FILE_PATH PLACEHOLDERS **
PATTERN = 'FILE_PATH0'
FILE_FORMAT = (TYPE = JSON);
ベストプラクティス¶
Googleドライブにホストされているファイルを外部ステージで参照される外部の場所にアップロードし、 FILE_PATH プレースホルダーを置き換えて変換を完了します。
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0007¶
Snowflakeではスプレッドシートからの読み込みはサポートされていません。代わりに CSV ファイルタイプを使用してください。
説明¶
Snowflakeはファイル形式としてGoogle Sheetsをサポートしていませんが、その構造はSnowflakeがサポートしている CSV ファイルに似ています。
When SnowConvert AI detects an external table using the GOOGLE_SHEETS format, it will produce an external table with the CSV file format instead.
この FDM は、変換でGoogleシートではなく CSV ファイルが必要になることをユーザーに通知するために生成されます。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.spreadsheetTable
(
Name STRING,
Code INTEGER,
Price INTEGER,
Expiration_date DATE
)
OPTIONS(
format="GOOGLE_SHEETS",
skip_leading_rows = 1,
uris=['https://docs.google.com/spreadsheets/d/someFileId/edit?usp=sharing']
);
生成されたコード:¶
Snowflake¶
--** SSC-FDM-BQ0007 - READING FROM SPREADSHEETS IS NOT SUPPORTED IN SNOWFLAKE, USE THE CSV FILE TYPE INSTEAD **
CREATE OR REPLACE EXTERNAL TABLE test.spreadsheetTable
(
Name STRING AS CAST(GET_IGNORE_CASE($1, 'c1') AS STRING),
Code INTEGER AS CAST(GET_IGNORE_CASE($1, 'c2') AS INTEGER),
Price INTEGER AS CAST(GET_IGNORE_CASE($1, 'c3') AS INTEGER),
Expiration_date DATE AS CAST(GET_IGNORE_CASE($1, 'c4') AS DATE)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS AN EXTERNAL LOCATION, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
--** SSC-FDM-BQ0006 - READING FROM GOOGLE DRIVE IS NOT SUPPORTED IN SNOWFLAKE, UPLOAD THE FILES TO THE EXTERNAL LOCATION AND REPLACE THE FILE_PATH PLACEHOLDERS **
PATTERN = 'FILE_PATH0'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "07/16/2025", "domain": "no-domain-provided" }}';
ベストプラクティス¶
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0008¶
Where句は STRUCT 型の列を参照します。
説明¶
If a Snowflake Object has a key value format, when a comparison is made with another Object, Snowflake compares both key and value. On the other hand, when BigQuery compares between Structs, it compares only values, regardless if the Struct has keys or not.
この比較の違いにより、同じ比較に対して SnowConvert 、 AI、 BigQuery で結果が異なる可能性があります。この FDM は、 BigQuery 構造体から作成されたSnowflakeオブジェクトで比較が行われるときに追加されます。
コード例¶
入力:¶
BigQuery¶
CREATE OR REPLACE TABLE test.compExprTable
(
COL1 STRUCT<sc1 INT64>,
COL2 STRUCT<sc2 INT64>
);
SELECT * FROM test.compExprTable WHERE COL1 <> (COL2);
出力:¶
Snowflake¶
CREATE OR REPLACE TABLE test.compExprTable
(
COL1 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL2 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}';
SELECT * FROM
test.compExprTable
--** SSC-FDM-BQ0008 - WHERE CLAUSE REFERENCES A COLUMN OF STRUCT TYPE. COMPARISON OPERATIONS MAY PRODUCE DIFFERENT RESULTS IN SNOWFLAKE. **
WHERE COL1 <> (COL2);
ベストプラクティス¶
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。
SSC-FDM-BQ0010¶
地理機能はSnowflakeでは必要ありません。
説明¶
この警告は、値句で地理関数を使用してこのタイプのデータを挿入する場合に追加されます。これは、これらが不要であり、Snowflakeがデータが[WGS 84標準](https://spatialreference.org/ref/epsg/wgs-84/)に準拠していることを自動的に検出するためです。
コード例¶
入力:¶
BigQuery¶
CREATE OR REPLACE TABLE test.geographyType
(
COL1 GEOGRAPHY
);
INSERT INTO test.geographyType VALUES
(ST_GEOGFROMTEXT('POINT(-122.35 37.55)')),
(ST_GEOGFROMTEXT('LINESTRING(-124.20 42.00, -120.01 41.99)'));
SELECT * FROM test.geographyType;
出力:¶
クエリ¶
CREATE OR REPLACE TABLE test.geographyType
(
COL1 GEOGRAPHY
);
INSERT INTO test.geographyType
VALUES
(
--** SSC-FDM-BQ0010 - THE FUNCTION 'ST_GEOGFROMTEXT' IS NOT REQUIRED IN SNOWFLAKE. **
'POINT(-122.35 37.55)'), (
--** SSC-FDM-BQ0010 - THE FUNCTION 'ST_GEOGFROMTEXT' IS NOT REQUIRED IN SNOWFLAKE. **
'LINESTRING(-124.20 42.00, -120.01 41.99)');
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT';
SELECT * FROM
test.geographyType;
SSC-FDM-BQ0011¶
このスクリプトの名前付きパラメーターは、Snowflake CLI 変数に変換されました。
説明¶
BigQuery クエリを使用する場合、 @parameter_name 構文を使用して名前付きパラメーターを指定することができます。パラメータ化されたクエリが入力コードで見つかると、 SnowConvert はスクリプトの最初にこの FDM を生成し、名前付きパラメーターがSnowflake CLI 変数に変換されたことをユーザーに示します。
名前付きパラメーターを含む変換済みの.sqlスクリプトを実行するには、変数置換を使用して Snowflake CLI を実行します。
Snowflake CLI の設定と使用方法の詳細については、[Snowflake CLI とは](../../../../../../developer-guide/snowflake-cli/index.rst)をご参照ください。
コード例¶
入力:¶
BigQuery¶
SELECT column1 FROM test.parametersExample WHERE column2 = @searchValue;
実行例(bqクエリコマンドを使用)¶
bq query \
--use_legacy_sql=false \
--parameter=searchValue:Int64:80 \
'SELECT column1 FROM test.parametersExample WHERE column2 = @searchValue'
出力:¶
Snowflake¶
--** SSC-FDM-BQ0011 - NAMED PARAMETERS IN THIS SCRIPT WERE TRANSFORMED TO SNOWFLAKE CLI VARIABLES. **
SELECT column1 FROM
test.parametersExample
WHERE column2 = <% searchValue %>;
実行例(Snowflake CLI )¶
snow sql -f output_file_path -D "searchValue=80"
推奨事項¶
Snowflakeのvalue句ではこれらの関数の使用は許可されていませんが、代わりにサブクエリを使用できます。
さらにサポートが必要な場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)までメールでお問い合わせください。