SnowConvert: 一般的な機能差

SSC-FDM-0001

注釈

読みやすくするため、コード例を簡略化し、最も関連性の高い部分のみを示しています。

説明

フィルタリング条件(WHERE 句)なしで単一のテーブルからすべての列を選択するビューは、Snowflakeでは不要であり、クエリのパフォーマンスに悪影響を与える可能性があります。

コード例

入力コード(Oracle):
 CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;

CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
Copy
生成されたコード:
 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;
Copy

ベストプラクティス

SSC-FDM-0002

説明

このメッセージは、 修正されたサブクエリ が検出された場合に表示されます。相関サブクエリは、外部クエリの列を参照します。Snowflakeに移行する際、これらのサブクエリは場合によって動作が異なる可能性があります。詳細については、 サブクエリの操作 をご参照ください。

コード例

入力コード:
 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);
Copy
生成されたコード:
 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
          );
Copy

ベストプラクティス

SSC-FDM-0003

説明

この警告は、指定された評価フィールドの変換率に不整合があると表示されます。SC は自動的にこれらの不整合を解決するため、このメッセージは情報提供のみを目的としています。

注釈

この警告メッセージは評価ドキュメントにのみ表示され、出力コードには表示されません。

ベストプラクティス

  • 問題が発生した場合は、 SnowConvert で自動的に修正されますが、 SnowConvert サポートチーム snowconvert-support@snowflake.com にお問い合わいただくこともできます。

SSC-FDM-0004

説明

Snowflakeではデータストレージの管理が異なるため、外部処理に関する句でこの警告が表示されます。他のデータベースとは異なり、Snowflakeは外部テーブルを必要としません。なぜなら、すべてのデータはSnowflakeの内部ストレージシステム内に保存される必要があるからです。このトピックの詳細については、 データストレージに関する考慮事項 をご参照ください。

コード例

入力コード:
 CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
  col1 INTEGER
)
OPTIONS (
  format = 'CSV',
  uris = ['gs://my_bucket/file.csv']
);
Copy
生成されたコード:
 --** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
   col1 INTEGER
 )
-- OPTIONS (
--   format = 'CSV',
--   uris = ['gs://my_bucket/file.csv']
-- )
  ;
Copy

ベストプラクティス

  • 外部テーブルファイルのデータをSnowflakeデータベースにインポートする必要があります。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0005

説明

Snowflakeの TIME データ型は、タイムゾーン情報を含まない時間コンポーネントのみを保存します。

TIME は時計の時刻値を保存し、タイムゾーンを考慮せずにすべての操作を実行します。詳細については、 TIME をご参照ください。

コード例

入力コード:
 CREATE TABLE TABLE_TIME_TYPE (
    COLNAME TIME (9) WITH TIME ZONE
);
Copy
生成されたコード:
 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"}}'
;
Copy

ベストプラクティス

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0006

説明

このメッセージは、 NUMBER データ型の列をテーブルに作成するときに表示されます。中間計算で10進数スケールを使用する場合、Snowflakeの算術的な違いの可能性について警告します。これらの違いによって、操作に失敗することもあります。詳細については、 Snowflakeの中間数に関する投稿表現可能な範囲外の数に関するSnowflakeの投稿 をご参照ください。

算術計算の問題を防ぐため、最初にデータサンプリングテストを実行することをお勧めします。これにより、操作に必要な精度とスケール値を正しく決定することができます。

コード例

Number列を持つ単純なテーブル

入力コード(Oracle):
 CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
Copy
生成されたコード:
 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"}}'
;
Copy

算数問題の例

以下の例は、Numberの列を扱う際に、算術操作がどのように予期せぬ結果をもたらすかを示しています。

除算エラーのあるSnowflakeコード:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );

INSERT INTO number_table VALUES (1);

SELECT column1 / column1 FROM number_table;
Copy
乗算エラーのあるSnowflakeコード:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );

INSERT INTO number_table VALUES (1);

SELECT column1 * column1 FROM number_table;
Copy

Snowflakeで SELECT ステートメントを実行すると、エラーメッセージが表示されます。

Number exceeds the allowed range for data type FIXEDSB16 (nullable).The value 1.0000000000000000000 cannot be stored in this data type.

このエラーは、計算結果が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;
Copy
乗算のあるSnowflakeコード:
 CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );

INSERT INTO number_table VALUES (1);

SELECT column1 * column1 FROM number_table;
Copy

移行エラーを最小限に抑えるため、 SnowConvert は数値のデフォルトのスケールを自動で18にセットします。

ベストプラクティス

  • 操作の中間値がSnowflakeの最大スケールである37を超えないことを確認します。

  • 操作を実行する前にデータサンプルを分析し、必要な精度とスケールの設定を確認します。

  • データサンプルやビジネスの話し合いの結果、異なる精度設定の方が適切であることが判明することもよくあります。たとえば、 MONEY 列は通常、 NUMBER(20,4) を使用します。Snowflakeで列のデータ型を変更するのは簡単ではないため、データを保持しながら列のデータ型を変更する方法については、フォーラムのこちらの 投稿 をご参照ください。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0007

注釈

コードスニペットは、キーコンセプトに焦点を当てるために簡素化されています。

説明

SnowConvert が必要な依存関係を見つけられなかったり、特定のデータ型を解決できなかったりすると、展開エラーが発生することがあります。これは、依存関係オブジェクトがソースコードから欠落している場合に起こります。

コード例

入力コード:
 CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
Copy
生成されたコード:
 --** 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;
Copy

注釈

この例では、 TABLE1 の定義は提供されていません。

ベストプラクティス

  • すべてのオブジェクト依存関係がソースコードに含まれていることを検証します。

  • コード内のオブジェクト参照が適切に処理されていることを確認します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0008

注釈

読みやすくするために、この例ではコードの一部を簡略化しています。

説明

Snowflakeでテーブルを作成する場合、 ON COMMIT 句はテンポラルテーブルでのみ使用できます。テンポラルテーブル以外の定義に ON COMMIT 句を含めると、変換後のコードではコメントアウトされます。さらに、Snowflakeは ON COMMIT DELETE をサポートしていないため、変換時にこのオプションもコメントアウトされます。

コード例

入力コード
 CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Copy
生成されたコード
 CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

ベストプラクティス

  • ユーザー側からのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0009

説明

グローバル仮テーブルは、 Snowflakeのドキュメント に示されているように、さまざまな方法で作成できるため複雑です。

コード例

入力コード
 CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
    col3 INTEGER,
    col4 VARCHAR(50)
);
Copy
生成されたコード
 --** 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"}}'
;
Copy

ベストプラクティス

SSC-FDM-0010

説明

このメッセージは、 SnowConvert で、列のデータ型が DATE または TIMESTAMP ではない DEFAULT SYSDATE 句が検出された場合に表示されます。このような場合、 SnowConvert は自動的にデータ型を DATE に変換します。

コード例

入力コード
 CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"( 
 "COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
Copy
生成されたコード
 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"}}'
 ;
Copy

ベストプラクティス

SSC-FDM-0011

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-0045 をご参照ください。

説明

Snowflakeでは予約キーワードだが、ソースデータベースでは有効な列名。

コード例

入力コード(Oracle):
 CREATE TABLE T1
(
    LOCALTIME VARCHAR,
    CURRENT_USER VARCHAR
);
Copy
生成されたコード:
 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"}}'
    ;
Copy

ベストプラクティス

  • Snowflakeでサポートされていない名前の列の名前を変更します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0012

説明

この警告は、 Constraint constraintName が列のデフォルト式で使用されている場合に表示されます。Snowflakeはデフォルト式での制約をサポートしていないため、制約とその constraintName は自動的に削除され、警告メッセージが生成されます。

コード例

入力コード
 CREATE TABLE TABLE1 ( 
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL 
);
Copy
生成されたコード
 CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
                 --** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
                 DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

ベストプラクティス

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0013

説明

変換中にタイムゾーン式が評価できないケースを強調する警告メッセージが追加されました。SnowConvert は、リテラルタイムゾーン文字列をSnowflakeに相当する文字列にマッピングすることはできますが、式で指定されたタイムゾーン値を決定することはできません。この制限は、動的タイムゾーン式が使用されている場合に、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;
Copy
生成されたコード
 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;
