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;
出力コード:¶
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;
推奨事項¶
動的テーブルから記録を削除するには、動的テーブル定義全体を新しいものに置き換える必要があります。
その他のサポートについては、 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;
出力コード:¶
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;
推奨事項¶
移行元テーブルが移行コードに存在するかどうかを確認し、足りない列を手動で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;
出力コード:¶
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;
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
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;
出力コード:¶
--** 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;
推奨事項¶
この問題を解決するには、コードに不足している参照を追加します。オブジェクトがすでにSnowflakeデータベースに存在する場合は、ステートメントを安全に削除することができます。
その他のヘルプについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-RS0004¶
重大性¶
高
説明¶
この問題は、Snowflakeが HLLSKETCH データ型をサポートしていないために発生します。
コード例¶
入力コード:¶
CREATE TABLE table1
(
col_hllsketch HLLSKETCH
);
出力コード:¶
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" }}';
推奨事項¶
HyperLogLog を使用してカーディナリティを推定するためにSnowflakeが提供する、すべての 集計関数 を確認します。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
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)
);
出力コード:¶
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)
);
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
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;
出力コード:¶
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;
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください