SnowConvert: Redshiftの問題

SSC-EWI-RS0008

重大性

説明

この問題は、Redshiftが ストリーミングインジェスチョン に使用されるマテリアライズドビュー上で DELETE ステートメントを許可しているために発生します。Snowflakeに変換すると、これらのマテリアライズドビューは動的テーブルになり、 DELETE 操作をサポートしません。

コード例

入力コード:

CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department FROM employees WHERE department = 'Engineering';

DELETE FROM mv
WHERE id = 2;
Copy

出力コード:

CREATE DYNAMIC TABLE mv
--** 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": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "02/11/2025",  "domain": "test" }}'
AS
SELECT id, name, department FROM
        employees
WHERE
        RTRIM( department) = RTRIM( 'Engineering');


!!!RESOLVE EWI!!! /*** SSC-EWI-RS0008 - MATERIALIZED VIEW IS TRANSFORMED INTO A DYNAMIC TABLE, AND THE DELETE STATEMENT CANNOT BE USED ON DYNAMIC TABLES. ***/!!!
DELETE FROM mv
WHERE id = 2;
Copy

推奨事項

  • 動的テーブルから記録を削除するには、動的テーブル定義全体を新しいものに置き換える必要があります。

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

SSC-EWI-RS0009

重大性

説明

Snowflakeでは、 MERGE ステートメントを使用する場合、 REMOVE DUPLICATES 句は使用できません。同じ関数を実現するには、回避策を実装する必要があります。これには、 INSERT WHEN NOT MATCHED 句をコードに追加します。この句はソーステーブルからの列情報を必要とします。移行プロセスが移行元テーブルを見つけられない場合、必要な列を生成できず、エラーになります。

コード例

入力コード:

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy

出力コード:

CREATE TEMPORARY TABLE source_duplicates AS
  SELECT DISTINCT
    source.*
  FROM
    source
    INNER JOIN
      target
      ON target.id = source.id;

!!!RESOLVE EWI!!! /*** SSC-EWI-RS0009 - SEMANTIC INFORMATION NOT FOUND FOR THE SOURCE TABLE. COLUMNS TO BE INSERTED MAY BE ADDED MANUALLY. ***/!!!
MERGE INTO target
USING source ON target.id = source.id
WHEN MATCHED THEN
  DELETE
WHEN NOT MATCHED THEN
  INSERT
  VALUES ();

INSERT INTO target
SELECT
  *
FROM
  source_duplicates;

DROP TABLE IF EXISTS source_duplicates CASCADE;
Copy

推奨事項

  • 移行元テーブルが移行コードに存在するかどうかを確認し、足りない列を手動でinsertステートメントに追加します。

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

SSC-EWI-RS0002

重大性

説明

Redshiftで利用可能な SET 構成パラメーター 機能は、Snowflakeではサポートされていません。詳細については、 CREATE PROCEDURE のドキュメント をご参照ください。

コードの例

入力コード:

CREATE OR REPLACE PROCEDURE procedure2(
    IN input_param INTEGER,
    OUT output_param NUMERIC
)
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$
LANGUAGE plpgsql
SET enable_numeric_rounding to ON;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE procedure2 (
    IN !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'InParameterMode' NODE ***/!!! input_param INTEGER,
    OUT output_param NUMERIC
)
RETURNS VARCHAR
LANGUAGE SQL
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0002 - SET CONFIGURATION PARAMETER 'enable_numeric_rounding' IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
SET enable_numeric_rounding to ON
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

推奨事項

SSC-EWI-RS0003

重大性

説明

Redshiftの CREATE VIEW コマンドには、ビューを参照するデータベースオブジェクト(テーブルや関数など)から独立させるオプション句があります。この句を使用する場合は、すべての参照オブジェクトのスキーマ名を含める必要があります。この機能により、まだ存在しないオブジェクトを参照とする表示を作成することができます。システムは、ビューの作成時ではなく、クエリ時にこれらの参照オブジェクトが存在するかどうかを確認します。

現在のところ、Snowflakeはこの機能を実装するための同等のコマンドや明確な代替手段を提供していません。Snowflakeのドキュメントによると、ビューはビュー内で参照されるオブジェクトと同様に、特にスキーマに結び付けられます。

表示ステートメントを削除しようとすると、システムは入力コード内のすべての参照オブジェクトを確認します。すべての参照が見つかれば、Viewステートメントは正常に削除されます。参照が欠落している場合、システムは、依存関係が欠落しているためビューを削除できないことを示す警告メッセージを表示します。

SnowConvert は提供されたソースコードのみを分析し、Snowflake環境に既に存在するオブジェクトは確認しません。その結果、参照が見つからないというエラーメッセージが表示されることがあります。これらのオブジェクトがすでにSnowflakeデータベースに存在する場合は、これらのエラーを無視して、対応するステートメントを削除しても問題ありません。

コードの例

入力コード:

CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy

出力コード:

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "public.missingTable" **
CREATE VIEW myView
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS SELECT col1 FROM
public.missingTable
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0003 - WITH NO SCHEMA BINDING STATEMENT CAN NOT BE REMOVED DUE TO MISSING REFERENCES. ***/!!!
WITH NO SCHEMA BINDING;
Copy

推奨事項

  • この問題を解決するには、コードに不足している参照を追加します。オブジェクトがすでにSnowflakeデータベースに存在する場合は、ステートメントを安全に削除することができます。

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

SSC-EWI-RS0004

重大性

説明

この問題は、Snowflakeが HLLSKETCH データ型をサポートしていないために発生します。

コード例

入力コード:

CREATE TABLE table1
(
    col_hllsketch HLLSKETCH
);
Copy

出力コード:

CREATE TABLE table1
(
    col_hllsketch HLLSKETCH !!!RESOLVE EWI!!! /*** SSC-EWI-RS0004 - HLLSKETCH DATA TYPE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}';
Copy

推奨事項

SSC-EWI-RS0005

重大性

説明

この問題は、Snowflakeが PIVOT/UNPIVOT 操作の IN 句で列エイリアスを使用することを許可していないために発生します。詳細については、 Snowflakeドキュメント をご参照ください。

コード例

入力コード:

SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
Copy

出力コード:

SELECT *
FROM
    count_by_color UNPIVOT (
    cnt FOR color IN (red
                          !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS r, green
                                                                                                                                                                              !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS g, blue
                                                                                                                                                                                                                                                                                                                                 !!!RESOLVE EWI!!! /*** SSC-EWI-RS0005 - COLUMN ALIASES CANNOT BE USED IN THE IN CLAUSE OF THE PIVOT/UNPIVOT QUERY IN SNOWFLAKE. ***/!!! AS b)
);
Copy

推奨事項

SSC-EWI-RS0001

重大性

説明

Redshift の CREATE PROCEDURE ステートメントには、オプションで NONATOMIC トランザクションモード句があります。Snowflakeにはこの機能に直接相当するものがないため、 SMA は、変換後のコードを可能な限り修正することで、同様の機能の再現を試みます。

プロシージャ内のステートメントを自動的にコミットする NONATOMIC プロシージャの動作は、手動で検証する必要があります。Snowflakeは、この機能を再現するために「autocommit」アカウントパラメーターを提供します。自動コミットの詳細については、 Snowflakeドキュメント をご参照ください。

コードの例

入力コード:

CREATE OR REPLACE PROCEDURE procedure1(parameter int)
Nonatomic
AS
   $$
      SELECT * from my_table;
   $$
LANGUAGE plpgsql;
Copy

出力コード:

CREATE OR REPLACE PROCEDURE procedure1 (parameter int)
RETURNS VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0001 - THE NONATOMIC OPTION IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
Nonatomic
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "09/17/2024" }}'
AS
   $$
      SELECT * from
         my_table;
   $$;
Copy

推奨事項