Copy
ソースコード(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);
Copy
出力コード
 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 ***/;
Copy

Oracleでのタイムゾーン互換性

ほとんどのOracleタイムゾーン名はSnowflakeと直接互換性があるため、スムーズな移行が可能です。ただし、一部のタイムゾーン式は現在Snowflakeでサポートされていないため、移行時に機能差メッセージが生成されます。

  • アフリカ/ドゥアラ

  • アジア/ウランバートル

  • アジア/エカテリンブルク

  • カナダ/サスカチュワン

  • 中央標準時(CST)

  • 太平洋標準時(PST)

  • US/太平洋

ベストプラクティス

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0014

注釈

この FDM は現在サポートされていません。詳細情報については、 SSC-EWI-0035 をご参照ください。

説明

_ CHECK _ 制約はSnowflakeではサポートされていませんが、この制約はデータベースの関数には影響しません。

コード例

入力コードOracle:
 CREATE TABLE "Schema"."BaseTable"(
  "COLUMN1" VARCHAR2(255),
  CHECK ( COLUMN1 IS NOT NULL )
);
Copy
生成されたコード:
 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"}}'
  ;
Copy
入力コードTeradata:
 CREATE TABLE TABLE1,
    NO FALLBACK,
    NO BEFORE JOURNAL,
    NO AFTER JOURNAL
(
    COL0 BYTEINT,
    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Copy
生成されたコード:
 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"}}'
;
Copy
入力コード SqlServer
 ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name 
CHECK NOT FOR REPLICATION (column_name > 1);
Copy
生成されたコード:
 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)
                                           ;
Copy

ベストプラクティス

SSC-FDM-0015

説明

このエラーは、 SnowConvert がどちらも見つけられない場合に発生します。

  • ユーザー定義のカスタムタイプ定義

  • 認識されているOracle組み込みデータ型

コード例

入力コード(Oracle):
 --Type was never defined
--CREATE TYPE type1;

CREATE TABLE table1
(
column1 type1
);
Copy
生成されたコード:
 --Type was never defined
--CREATE TYPE type1;

CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

ベストプラクティス

  • データ型がソースコードで適切に定義されていることを確認します。

  • Snowflakeデータ型 ドキュメント を確認して、一致するデータ型を探します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0016

説明

Snowflake Scriptingは定数値をサポートしていません。Snowflake Scripting機能を有効にすると、プロシージャ内のすべての定数が自動的に変数に変換されます。

コード例

Oracle:
 CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Copy
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;
$$;
Copy

ベストプラクティス

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0017

説明

ANSI SQL の WITH SYSTEM VERSIONING 句で有効化されるシステムのバージョニングは、テーブルデータの過去の変更を追跡します。しかし、この機能は現在Snowflakeでは利用できません。

コード例

