SnowConvert AI :一般的な機能の違い¶
SSC-FDM-0001¶
単一テーブルからすべての列を選択するビューは、Snowflakeでは必要ありません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
単一テーブルのすべての列のみを選択し、フィルタリング句を持たないビューは、Snowflakeでは必須ではなく、パフォーマンスに影響を与える可能性があります。
コード例¶
入力コード(Oracle):¶
CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
生成されたコード:¶
CREATE OR REPLACE VIEW simpleView1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable;
CREATE OR REPLACE VIEW simpleView2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable
GROUP BY col1;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0002¶
相関サブクエリには機能的な違いがある可能性があります
説明¶
このメッセージは、Correlated Subquery (外部クエリの列を参照するサブクエリ)がある場合に報告されます。この型のサブクエリは、場合によっては、Snowflakeでいくつかの機能的な違いを示すことがあります([サブクエリの操作](https://docs.snowflake.com/ja/user-guide/querying-subqueries#correlated-vs-uncorrelated-subqueries))
コード例¶
入力コード:¶
CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));
--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
生成されたコード:¶
CREATE OR REPLACE TABLE schema1.table1 (
column1 VARCHAR(50),
column2 VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
CREATE OR REPLACE TABLE schemaA.tableA (
columnA VARCHAR(50),
columnB VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "10/11/2024", "domain": "test" }}'
;
--Correlated Subquery
SELECT
columnA
FROM
schemaA.tableA ta
WHERE
columnA =
--** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
(SELECT
SUM(column1) FROM
schema1.table1 t1
WHERE
t1.column1 = ta.columnA
);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0003¶
変換率の不一致
説明¶
このメッセージは、指定された評価フィールドで変換率の不整合が見つかった場合に報告されます。このような状況は SnowConvert AI によって自動的に解決されるので、これは単なる情報提供のための警告に過ぎません。
注釈
この情報提供のための警告は、評価文書にのみ表示され、出力コードには表示されません
ベストプラクティス¶
SnowConvert AI は自動的に問題を修正することができますが、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)に電子メールを送り、問題を指定することで、SnowConvert AI サポートチームに通知することができます。
SSC-FDM-0004¶
外部テーブルを通常のテーブルに変換
説明¶
この警告は、外部処理に関連する句に追加されます。これは、Snowflakeではデータストレージは関係なく、外部テーブルを必要としないためです。代わりに、すべてのデータはSnowflakeデータストレージ内で管理する必要があります。この件に関する詳しい情報は、[こちら](https://docs.snowflake.com/ja/user-guide/tables-storage-considerations.html#data-storage-considerations)のデータストレージに関するSnowflakeの考慮事項を参照してください。
コード例¶
入力コード:¶
CREATE EXTERNAL TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
LOCATION (
'gpfdist://192.168.1.100:8080/data/my_data.csv'
)
FORMAT 'CSV' (DELIMITER ',' HEADER);
生成されたコード:¶
--** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE TABLE ext_csv_file (
id INT,
name TEXT,
age INT,
city TEXT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "greenplum", "convertedOn": "07/09/2025", "domain": "no-domain-provided" }}'
;
ベストプラクティス¶
外部テーブルのファイルに保存されているデータを、何らかの方法でSnowflakeデータベースに移動する必要があります。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0005¶
時刻データ型でTIME ZONE はサポートされていません
説明¶
Snowflakeの時刻データ型は、タイムゾーン値を格納しません
TIME は「wallclock」時間を内部的に保存し、 TIME 値に対するすべての操作はタイムゾーンを考慮せずに実行されます。詳細は[こちら](https://docs.snowflake.com/ja/sql-reference/data-types-datetime#time)を参照してください。
コード例¶
入力コード:¶
CREATE TABLE TABLE_TIME_TYPE (
COLNAME TIME (9) WITH TIME ZONE
);
生成されたコード:¶
CREATE OR REPLACE TABLE TABLE_TIME_TYPE (
COLNAME TIME(9) /*** SSC-FDM-0005 - TIME ZONE NOT SUPPORTED FOR TIME DATA TYPE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0006¶
数値型の列はSnowflakeでは同様の動作をしない場合があります。
説明¶
この機能差メッセージは、NUMBER 型列をテーブル内に作成する際に表示されます。この理由は、Snowflakeで中間値のスケールに関連する演算を実行する際の算術的な違いによるもので、一部の演算が失敗する可能性があります。詳細については、[Snowflakeの中間値に関する投稿](https://community.snowflake.com/s/question/0D50Z00008HhSHCSA3/sql-compilation-error-invalid-intermediate-datatype-number7148)および[表現可能な範囲外の数値](https://community.snowflake.com/s/article/Number-out-of-representable-range-error-occurs-during-the-multiplication-of-numeric-values)を参照してください。
このような算術上の問題を避けるために、データサンプリングを実行して、これらの演算に必要な精度とスケールを検証することができます。
コード例¶
Number列を持つ単純なテーブル¶
入力コード(Oracle):¶
CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
生成されたコード:¶
CREATE OR REPLACE TABLE table1
(
column1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
column2 NUMBER(20, 4) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
算術上の問題の例¶
次の例では、数値列を使用した場合にどのような算術上の問題が発生するかを示しています。
除算エラーのあるSnowflakeコード:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
乗算エラーのあるSnowflakeコード:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
どちらかの SELECT ステートメントを実行すると、Snowflakeはエラーを返します。
表現可能な範囲外の数値: 型 FIXEDSB16 {nullable}、値1.0000000000000000000
これは、中間演算の結果がSnowflakeの最大容量をオーバーフローしているためです。各例で数値スケールを1減らすとエラーが修正され、正常に動作します。
除算のあるSnowflakeコード:¶
CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );
INSERT INTO number_table VALUES (1);
SELECT column1 / column1 FROM number_table;
乗算のあるSnowflakeコード:¶
CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );
INSERT INTO number_table VALUES (1);
SELECT column1 * column1 FROM number_table;
このため、SnowConvert AI はNumbersのデフォルトスケールを18に設定し、移行時のエラー数を最小限に抑えます。
ベストプラクティス¶
操作の中間値が、Snowflakeの最大値である37を超えないことを確認します。
データサンプリングを実行し、必要な精度とスケールがあることを確認してから、操作を実行してください。
ほとんどの場合、データをサンプリングしたり、事業者と話し合ったりした結果、精度が異なる可能性があるという結論に達するかもしれません。例えば、
MONEY列の場合、一般的な精度はNUMBER(20,4)となります。snowflakeでは、列のデータ型を簡単に変更することはできません。列のデータ型を変更してデータを保持する方法については、こちらの[フォーラムへの投稿](https://www.mobilize.net/blog/how-to-alter-column-datatype-in-snowflake)を参照してください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0007¶
依存関係が欠落している要素
注釈
わかりやすくするため、出力コードの一部を省略しています
説明¶
オブジェクトの依存関係がありません。Snow Convert は一部のデータ型を解決できませんでした。また、依存関係がソースコードにない場合、デプロイエラーが発生する可能性もあります。
コード例¶
入力コード:¶
CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
生成されたコード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
* FROM
TABLE1;
注釈
TABLE1 の定義が欠けていることに注意してください。
ベストプラクティス¶
オブジェクトの依存関係がすべてソースコードにあることを確認します。
そうでない場合は、コード内のオブジェクトへの参照を見つけ、操作が適切に管理されているかどうかを確認します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0008¶
オンコミットはサポートされていません
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
CREATE TABLE ステートメントのON COMMIT 句はコメントアウトされています。Snowflakeは ON COMMIT 句をサポートしていません。これは、他のSQL 方言で一時テーブルに使用されるのが一般的だからです。トランザクション固有の動作を管理する必要がある場合は、代わりにSnowflakeのトランザクションまたは明示的なTRUNCATE 、DROP ステートメントを使用した一時テーブルの使用を検討してください。
コード例¶
入力コード¶
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
生成されたコード¶
CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT (DELETE ROWS) IS NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/22/2025", "domain": "no-domain-provided" }}'
;
SSC-FDM-0009¶
GLOBAL TEMPORARY TABLE 機能はサポートされていません。
説明¶
グローバル一時テーブルは、[Snowflakeのドキュメント](https://docs.snowflake.com/ja/sql-reference/sql/create-table#variant-syntax)に示されているように、いくつかのバリエーションがあるため、複雑なパターンと考えられています。
コード例¶
入力コード¶
CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
);
生成されたコード¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE GLOBAL_TEMP_TABLE
(
col3 INTEGER,
col4 VARCHAR(50)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0010¶
型を日付に変更します。
説明¶
このメッセージは、SnowConvert AI が DEFAULT SYSDATE を見つけ、データ型が NOT DATE または TIMESTAMP の場合に表示されます。この場合、データ型は DATE に変更されます。
コード例¶
入力コード¶
CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"(
"COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
生成されたコード¶
CREATE OR REPLACE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1" (
"COLUMN1" TIMESTAMP DEFAULT CURRENT_TIMESTAMP() /*** SSC-FDM-0010 - CONVERTED FROM VARCHAR2 TO DATE FOR CURRENT_DATE DEFAULT ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0011¶
列名はSnowflake予約キーワードです。
注釈
このFDM は非推奨です。[SSC-EWI-0045](../conversion-issues/generalEWI.md#ssc-ewi-0045)のドキュメントを参照してください。
説明¶
ソース言語では有効だが、Snowflakeでは予約キーワードとなる列名。
コード例¶
入力コード(Oracle):¶
CREATE TABLE T1
(
LOCALTIME VARCHAR,
CURRENT_USER VARCHAR
);
生成されたコード:¶
CREATE OR REPLACE TABLE T1
(
--** SSC-FDM-0011 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD **
"LOCALTIME" VARCHAR,
--** SSC-FDM-0011 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD **
"CURRENT_USER" VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
ベストプラクティス¶
Snowflakeでサポートされていない名前を使用している列名の変更を検討してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0012¶
一部の制約の制約名がサポートされていません。
説明¶
このメッセージは、制約の型がNull、Not Null、またはdefaultであり、名前で定義されている場合に追加されます。Snowflakeはこれらの制約の名前をサポートしていません。そのため、SnowConvert AI はそれを削除してコメントを追加します。
コード例¶
入力コード¶
CREATE TABLE TABLE1 (
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL
);
生成されたコード¶
CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10) DEFAULT ('0') /*** SSC-FDM-0012 - CONSTRAINT NAME 'constraintName' IN DEFAULT EXPRESSION CONSTRAINT IS NOT SUPPORTED IN SNOWFLAKE ***/ NOT NULL
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/02/2025", "domain": "no-domain-provided" }}'
;
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0013¶
タイムゾーン式がマッピングできませんでした
説明¶
この FMD メッセージは、タイムゾーン式の実際の値を特定できず、したがって変換結果が異なる可能性があるシナリオを示すために追加されます。使用されるタイムゾーン値がリテラル文字列である場合、SnowConvert AI は、それを受け取り、Snowflakeの対応するタイムゾーン値にマッピングすることができます。しかし、この値が式で指定されている場合、SnowConvert AI は実行時に使用されるタイムゾーン値を取得できないため、この値を対応するSnowflakeの同等の値にマッピングすることができません。
コード例¶
入力コード(Oracle)¶
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
生成されたコード¶
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
CONVERT_TIMEZONE(Expression, TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
入力コード(Teradata)¶
select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific');
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
生成されたコード¶
SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
¶
注釈
Oracleにおけるタイムゾーンの互換性
Oracleのタイムゾーン名式の大部分はSnowflakeで直接サポートされており、この場合、移行は問題なく実行されます。さらに、現時点ではSnowflakeでサポートされていないため、機能差のメッセージが表示されるもののリストを以下に示します。
アフリカ/ドゥアラ
アジア/ウランバートル
アジア/エカテリンブルグ
カナダ/東サスカチュワン州
CST
PST
US /パシフィックニュー
ベストプラクティス¶
エンドユーザーによる操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0014¶
チェックステートメントはサポートされていません。
注釈
このFDM は非推奨です。[SSC-EWI-0035](../conversion-issues/generalEWI.md#ssc-ewi-0035)のドキュメントを参照してください。
説明¶
CHECK 制約はSnowflakeではサポートされていませんが、機能的には影響ありません。
コード例¶
入力コードOracle:¶
CREATE TABLE "Schema"."BaseTable"(
"COLUMN1" VARCHAR2(255),
CHECK ( COLUMN1 IS NOT NULL )
);
生成コード: ¶
CREATE OR REPLACE TABLE "Schema"."BaseTable" (
"COLUMN1" VARCHAR(255)
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CHECK ( COLUMN1 IS NOT NULL )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
入力コードTeradata: ¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
生成コード: ¶
CREATE TABLE TABLE1
(
COL0 BYTEINT
-- ,
-- --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
-- CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
入力コード SqlServer¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
生成されたコード:¶
ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--CONSTRAINT constraint_name
--CHECK NOT FOR REPLICATION (column_name > 1)
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0015¶
クエリで参照されているカスタム型が見つかりません。
説明¶
このエラーは、カスタム型の定義が見つからなかったか、Oracleの組み込みデータ型が SnowConvert で認識されなかった場合に発生します。
コード例¶
入力コード(Oracle):¶
--Type was never defined
--CREATE TYPE type1;
CREATE TABLE table1
(
column1 type1
);
生成されたコード:¶
--Type was never defined
--CREATE TYPE type1;
CREATE OR REPLACE TABLE table1
(
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/!!! NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}}'
;
ベストプラクティス¶
参照されたデータ型が入力コードで定義されていることを確認します。
Snowflakeのデータ型の[ドキュメント](https://docs.snowflake.com/ja/sql-reference/data-types.html)で、同等のデータ型をご確認ください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0016¶
定数はSnowflakeスクリプトではサポートされていません。変数に変換されました。
説明¶
Snowflakeスクリプトは定数をサポートしていません。 したがって、Snowflake スクリプトフラグが有効な場合、プロシージャー内の定数はすべて変数に変換されます。
コード例¶
Oracle:¶
CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Snowflakeスクリプト:¶
CREATE OR REPLACE PROCEDURE p_constants ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
my_const1 NUMBER(38, 18) := 40;
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
--** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE **
my_const2 NUMBER(38, 18) := 40;
BEGIN
NULL;
END;
$$;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0017¶
WITH SYSTEM VERSIONING 句はSnowflakeではサポートされていません
説明¶
ANSI SQL のWITH SYSTEM VERSIONING 句は、テーブルのシステムバージョニングを有効にするために使用され、テーブルのデータに対する変更の履歴を保持することができます。この句はSnowflakeではサポートされていません。
コード例¶
入力コード:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
生成されたコード:¶
CREATE TABLE t1 (
ID INT PRIMARY KEY,
Name VARCHAR(50),
SysStartTime TIMESTAMP,
SysEndTime TIMESTAMP
)
----** SSC-FDM-0017 - WITH SYSTEM VERSIONING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--WITH SYSTEM VERSIONING
;
ベストプラクティス¶
Snowflakeでは[Time Travel](https://docs.snowflake.com/ja/user-guide/data-time-travel)を使用することができます。Time Travelを使用すると、定義された期間内の任意の時点で履歴データ(変更または削除されたデータなど)にアクセスすることができます。Time Travelは、次のタスクを実行するための強力なツールとして機能します。
誤ってまたは意図的に削除された可能性のあるデータ関連オブジェクト(テーブル、スキーマ、およびデータベース)の復元。
過去の重要なポイントからのデータの複製とバックアップ。
指定された期間のデータ使用量/操作の分析。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0018¶
CHARACTER SET 句はSnowflakeではサポートされていません。
説明¶
列オプション CHARACTER SET は、列に格納できる文字の許容セットを決定します。この句はSnowflakeではサポートされていません。
コード例¶
入力コード:¶
CREATE TABLE TABLE01(
COLNAME VARCHAR(20) CHARACTER SET character_specification
);
生成されたコード:¶
CREATE TABLE TABLE01 (
COLNAME VARCHAR(20)
-- --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
-- CHARACTER SET character_specification
);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0019¶
セマティック情報をロードできませんでした。
説明¶
この警告は、SnowConvert AI が特定のオブジェクトのセマンティック情報をロードできなかったことをユーザーに知らせます。これは、同じ名前のオブジェクトが重複している場合、SnowConvert AI がこのオブジェクトのセマンティック情報をロードできず、分析を完了できないために発生すると考えられます。
コード例¶
入力コード:¶
CREATE TABLE T1
(
COL1 INTEGER
);
CREATE TABLE T1
(
COL2 INTEGER
);
生成コード: ¶
CREATE OR REPLACE TABLE T1
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR T1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE T1
(
COL2 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
ベストプラクティス¶
セマンティック情報の読み込みに影響を与える可能性があるため、入力コードに重複したオブジェクトがないか確認します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0020¶
複数の結果セットが仮テーブルに返されます
説明¶
Snowflakeスクリプトプロシージャでは、1つのプロシージャにつき1つの結果セットしか返すことができません。
Teradataの動作を再現するために、返す結果セットが2つ以上ある場合、それらは仮テーブルに格納されます。Snowflakeスクリプトプロシージャは、仮テーブルの名前を含む配列を返します。
コード例¶
入力コード(Teradata):¶
REPLACE MACRO sampleMacro AS
(
SELECT CURRENT_DATE AS DT;
SELECT CURRENT_DATE AS DT_TWO;
);
生成されたコード:¶
CREATE OR REPLACE PROCEDURE sampleMacro ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
return_arr ARRAY := array_construct();
tbl_nm VARCHAR;
BEGIN
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT;
return_arr := array_append(return_arr, :tbl_nm);
tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
SELECT
CURRENT_DATE() AS DT_TWO;
return_arr := array_append(return_arr, :tbl_nm);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
ベストプラクティス¶
結果セットを取得するには、プロシージャが返した仮テーブルの名前でSELECT クエリを実行する必要があります。
複数の結果セットを返すようなプロシージャは可能な限り避け、より直接的な結果を得るために単一の責任を持つプロシージャにします。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0021¶
インデックス作成はサポートされていません
説明¶
アーキテクチャ上の理由により、Snowflakeはインデックスをサポートしていないため、SnowConvert AI はインデックスの作成に関連するすべてのコードをコメントアウトします。Snowflakeは、各テーブルに、 DML 操作のパフォーマンスを高速化するマイクロパーティションを自動的に作成します。ユーザーはこれらのマイクロパーティションの作成や管理を心配する必要はありません。
通常、これだけで非常に優れたクエリパフォーマンスが得られますが、データクラスタリングキーを作成することで改善する方法もあります。[Snowflakeの公式ページ](https://docs.snowflake.com/ja/user-guide/tables-clustering-micropartitions.html)には、マイクロパーティションとデータクラスタリングに関する詳細な情報が掲載されています。
コード例¶
入力コード(Oracle):¶
CREATE INDEX index1
ON table1(column1);
生成されたコード:¶
----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
;
ベストプラクティス¶
データクラスタリングは、テーブルのクエリパフォーマンスを高速化する方法の1つです。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0022¶
ウィンドウフレームユニットが行に変更されました
重大性¶
低
説明¶
この警告は、サポートされていないウィンドウフレームユニットが行に変更され、出力に差異が生じた場合に追加されます。その一例として、GROUPS ユニットはSnowflakeではサポートされていません。
このメッセージは、RANGE ユニットのように、ウィンドウフレームユニットが 部分的に サポートされておらず、変更される場合にも使用されることに注意してください。
コード例¶
以下のデータを例に挙げて説明します。
C_NAME |
C_BIRTH_DAY |
|---|---|
USA |
1 |
USA |
4 |
ポーランド |
9 |
カナダ |
10 |
USA |
5 |
カナダ |
12 |
コスタリカ |
3 |
ポーランド |
4 |
USA |
2 |
コスタリカ |
7 |
コスタリカ |
10 |
Oracle:¶
コード¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY
RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
結果¶
C_NAME |
MAX1 |
|---|---|
USA |
- |
USA |
1 |
コスタリカ |
3 |
USA |
6 |
ポーランド |
6 |
USA |
14 |
コスタリカ |
19 |
ポーランド |
26 |
カナダ |
35 |
コスタリカ |
35 |
カナダ |
55 |
Snowflake:¶
コード¶
SELECT
C_NAME,
SUM(C_BIRTH_DAY)
OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
FROM
WINDOW_TABLE;
結果¶
C_NAME |
MAX1 |
|---|---|
USA |
- |
USA |
1 |
コスタリカ |
3 |
USA |
6 |
ポーランド |
10 |
USA |
14 |
コスタリカ |
19 |
ポーランド |
26 |
カナダ |
35 |
コスタリカ |
45 |
カナダ |
55 |
ベストプラクティス¶
Snowflakeで実行する場合、決定論的な出力を保証するために、行の決定論的な順序を保証してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0023¶
グローバル仮テーブルが参照されています。
重大性¶
中
説明¶
SnowConvert AI はグローバル仮テーブルを通常のテーブル作成に変換します。これらのテーブルへの参照は、予想とは異なる動作をする可能性があります。
コード例¶
入力¶
create global temporary table t1
(col1 varchar);
create view view1 as
select col1 from t1;
出力¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
(col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
select col1 from
--** SSC-FDM-0023 - A Global Temporary Table is being referenced **
t1;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0024¶
機能は現在、Snowflakeスクリプトではサポートされていません
注釈
このFDM は非推奨です。[SSC-EWI-0058](../conversion-issues/generalEWI.md#ssc-ewi-0058)のドキュメントを参照してください。
説明¶
このエラーは、作成プロシージャで使用されるステートメントが現在Snowflakeスクリプトでサポートされていない場合に発生します。
コード例¶
入力コード(Oracle):¶
CREATE OR REPLACE PROCEDURE PROC01
IS
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
-- --** SSC-FDM-0024 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING **
-- INTO number_variable
;
END;
$$;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0026¶
Snowflakeがサポートしていない型
注釈
このFDM は非推奨です。[SSC-EWI-0028](../conversion-issues/generalEWI.md#ssc-ewi-0028)のドキュメントを参照してください。
説明¶
このメッセージは、型がSnowflakeでサポートされていない場合に表示されます。
例¶
入力コード(Oracle):¶
CREATE TABLE MYTABLE
(
COL1 SYS.ANYDATASET
);
生成されたコード:¶
CREATE OR REPLACE TABLE MYTABLE
(
--** SSC-FDM-0026 - TYPE NOT SUPPORTED BY SNOWFLAKE **
COL1 SYS.ANYDATASET
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0027¶
次のステートメントは SnowFlake では適用されないため、削除しました。
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
このメッセージは、特定のステートメントがSnowflakeで適用されない場合に表示されます。これは、このステートメントに相当するSnowflakeが存在せず、そのステートメントが不要になったことを意味し、そのためソースコードから削除されます。しかし、SnowConvert AI は最後のコメントの一部として元のステートメントを残しています。
コード例¶
入力コード: ¶
.LOGTABLE tduser.Employee_log;
.BEGIN MLOAD TABLES Employee_Stg;
.LAYOUT Employee;
.FIELD in_EmployeeNo * VARCHAR(10);
.FIELD in_FirstName * VARCHAR(30);
.FIELD in_LastName * VARCHAR(30);
.FIELD in_BirthDate * VARCHAR(10);
.FIELD in_JoinedDate * VARCHAR(10);
.FIELD in_DepartmentNo * VARCHAR(02);
.dml label EmpLabel
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_Lastname,
:in_BirthDate,
:in_JoinedDate,
:in_DepartmentNo
);
.IMPORT INFILE employee.txt
FORMAT VARTEXT ','
LAYOUT Employee
APPLY EmpLabel;
.END MLOAD;
LOGOFF;
生成コード: ¶
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
// SnowConvert AI Helpers Code section is omitted.
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.LOGTABLE tduser.Employee_log
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#.BEGIN MLOAD TABLES Employee_Stg
Employee_TableName = "Employee_TEMP_TABLE"
Employee_Columns = """in_EmployeeNo VARCHAR(10),
in_FirstName VARCHAR(30),
in_LastName VARCHAR(30),
in_BirthDate VARCHAR(10),
in_JoinedDate VARCHAR(10),
in_DepartmentNo VARCHAR(02)"""
Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
def EmpLabel(tempTableName, queryConditions = ""):
exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
SRC.in_EmployeeNo,
SRC.in_FirstName,
:in_Lastname,
SRC.in_BirthDate,
SRC.in_JoinedDate,
SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
EmpLabel(Employee_TableName)
exec(f"""DROP TABLE {Employee_TableName}""")
if con is not None:
con.close()
con = None
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0028¶
サポート対象外です。
注釈
このFDM は非推奨です。[SSC-EWI-0021](../conversion-issues/generalEWI.md#ssc-ewi-0021)ドキュメントを参照してください。
説明¶
このメッセージは、ソースコードの特定のノードまたはステートメントがSnowflakeサポートされていない場合に表示されます。
コード例¶
入力コード: ¶
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
生成されたコード:¶
----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
;
ベストプラクティス¶
このエラーが発生するのは、変換されるノードに相当するSnowflakeが存在しないためです。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0029¶
ユーザー定義関数がSnowflakeプロシージャに変換されました。
警告
このEWI は非推奨です。[SSC-EWI-0068](../conversion-issues/generalEWI.md#ssc-ewi-0068)ドキュメントを参照してください
重大性¶
低
説明¶
Snowflakeユーザー定義関数は、Oracle や SQL サーバーと同じ機能をサポートしていません。機能の等価性を維持するために、関数はSnowflakeストアドプロシージャに変換されます。これはクエリでの使用にも影響します。
コード例¶
SQL Server:¶
入力コード¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
生成されたコード¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
Oracle:¶
入力コード¶
CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO var1, var2, var3
FROM employees
START WITH manager_ID = param1
CONNECT BY manager_ID = PRIOR employee_id;
RETURN var1;
EXCEPTION
WHEN no_data_found THEN RETURN param1;
END employee_function;
生成されたコード¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "11/14/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO
:var1,
:var2,
:var3
FROM
employees
START WITH manager_ID = :param1
CONNECT BY
manager_ID = PRIOR employee_id;
RETURN :var1;
EXCEPTION
WHEN no_data_found THEN
RETURN :param1;
END;
$$;
ベストプラクティス¶
同じロジックを維持するために、内部のクエリを分離します。
ソースコードは、Snowflakeユーザー定義関数[アプローチ](https://docs.snowflake.com/ja/sql-reference/user-defined-functions.html#udfs-user-defined-functions)に適合するように再構築する必要がある場合があります。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0030¶
新しい識別子の無効な文字を置き換えました
説明¶
指定された識別子は、出力言語に対して無効な文字を持っています。これらの文字は、UTF -8コードに置き換えられました。
コード例¶
入力コード(Oracle):¶
CREATE PROCEDURE PROC1
AS
"VAR0" INT;
"VAR`/1ͷ" VARCHAR(20);
"o*/o" FLOAT;
" . " INT;
". ." INT;
"123Name" INT;
"return" INT;
yield INT;
ident#10 INT;
BEGIN
NULL;
END;
生成されたコード:¶
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
"VAR0" INT;
--** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
VAR_u60_u2F1_uCD_B7 VARCHAR(20);
--** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
o_u2A_u2Fo FLOAT;
--** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u20_u2E_u20 INT;
--** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
_u2E_u20_u2E INT;
"123Name" INT;
"return" INT;
yield INT;
IDENT_HASHTAG_10 INT;
BEGIN
NULL;
END;
$$;
ベストプラクティス¶
エンドユーザーの操作は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0031¶
デフォルトで設定されている動的テーブルの必須パラメーター
説明¶
マテリアライズドビュー(およびTeradataの場合は結合インデックスも)は、Snowflakeの動的テーブルに移行されます。動的テーブルには2つのパラメーターを設定する必要があります: TARGET_LAG and WAREHOUSE
これらのパラメータが設定オプションで設定されていない場合、変換時にデフォルトで設定されます。
[動的テーブルの必須パラメータはこちら](https://docs.snowflake.com/ja/sql-reference/sql/create-dynamic-table#required-parameters)をご覧ください。
コード例¶
入力コード(Oracle):¶
CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
生成されたコード:¶
CREATE OR REPLACE DYNAMIC TABLE mv1
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
ベストプラクティス¶
必要に応じて、動的テーブルの必要なパラメーターを設定します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0032¶
パラメーターがリテラル値でないため、変換を完全に適用できませんでした。
説明¶
複数の変換を行う場合、SnowConvert AI はパラメーターの内容を検証する必要が生じることがあります。これは、パラメーターがリテラル値である場合にのみ可能です。
このメッセージは、SnowConvert AI がパラメーターが参照によって渡されたため値を取得できず、関数やステートメントの変換が完了しなかったことを警告するために生成されます。
コード例¶
入力コード(Redshift):¶
SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
生成されたコード:¶
SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
ベストプラクティス¶
指定されたパラメーターをリテラル値として提供してみてください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0033¶
SnowflakeではSample句の動作が異なります。
説明¶
このメッセージは、Snowflakeで行をサンプリングする際の機能的な違いを示すために生成されます。この違いは、検索された行の量に関係しています。Teradataでは非決定論的出力に同じ量の行がある場合、Snowflakeではそれが変化し、数行の増減を返すことがあります。これは確率に関連したトピックであり、Snowflakeでも同様に動作することが予想されるためです。
同じ値、同じ量、決定論的な出力を取得する必要がある場合は、Snowflakeクエリでシードを使用することをお勧めします。
コード例¶
入力コード(Teradata):¶
SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
生成されたコード:¶
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);
SELECT
* FROM
Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
ベストプラクティス¶
決定論的な出力が必要な場合は、クエリのシード部分を使用するようにしてください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0034¶
構造体が VARIANT に変換されました。使用方法によっては機能上の違いがある場合があります。
説明¶
Snowflakeは STRUCT データ型をネイティブにサポートしていません。SnowConvert AI は自動的にSTRUCT をVARIANT に変換します。INSERT ステートメントで使用される場合、STRUCT データは OBJECT_CONSTRUCT を使用して処理されます。この変換は、いくつかのユースケースにおいて機能的な違いをもたらす可能性があることに注意してください。
コード例¶
入力コード:¶
BigQuery¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 STRUCT<sc1 INT64>,
COL2 STRUCT<sc2 STRING(10)>,
COL3 STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>,
COL4 STRUCT<sc4 ARRAY<INT64>>,
COL5 STRUCT<sc5 INT64, sc51 INT64>,
COL7 STRUCT<sc7 INT64 OPTIONS(description = "A repeated STRING field"), sc71 BOOL>,
COL8 STRUCT<sc8 INT64 NOT NULL, sc81 BOOL NOT NULL OPTIONS(description = "A repeated STRING field")>
);
生成されたコード:¶
Snowflake¶
CREATE OR REPLACE TABLE test.structTypes
(
COL1 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL2 VARIANT /*** SSC-FDM-0034 - STRUCT<STRING(10)> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL3 VARIANT /*** SSC-FDM-0034 - STRUCT<STRUCT<INT64, INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL4 VARIANT /*** SSC-FDM-0034 - STRUCT<ARRAY<INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL5 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, INT64> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL7 VARIANT /*** SSC-FDM-0034 - STRUCT<INT, BOOL> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
COL8 VARIANT /*** SSC-FDM-0034 - STRUCT<INT64, BOOLEAN> 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": "05/30/2025", "domain": "no-domain-provided" }}';
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0035¶
INFER_SCHEMA 関数は、テーブルテンプレートを生成するためにワイルドカードを含まないファイルパスを必要とするので、FILE_PATH プレースホルダーをそれに置き換えます
説明¶
[INFER_SCHEMA](https://docs.snowflake.com/ja/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-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_JSON2_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_json/.*'
FILE_FORMAT = (TYPE = JSON);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0036¶
変換された数値/日付形式は、Snowflakeでは異なる動作をする可能性があります。
説明¶
Snowflake に変換された数値形式は 固定位置フォーマット を使用します。数値の整数部分の桁数がフォーマット内の桁位置の数より多い場合、変換されたフォーマットは失敗し、異なる出力を生成する可能性があります。その場合、すべての桁はオーバーフローを示す#として印刷されます。
コード例¶
入力コード:¶
SQL サーバー¶
SELECT
FORMAT(value, '00.00') as formatted,
FORMAT(value, '#,##0') as formatSource
FROM MY_TABLE;
生成されたコード:¶
Snowflake¶
SELECT
TO_CHAR(value, 'FM9999999999900.00') /*** SSC-FDM-0036 - TRANSFORMATION OF '00.00' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatted,
TO_CHAR(value, 'FM9,999,999,999,990') /*** SSC-FDM-0036 - TRANSFORMATION OF '#,##0' FORMAT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ as formatSource
FROM
MY_TABLE;
結果¶
#############
ベストプラクティス¶
数値の桁数が形式に収まらない場合は、入力可能なデータ値に基づいて桁数を追加して形式を更新してください。
SSC-FDM-0037¶
統計関数はSnowflakeでは必要ありません。
説明¶
DROP 、 COLLECT 、または HELP 統計は、Snowflakeでは必要ありません。Snowflakeはすでに、クエリの自動最適化に使用される統計情報を収集しています。
コード例¶
入力コード:¶
HELP STATISTICS TestName;
生成されたコード¶
----** SSC-FDM-0037 - HELP STATISTICS NOT NEEDED. SNOWFLAKE AUTOMATICALLY COLLECTS STATISTICS. **
--HELP STATISTICS TestName
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください
SSC-FDM-0038¶
すべてのSnowflakeテーブルでマイクロパーティションが自動的に実行されます。
説明¶
このメッセージは、PARTITION BY 句がある場合、CREATE TABLE ステートメントに追加されます。一部のデータベースでテーブルのパーティショニングを制御するPARTITION BY 句は、Snowflakeではサポートされていません。
Snowflakeでは、すべてのテーブルが自動的にマイクロパーティション(50MB から500MB の非圧縮データの範囲のストレージの連続単位)に分割されます。このアーキテクチャは、数百万のマイクロパーティションで構成されるような大規模なテーブルを、非常にきめ細かく刈り込むことを可能にします。
Snowflakeは、次のような各マイクロパーティションのメタデータを自動的に保存します。
マイクロパーティションの各列の値の範囲。
個別の値の数。
最適化と効率的なクエリ処理の両方に使用される追加のプロパティ。
テーブルのパーティショニングは、データの挿入やロードの順序に基づいて透過的に行われます。詳しくは[マイクロパーティショニングの利点](https://docs.snowflake.com/ja/user-guide/tables-clustering-micropartitions#benefits-of-micro-partitioning)を参照してください。
コード例¶
入力コード:¶
CREATE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE FORMAT 'yyyy-mm-dd' NOT NULL,
totalorders INTEGER NOT NULL)
PRIMARY INDEX (storeid, productid)
PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *),RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) );
生成されたコード¶
CREATE OR REPLACE TABLE orders
(
storeid INTEGER NOT NULL,
productid INTEGER NOT NULL,
orderdate DATE NOT NULL,
totalorders INTEGER NOT NULL)
-- --** SSC-FDM-0038 - MICRO-PARTITIONING IS AUTOMATICALLY HANDLED ON ALL SNOWFLAKE TABLES **
-- PARTITION BY (RANGE_N(totalorders BETWEEN *, 100, 1000 AND *)
-- ,RANGE_N(orderdate BETWEEN *, '2005-12-31' AND *) )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "09/17/2025", "domain": "no-domain-provided" }}'
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください