SnowConvert AI - Redshiftの問題

SSC-EWI-RS0002

「Set configuration parameter」はSnowflakeではサポートされていません。

重大性

説明

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

コードの例

入力コード:
Redshift
 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
生成されたコード:
Snowflake
 CREATE OR REPLACE PROCEDURE procedure2 (input_param INTEGER, output_param OUT 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": "07/16/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
    output_param := input_param * 1.7;
END;
$$;
Copy

ベストプラクティス

SSC-EWI-RS0003

スキーマバインディングのないビューは、参照が欠落しているため削除できません。

重大性

説明

CREATE VIEW の Redshiftドキュメントには、特定のビューがテーブルや関数などのデータベースオブジェクトや、参照するオブジェクトにバインドされていないことを指定するオプション条項が含まれています。また、この句が使われる場合、参照されるオブジェクトはスキーマ名で修飾されなければならないことも文書で明確にされています。この句によって、ビューを作成し、まだ存在しないかもしれないオブジェクトを参照することができます。それらの存在は、ビューがクエリされた時点で確認されますが、定義時には確認されません。

しかし、Snowflakeにこの機能を実装するための同等のコマンドや明らかな回避策はありません。さらに、Snowflakeのドキュメントによると、ビューは特定のスキーマにリンクされており、ビュー内の参照オブジェクトもリンクされているようです。

ビューにリンクされた参照が入力コードに存在する場合、ステートメントは問題なく削除されます。しかし、必要な参照が欠落している場合は、警告メッセージが追加され、参照が欠落しているためにステートメントを削除できないことがユーザーに通知されます。

SnowConvert AIは、入力コードのみに対して分析を実行し、Snowflakeにすでにデプロイされているオブジェクトは考慮しません。そのため、出力には欠落している参照を指摘する問題が発生する可能性がありますが、参照がすでにSnowflakeデータベースに存在する場合は、ユーザーは問題なく安全にステートメントを削除することができます。

コードの例

入力コード:
Redshift
 CREATE VIEW myView AS SELECT col1 FROM public.missingTable
WITH NO SCHEMA BINDING;
Copy
生成されたコード:
Snowflake
 --** 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

HLLSKETCHデータ型はSnowflakeではサポートされていません。

重大性

説明

この変換の問題は、HLLSKETCHデータ型がSnowflakeでサポートされていないために追加されました。

コード例

入力コード:
 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

ベストプラクティス

  • カーディナリティを推定するためにSnowflakeが提供するすべての 集約関数HyperLogLog を使って検証してください。

  • さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。

SSC-EWI-RS0005

列のエイリアスはIN句では使用できません。

重大性

説明

この変換の問題は、列のエイリアスを SnowflakePIVOT/UNPIVOT クエリのIN句で使用できないため追加されます。

コード例

入力コード:
 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-RS0006

SUBSTRING関数の動作は、バイナリデータに適用した場合、異なる場合があります。

重大性

説明

SUBSTRING 関数の動作は、バイナリデータに適用した場合、異なる場合があります。RedshiftとSnowflakeではバイナリデータの扱いが異なるため、2つのプラットフォームで結果が異なる可能性があります。

コード例

入力コード:
 SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_binary;
SELECT SUBSTRING('abc'::varbyte, 2, 4) AS substring_binary;
Copy
生成されたコード:
 SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
SELECT SUBSTRING('abc':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_binary;
Copy

ベストプラクティス

SSC-EWI-RS0007

日付リテラルはSnowflakeではサポートされていません。

重大性

説明

DATE、TIME、TIMESTAMPの一部のフォーマットはSnowflakeではサポートされていません。これらのフォーマットは手作業が必要な場合があります。

コード例

入力コード:
 select datediff(century, '2000-Jan-31', 'Jan-31-2000');
Copy
生成されたコード:
  select
 DATEDIFF(YEAR,
                !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - '2000-Jan-31' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                '2000-Jan-31',
                               !!!RESOLVE EWI!!! /*** SSC-EWI-RS0007 - 'Jan-31-2000' DATE LITERAL IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
                               'Jan-31-2000') / 100;
Copy

ベストプラクティス

SSC-EWI-RS0008

日付リテラルはSnowflakeではサポートされていません。

重大性

説明

この変換の問題は、Redshiftでは ストリーミングインジェスト に使用されるマテリアライズドビューにDELETEステートメントを適用できるため追加されました。Snowflakeでは、これらのビューは動的テーブルに変換され、動的テーブルではDELETEステートメントは使用できません。

コード例

入力コード:
 CREATE MATERIALIZED VIEW mv AS
SELECT id, name, department_id FROM employees WHERE department_id = 101;

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": "03/03/2025",  "domain": "test" }}'
AS
SELECT id, name, department_id FROM
employees
WHERE department_id = 101;


!!!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句を出力コードに生成する必要があり、それにはソーステーブルの列が必要です。移行時に移行元テーブルが見つからなかった場合、列は生成されず、エラーがスローされます。

コード例

入力コード:
Redshift
 MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;
Copy
生成されたコード:
Snowflake
 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. ***/!!!
--** SSC-FDM-RS0005 - REDSHIFT MERGE STATEMENT DOESN'T ALLOW DUPLICATES IN THE SOURCE TABLE. SNOWFLAKE BEHAVIOR MAY DIFFER IF THERE ARE DUPLICATE VALUES. **
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

ベストプラクティス

  • ソーステーブルが移行コードに存在するかどうかを検索し、挿入操作で列を手動で追加します。

  • さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。

SSC-EWI-RS0010

OutパラメーターはトップレベルCALLユニットではサポートされていません。

重大性

説明

Redshiftでは、出力として代入される変数を定義することなく、トップレベルのコード単位としてoutパラメータ内のCALLステートメントを使用することができます。Snowflakeは、出力値をどこかに設定するために変数の使用を強制します。

コード例

入力コード:
Redshift
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product(
    IN p_product_name VARCHAR(100),
    OUT p_total_sales DECIMAL(18, 2)
)
AS $$
BEGIN
    NULL;
END;
$$ LANGUAGE plpgsql;

CALL get_total_sales_by_product('Laptop');
Copy
生成されたコード:
Snowflake
 CREATE OR REPLACE PROCEDURE get_total_sales_by_product (p_product_name VARCHAR(100), p_total_sales OUT DECIMAL(18, 2))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "redshift",  "convertedOn": "07/10/2025",  "domain": "no-domain-provided" }}'
AS $$
BEGIN
NULL;
END;
$$;
!!!RESOLVE EWI!!! /*** SSC-EWI-RS0010 - Top-level Procedure Call with out parameters is not supported. ***/!!!
CALL get_total_sales_by_product('Laptop');
Copy

ベストプラクティス

  • 呼び出しを無名ブロックに移し、出力パラメーターとして渡す変数を宣言します。

  • さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。