入力コード:
 CREATE TABLE t1 (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    SysStartTime TIMESTAMP,
    SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
Copy
生成されたコード:
 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
                      ;
Copy

ベストプラクティス

  • Snowflakeの Time Travel 機能を使用すると、指定期間内の変更または削除されたデータを含む履歴データにアクセスできます。この機能により、以下のことが可能になります。

    • 誤って、または意図的に削除されたデータオブジェクト(テーブル、スキーマ、データベース)を復元する

    • 特定の時点からのデータのコピーとバックアップを作成する

    • データがどのように使用され、どのように変更されたかを経時的に追跡し分析する

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0018

説明

列に格納できる許容文字を定義する CHARACTER SET 列オプションは、Snowflakeではサポートされていません。

コード例

入力コード:
 CREATE TABLE TABLE01(
    COLNAME VARCHAR(20) CHARACTER SET character_specification
);
Copy
生成されたコード:
 CREATE TABLE TABLE01 (
    COLNAME VARCHAR(20)
--                        --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--                        CHARACTER SET character_specification
);
Copy

ベストプラクティス

SSC-FDM-0019

説明

この警告は、 SnowConvert が特定のオブジェクトのセマンティック情報にアクセスできなかったことを示します。これは通常、コード内に同じ名前のオブジェクトが複数ある場合に発生します。このような場合、 SnowConvert は、オブジェクトのセマンティック情報を適切に分析することができません。

コード例

入力コード:
 CREATE TABLE T1
(
    COL1 INTEGER
);


CREATE TABLE T1
(
    COL2 INTEGER
);
Copy
生成されたコード:
 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"}}'
;
Copy

ベストプラクティス

  • 入力コードに重複オブジェクトがないか確認します。重複オブジェクトはセマンティック情報の適切な読み込みを妨げる可能性があります。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0020

説明

Snowflake Scriptingプロシージャは、実行時に1つの結果セットしか返すことができません。

プロシージャが複数の結果セットを返す必要がある場合(Teradataの動作に似ています)、結果は仮テーブルに格納されます。Snowflake Scriptingプロシージャは、これらの仮テーブルの名前を含む配列を返します。

コード例

入力コード(Teradata):
 REPLACE MACRO sampleMacro AS 
(
    SELECT CURRENT_DATE AS DT;
    SELECT CURRENT_DATE AS DT_TWO;
);
Copy
生成されたコード:
 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;
$$;
Copy

ベストプラクティス

  • プロシージャが返した仮テーブル名を使用して SELECT クエリを実行し、結果を表示します。

  • プロシージャが複数の結果セットを返すのではなく、単一の結果セットを返すようにして、プロシージャをシンプルに保つことができます。これによって結果が扱いやすくなります。

  • その他のヘルプについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0021

説明

Snowflakeは従来のデータベースインデックスを使用しません。その代わりに、クエリのパフォーマンスを最適化するために、すべてのテーブルに対してマイクロパーティションを自動的に作成し、管理します。SnowConvert を使用する場合、インデックス作成に関連するコードはSnowflakeでは必要ないため、コメントアウトされます。これらのマイクロパーティションは、手動で管理することなく、 DML の操作速度を自動的に向上させます。

この構成では通常良好なクエリパフォーマンスが得られますが、データクラスタリングキーを実装すると、さらに最適化することができます。マイクロパーティションとデータクラスタリングの詳細については、 マイクロパーティションおよびデータクラスタリング をご参照ください。

コード例

入力コード(Oracle):
 CREATE INDEX index1
ON table1(column1);
Copy
生成されたコード:
 ----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
                  ;
Copy

ベストプラクティス

  • データクラスタリングは、テーブル内のデータをより効率的に整理して、クエリのパフォーマンスを向上させます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0022

重大性

悪い

説明

サポートされていないウィンドウフレームユニットが行に変換された場合は、警告が表示され、出力に違いが生じる可能性があります。たとえば、Snowflakeは GROUPS ユニットをサポートしていないため、行に変換する必要があります。

このメッセージは、ウィンドウフレームユニットが完全にサポートされていないか、変更が必要な場合に表示されます。これには、 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;
Copy

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;
Copy

C_NAME

MAX1

USA

-

USA

1

コスタリカ

3

USA

6

ポーランド

10

USA

14

コスタリカ

19

ポーランド

26

カナダ

35

コスタリカ

45

カナダ

55

推奨事項

  • クエリに ORDER BY 句を追加して、Snowflakeで実行する際に一貫した行順序を確保します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0023

重大性

中程度

説明

SnowConvert はグローバル仮テーブルを標準のテーブル作成ステートメントに変換します。これらの変換されたテーブルへの参照は、本来の意図通りに機能しない可能性があることにご注意ください。

コード例

入力
 create global temporary table t1 
    (col1 varchar); 
create view view1 as 
    select col1 from t1;
Copy
出力
 --** 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;
Copy

推奨事項

SSC-FDM-0024

注釈

この FDM 機能はサポートされなくなりました。詳細情報については、 SSC-EWI-0058 をご参照ください。

説明

このエラーは、Snowflake Scriptingの CREATE PROCEDURE コマンド内でサポートされていないステートメントを使用しようとすると発生します。

コード例

入力コード(Oracle):
 CREATE OR REPLACE PROCEDURE PROC01
IS
  number_variable INTEGER;
BEGIN
  EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Copy
生成されたコード:
 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;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0026

注釈

この FDM 機能はサポートされなくなりました。詳細情報については、 SSC-EWI-0028 をご参照ください。

説明

このエラーは、Snowflakeと互換性のないデータ型を使用しようとしたときに発生します。

入力コード(Oracle):
 CREATE TABLE MYTABLE
(
    COL1 SYS.ANYDATASET
);
Copy
生成されたコード:
 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"}}'
    ;
Copy

推奨事項

SSC-FDM-0027

注釈

読みやすくするため、出力コードの一部を簡略化しています。

説明

このメッセージは、Snowflakeに同等の関数がないため、ソースコードのステートメントをSnowflakeに変換できないことを示しています。このステートメントは不要となり、変換後のコードから削除されます。ただし、 SC は、元のステートメントをコメントとして参照に残します。

コード例

入力コード:
 .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;
Copy
生成されたコード:
 #*** Generated code is based on the SnowConvert Python Helpers version 2.0.6 ***
// SnowConvert 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()
Copy

推奨事項

SSC-FDM-0028

注釈

この FDM 機能はサポートされなくなりました。詳細情報については、 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;
Copy
出力コード:
 ----** 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
                        ;
Copy

推奨事項

  • このエラーは、変換対象のソースコードに同等のSnowflake関数がない場合に発生します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0029

重大性

最小

説明

Snowflakeのユーザー定義関数は、Oracleや SQL Serverとは異なる機能を持っています。これらの関数を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;
Copy
 --** 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;
$$;
Copy
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;
Copy
 --** 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;
$$;
Copy

ベストプラクティス

  • 元のロジックを保持したまま、複雑なクエリをより小さな個々のクエリに分解します。

  • Snowflakeのユーザー定義関数の アプローチ に沿うようにソースコードを再構築します。

  • その他のサポートについては、 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;
Copy
出力コード:
 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;
$$;
Copy

推奨事項

  • ユーザーからのアクションは必要ありません。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0031

説明

Snowflakeは、マテリアライズドビュー(およびTeradataの結合インデックス)を動的テーブルに変換します。Snowflakeで動的テーブルを作成する場合は、2つの必須パラメーターを指定する必要があります。

  • TARGET_LAG: 最大許容ラグタイムを定義します

  • WAREHOUSE: 使用する仮想ウェアハウスを指定します

構成オプションでこれらのパラメーターを指定しない場合、システムは変換処理中に自動的にデフォルト値を適用します。

詳細については、 こちらで動的テーブルに必要なパラメーター をご覧ください。

コード例

入力コード(Oracle):
 CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Copy
出力コード:
 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;
Copy

推奨事項

  • 特定の要件に基づいて、動的テーブルのパラメーターを設定します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0032

説明

複数の変換を実行する場合、 SnowConvert はパラメーターの値を検証する必要があります。この検証プロセスは、パラメーターに変数や式ではなく実際の値(リテラル)が含まれている場合にのみ完了します。

この警告は、パラメーターが参照で渡されたため、 SnowConvert がパラメーターの値を判断できない場合に表示されます。その結果、関数やステートメントを完全に変換することはできません。

コード例

入力コード(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);
Copy
出力コード:
 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);
Copy

推奨事項

  • 指定されたパラメーターには、可能な限りリテラル値を使用します。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください

SSC-FDM-0033

説明

このメッセージは、TeradataとSnowflakeの行サンプリング動作の違いを説明しています。Teradataは非決定論的サンプリングで一貫した行数を返しますが、Snowflakeはわずかに多いか少ない行数を返すことがあります。Snowflakeでは、確率ベースのサンプリングアプローチを採用しているため、このような行数の変動は通常であり、予想されることです。

Snowflakeからデータを取得する際に一貫した再現性のある結果を得るために、クエリでシード値を使用することをお勧めします。これは決定論的な出力を生成し、クエリを実行するたびに同じ値と結果の量を得ることを意味します。

コード例

入力コード(Teradata):
 SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Copy
出力コード:
 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);
Copy

推奨事項

  • 決定論的な結果を得るには、クエリのシード部分を含めます。

  • その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください