SnowConvert: SQLServer の問題¶
SSC-EWI-TS0060¶
重大性¶
中
説明¶
この警告は、Snowflakeの日付関連関数のパラメーターとして、サポートされていない時間コンポーネントが使用された場合に表示されます。サポートされる日時コンポーネントの包括的なリストについては、 日時関数 | Snowflakeドキュメント をご参照ください。
コード例¶
入力コード¶
SELECT
-- Supported
DATEPART(second, getdate()),
-- Not supported
DATEPART(millisecond, getdate()),
DATEPART(microsecond, getdate());
出力コード:¶
SELECT
-- Supported
DATE_PART(second, CURRENT_TIMESTAMP() :: TIMESTAMP),
-- Not supported
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'millisecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(millisecond, CURRENT_TIMESTAMP() :: TIMESTAMP),
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0060 - TIME PART 'microsecond' NOT SUPPORTED AS A FUNCTION PARAMETER ***/!!!
DATEPART(microsecond, CURRENT_TIMESTAMP() :: TIMESTAMP);
推奨事項¶
ユーザー定義関数(UDF)を作成すると、Snowflakeで直接サポートされていない時間コンポーネントを手動で抽出することができます。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0070¶
EWI
機能は廃止されました。最新の情報については、 SSC-FDM-TS0024 ドキュメントをご参照ください。
説明¶
この警告は、 CURRENT_TIMESTAMP を AT TIME ZONE 句とともに使用した場合に表示されます。この警告は、 CURRENT_TIMESTAMP の動的な性質により、異なるシナリオ間で結果に一貫性がない可能性があることを示しています。
Microsoft SQL ServerとSnowflakeの CURRENT_TIMESTAMP 関数の主な違いは、タイムゾーンの処理です。
SQL Server: サーバーのローカルタイムゾーンに基づくシステム日時を返します。
Snowflake: 日時を UTC (協定世界時)で返します。
¶
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:52:55.317 -10:00
¶
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', CURRENT_TIMESTAMP() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0070 - CURRENT_TIMESTAMP in At Time Zone statement may have a different behavior in certain cases ***/!!!);
2024-02-08 06:53:46.994 -1000
推奨事項¶
Snowflakeで一貫した形式を維持する方法の例を示します。
SELECT current_timestamp at time zone 'Hawaiian Standard Time';
2024-02-08 16:33:49.143 -10:00
Snowflakeでは、デフォルトのタイムゾーンは ALTER SESSION コマンドを使って変更できます。例:
ALTER SESSION SET TIMEZONE = 'Pacific/Honolulu';
SELECT
CONVERT_TIMEZONE('Pacific/Honolulu', 'UTC', CURRENT_TIMESTAMP());
2024-02-08 16:33:49.143
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0044¶
重大性¶
Critical
例を明確かつ簡潔にするため、コードの一部を省略しています。
説明¶
この警告は、 FOR XML 句を使用した場合に警告が表示されます。この句はSnowflake SQL では使用できません。
コード例¶
入力コード:¶
SELECT TOP 1 LastName
FROM AdventureWorks2019.Person.Person
FOR XML AUTO;
出力コード:¶
SELECT TOP 1
LastName
FROM
AdventureWorks2019.Person.Person
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
推奨事項¶
ユーザー定義関数(UDFs)を使用して、ソースコードの関数を再現することを検討してください。以下は、元の動作を再現するのに役立つ UDFs の例です。
SQL Server
CREATE TABLE TEMPTABLE (Ref INT, Des NVARCHAR(100), Qty INT)
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2)
GO
-- FOR XML
SELECT *
FROM TempTable
FOR XML AUTO
GO
-- FOR XML RAW
SELECT *
FROM TempTable
FOR XML RAW
-- FOR XML
<TempTable Ref="100001" Des="Normal" Qty="1"/><TempTable Ref="100002" Des="Foobar" Qty="1"/><TempTable Ref="100003" Des="Hello World" Qty="2"/>
-- FOR XML RAW
<row Ref="100001" Des="Normal" Qty="1"/><row Ref="100002" Des="Foobar" Qty="1"/><row Ref="100003" Des="Hello World" Qty="2"/>
Snowflake¶
CREATE OR REPLACE TABLE TEMPTABLE (
Ref INT,
Des VARCHAR(100),
Qty INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
INSERT INTO tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2);
-- FOR XML
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML AUTO CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML AUTO;
-- FOR XML RAW
SELECT
*
FROM
TempTable
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
-- FOR XML
<TempTable DES="Normal" QTY="1" REF="100001" /><TempTable DES="Foobar" QTY="1" REF="100002" /><TempTable DES="Hello World" QTY="2" REF="100003" />
-- FOR XML RAW
<row DES="Normal" QTY="1" REF="100001" /><row DES="Foobar" QTY="1" REF="100002" /><row DES="Hello World" QTY="2" REF="100003" />
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0035¶
重大性¶
中
例を明確で分かりやすくするため、コードの一部を削除しています。
説明¶
現在のところ、Snowflakeは宣言されていても初期化されていないカーソル変数をサポートしていません。その結果、早期警告インジケーター(EWI)が追加され、関連するコードがコメントアウトされます。
コード例¶
入力コード:¶
CREATE OR ALTER PROCEDURE notInitializedCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0035
DECLARE @MyCursor CURSOR, @MyCursor2 CURSOR;
-- Should not be marked
DECLARE cursorVar CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT someCol
FROM someTable;
RETURN 'DONE';
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE notInitializedCursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0035
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR CURSOR;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0035 - CURSOR VARIABLE DECLARED BUT NEVER INITIALIZED, THIS IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
MYCURSOR2 CURSOR;
-- Should not be marked
cursorVar CURSOR
FOR
SELECT
someCol
FROM
someTable;
BEGIN
RETURN 'DONE';
END;
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0001¶
重大性¶
Critical
例を明解で分かりやすくするため、出力コードの一部を削除しています
説明¶
このエラー警告インジケーター(EWI)は、 SnowConvert が翻訳中に関数本文の生成を妨げる重大なエラーに遭遇したときに表示されます。
コード例¶
SQL Server¶
CREATE FUNCTION func1 ()
RETURNS VARCHAR
SELECT
*
FROM
TABLE1
Snowflake¶
CREATE OR REPLACE FUNCTION func1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0001 - THE BODY WAS NOT GENERATED FOR FUNCTION 'func1' ***/!!!
AS
$$
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0025¶
重大性¶
低
-t JavaScript
または --PLTargetLanguage JavaScript
のフラグをコマンドに追加して、 JavaScript にプロシージャとマクロを生成します。
例を明解で分かりやすくするため、出力コードの一部を削除しています
説明¶
この早期警告インジケーター(EWI)は、 ERROR_SEVERITY 組み込み関数を翻訳するときに表示されます。この関数は、 SQL Serverで最も一般的な重大度レベルを表すデフォルト値16を返します。生成されたユーザー定義関数(UDF)は、この値を取得します。
コード例¶
入力コード:¶
-- Additional Params: -t JavaScript
CREATE procedure proc1()
as
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0 from table1;
END TRY
BEGIN CATCH
return ERROR_SEVERITY();
END CATCH;
GO
出力コード:¶
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
try {
EXEC(` -- Generate a divide-by-zero error.
SELECT
TRUNC( 1/0) from
table1`);
} catch(error) {
return SELECT(` !!!RESOLVE EWI!!! /*** SSC-EWI-TS0025 - CUSTOM UDF 'ERROR_SEVERITY_UDF' INSERTED FOR ERROR_SEVERITY FUNCTION. ***/!!!
ERROR_SEVERITY_UDF()`);
}
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0074¶
重大性¶
低
例を明確かつ簡潔にするため、コードの一部を省略しています。
説明¶
この警告は、 TRY_CAST および TRY_CONVERT 関数の変換中に表示されます。データ型の依存関係が解決できなかったため、Snowflakeの結果が元と異なる場合があります。これは通常、必要な依存関係がソースコードに存在しない場合に起こります。
入力コード:¶
SELECT TRY_CONVERT( INT, col1) FROM TABLE1;
SELECT TRY_CAST(COL1 AS FLOAT) FROM TABLE1
出力コード¶
SELECT
CAST(col1 AS INT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CONVERT FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
SELECT
CAST(COL1 AS FLOAT) /*** SSC-FDM-TS0005 - TRY_CONVERT/TRY_CAST COULD NOT BE CONVERTED TO TRY_CAST ***/!!!RESOLVE EWI!!! /*** SSC-EWI-TS0074 - CAST RESULT MAY BE DIFFERENT FROM TRY_CAST FUNCTION DUE TO MISSING DEPENDENCIES ***/!!!
FROM
TABLE1;
推奨¶
技術的なサポートが必要な場合は、サポートチーム snowconvert-support@snowflake.com にお問い合わせください。
SSC-EWI-TS0034¶
重大性¶
高
説明¶
この警告は、コード変換時に SnowConvert が関数の RETURNS TABLE
句の列構造を自動的に判断できない場合に表示されます。その結果、生成されたコードでは RETURNS TABLE
句は空のままです。これは通常、列情報が元のソースコードから推測できない場合に発生します。
コード例¶
入力コード:¶
CREATE FUNCTION Sales.ufn_SalesByStore2()
RETURNS TABLE
AS
RETURN
(
WITH CTE AS (
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
)
SELECT tab.* FROM CTE tab
);
GO
SELECT * FROM GetDepartmentInfo();
出力コード:¶
CREATE OR REPLACE FUNCTION Sales.ufn_SalesByStore2 ()
RETURNS TABLE(
DepartmentID STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN DepartmentID WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
Name STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN Name WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/,
GroupName STRING /*** SSC-FDM-TS0012 - INFORMATION FOR THE COLUMN GroupName WAS NOT FOUND. STRING DATATYPE USED TO MATCH CAST AS STRING OPERATION ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
AS
$$
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH CTE AS (
SELECT
DepartmentID,
Name,
GroupName
FROM
HumanResources.Department
)
SELECT tab.* FROM
CTE tab
$$;
SELECT
*
FROM GetDepartmentInfo() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'TableValuedFunctionCall' NODE ***/!!!;
推奨事項¶
この問題を解決するには、必要なオブジェクトがすべてコードからアクセスできるようにします。必要なオブジェクトがすべて利用可能であることを確認しても問題が解決しない場合は、特定のユースケースの詳細についてご連絡ください。
その他のサポートについては、 snowconvert-support@snowflake.com にメールでご連絡ください
SSC-EWI-TS0041¶
重大性¶
中
説明¶
この早期警告インジケーター(EWI)は、以下の XML データ型メソッド に適用されます。これらは現在、Snowflake SQL では利用できません。
Value: 変数やフィールドに格納されている実際のデータまたはコンテンツ
Query: データベースから特定の情報を取得するリクエスト
Exist: 特定の要素や条件が存在するかどうかを確認します
Modify: 既存のデータやセットを変更または更新します
Nodes: データ構造内の個々の要素または接続ポイント
コード例¶
入力コード:¶
CREATE PROCEDURE xml_procedure
@inUserGroupsXML XML
AS
BEGIN
SELECT entities.entity.value('TypeID[1]', 'VARCHAR(100)') AS TypeID
,entities.entity.value('Name[1]', 'VARCHAR(100)') AS Name
INTO #tmpUserGroups
FROM @inUserGroupsXML.nodes('/entities/entity') entities(entity)
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE xml_procedure (INUSERGROUPSXML TEXT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
CREATE OR REPLACE TEMPORARY TABLE T_tmpUserGroups AS
SELECT
XMLGET(entity, '$') :: VARCHAR(100) AS TypeID
,
XMLGET(entity, '$') :: VARCHAR(100) AS Name
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0041 - XML TYPE METHOD nodes IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
T_inUserGroupsXML('/entities/entity') entities (
entity
);
END;
$$;
推奨事項¶
ユーザー定義関数(UDFs)を使用して、元のソースコードの関数を再現します
Snowflakeでの XML データ型の取り扱いについては、 次のドキュメントをご確認ください
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0010¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
高
説明¶
このエラーは、共通テーブル式(CTE)が表示内で誤って使用された場合に発生します。ビューはクエリの読み取り専用表示で、データの変更方法ではなく、データの取得と表示方法を定義します。
コード例¶
入力コード:¶
Create View viewName
as
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0010 - COMMON TABLE EXPRESSION IN VIEW NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE VIEW viewName
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
AS
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH CTE NOT SUPPORTED IN SNOWFLAKE ***/!!!
with commonTableExpressionName (
columnName
) as
(
select
1
)
((select
1 as col2)
union
(
select
1 as col3
));
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0024¶
重大性¶
低
説明¶
この警告は、ストアドプロシージャ内の BULK INSERT
操作を検出できない場合に表示されます。その結果、完全な変換に必要な依存関係は作成されません。さらに、変換された COPY INTO
コマンドは、ユーザーが手動で作成する必要のある tempStage
からファイルを取得しようとします。
コード例¶
入力コード:¶
CREATE PROCEDURE BULK_PROC2
AS
BULK INSERT dbo.table1 FROM 'E:\test.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n'
);
GO
出力コード:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461207064166040
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n';
CREATE OR REPLACE STAGE STAGE_638461207064166040
FILE_FORMAT = FILE_FORMAT_638461207064166040;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\test.txt @STAGE_638461207064166040 AUTO_COMPRESS = FALSE;
CREATE OR REPLACE PROCEDURE BULK_PROC2 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert Helpers Code
// END REGION
EXEC(`COPY INTO dbo.table1 FROM @STAGE_638461207064166040/test.txt`);
$$
推奨事項¶
まず STAGE と FILE FORMAT を作成して、ファイルにアクセスします。
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0075¶
重大性¶
中
説明¶
組み込みプロシージャ翻訳は現在利用できません。
コード例¶
入力コード:¶
EXEC sp_column_privileges_rowset_rmt 'Caption';
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0075 - TRANSLATION FOR BUILT-IN PROCEDURE 'sp_column_privileges_rowset_rmt' IS NOT CURRENTLY SUPPORTED. ***/!!!
EXEC sp_column_privileges_rowset_rmt 'Caption';
推奨事項¶
ユーザーからのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0055¶
この早期警報インジケーター(EWI)は使用されなくなりました。SSC-FDM-TS0020 にある更新された情報をご参照ください。
重大性¶
中
説明¶
この警告は、Alter Tableステートメント内でデフォルト制約が見つかると表示されます。
現在、この制約タイプはサポートされていません。しかし、Alter Tableステートメントの前にテーブルが定義されていれば、参照を識別し、デフォルト制約をテーブル定義と組み合わせることができます。これができない場合、制約は変換されたコードでコメントアウトされます。
コード例¶
入力コード:¶
CREATE TABLE table1(
col1 integer,
col2 varchar collate Latin1_General_CS,
col3 date
);
ALTER TABLE table1
ADD col4 integer,
CONSTRAINT col1_constraint DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint DEFAULT 30 FOR col1;
出力コード:¶
CREATE OR REPLACE TABLE table1 (
col1 INTEGER DEFAULT 50,
col2 VARCHAR COLLATE 'EN-CS',
col3 DATE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
ALTER TABLE table1
ADD col4 INTEGER,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 50 FOR col1,
CONSTRAINT col1_constraint
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0055 - DEFAULT CONSTRAINT MAY HAVE BEEN ADDED TO TABLE DEFINITION ***/!!!
DEFAULT 30 FOR col1;
Alter Tableコマンド内のステートメントがすべて無効な場合、変換後のコードではAlter Tableコマンド全体がコメントアウトされます。
既知の問題¶
同じ列に複数のデフォルト制約が定義されている場合、最初の制約のみがテーブル作成ステートメントに含まれます。
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0061¶
重大性¶
中
例を明確で分かりやすくするため、コードの一部を削除しています。
説明¶
この警告は、サポートされていない ALTER COLUMN ステートメントが検出された場合に表示されます。
コード例¶
入力コード:¶
ALTER TABLE SampleTable
ALTER COLUMN SampleColumn INT NULL SPARSE;
出力コード:¶
ALTER TABLE IF EXISTS SampleTable
ALTER COLUMN SampleColumn
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0061 - ALTER COLUMN COMMENTED OUT BECAUSE SPARSE COLUMN IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
INT NULL SPARSE;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0045¶
重大性¶
低
例を明確かつ簡潔にするため、コード出力の一部を削除しています。
説明¶
この早期警告問題(EWI)は、 SQL Server内の GOTO ステートメントで参照されるすべてのラベル名に対して生成されます。
コード例¶
入力コード:¶
CREATE PROCEDURE GoToProcedure
AS
BEGIN
DECLARE @TotalMaarks INT
SET @TotalMaarks = 49
IF @TotalMaarks >= 50
GOTO Pass
IF @TotalMaarks < 50
GOTO Fail
Pass:
SELECT 1;
SELECT * FROM TABLE1;
RETURN 1;
Fail:
SELECT 2;
SELECT * FROM TABLE2;
RETURN 2;
END
出力コード:¶
CREATE OR REPLACE PROCEDURE GoToProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
TOTALMAARKS INT;
BEGIN
TOTALMAARKS := 49;
IF (:TOTALMAARKS >= 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Pass
END IF;
IF (:TOTALMAARKS < 50) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'GOTO' NODE ***/!!!
GOTO Fail
END IF;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Pass:
SELECT 1;
SELECT
*
FROM
TABLE1;
RETURN 1;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0045 - LABELED STATEMENT IS NOT SUPPORTED IN SNOWFLAKE SCRIPTING ***/!!!
Fail:
SELECT 2;
SELECT
*
FROM
TABLE2;
RETURN 2;
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
関連 EWI¶
SSC-EWI-0073: このコードは、機能等価性を保証するために見直しが必要です。
SSC-EWI-TS0009¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
高
説明¶
このエラーは、 SQL Server の既存のトランザクション内で新しいトランザクションが開始された場合に発生する、ネストされたトランザクションの存在を示しています。最初のステートメントの後に追加の BEGIN ステートメントが実行されると、新しいトランザクションが作成され、トランザクションカウンターが1つ増加します。
Snowflakeはネストされたトランザクションをサポートしていません。2つ目の BEGIN ステートメントを使用すると、そのステートメントは無視され、1つのトランザクションのみが維持されます。SQL Serverのトランザクション動作の詳細については、 SQL Serverトランザクション をご参照ください。
コード例¶
入力コード:¶
CREATE PROC transactionsTest
AS
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (1), (2)
BEGIN TRANSACTION
SELECT @@TRANCOUNT AS TransactionCount_AfterSecondTransaction
INSERT INTO TESTSCHEMA.TESTTABLE(ID) VALUES (3), (4)
COMMIT;
SELECT @@TRANCOUNT AS TransactionCount_AfterFirstCommit
COMMIT;
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE transactionsTest ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0009 - THE FOLLOWING TRANSACTION MAY CONTAIN NESTED TRANSACTIONS WHICH ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
BEGIN TRANSACTION;
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet1);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (1), (2);
BEGIN TRANSACTION;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterSecondTransaction;
return_arr := array_append(return_arr, :ProcedureResultSet2);
INSERT INTO TESTSCHEMA.TESTTABLE (ID) VALUES (3), (4);
COMMIT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
:TRANCOUNT AS TransactionCount_AfterFirstCommit;
return_arr := array_append(return_arr, :ProcedureResultSet3);
COMMIT;
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '12' COLUMN '1' OF THE SOURCE CODE STARTING AT 'END'. EXPECTED 'BATCH' GRAMMAR. CODE '80'. **
--END
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
;
推奨事項¶
Snowflakeはコンパイルエラーを生成する代わりに、ネストされたトランザクションを無視します。評価レポートを確認すると、コード内のネストされたトランザクションを識別できます。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
関連 EWI¶
SSC-FDM-0020: 複数のクエリの結果が仮テーブルに格納されます。
SSC-EWI-0001: ソースコード行に不明または無効なトークンが見つかりました。
SSC-EWI-0040: ステートメントはサポートされていません。
SSC-EWI-TS0039¶
重大性¶
中
説明¶
この警告は、同じカーソルに対して複数の SET ステートメントが見つかった場合に表示されます。Snowflake Scriptingでは、1つのカーソルには1つの SET ステートメントしか持つことができません。同じカーソルに対する追加の SET ステートメントは、変換中に自動的にコメントアウトされます。
コード例:¶
入力コード:¶
CREATE OR ALTER PROCEDURE multipleSetExample
AS
BEGIN
DECLARE @MyCursor CURSOR;
DECLARE @MyCursor2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE @MyCursor3 CURSOR;
SET @MyCursor = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
SET @MyCursor3 = CURSOR STATIC READ_ONLY
FOR
SELECT *
FROM someTable;
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
RETURN 'DONE';
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE multipleSetExample ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
MYCURSOR CURSOR
FOR
SELECT col3
FROM defaultTable;
MYCURSOR2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
MYCURSOR3 CURSOR
FOR
SELECT *
FROM someTable;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor = CURSOR DYNAMIC
FOR
SELECT col2
FROM exampleTable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TS0039 - CURSOR VARIABLE MYCURSOR2 SET MULTIPLE TIMES, THIS IS NOT VALID IN SNOWFLAKE SCRIPTING ***/!!!
SET @MyCursor2 = CURSOR STATIC READ_ONLY
FOR
SELECT col3
FROM defaultTable;
RETURN 'DONE';
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0078¶
重大性¶
中
説明¶
このエラーは、関数呼び出し、変数名、名前付き定数などの式が、switchステートメントのデフォルトの場合の後に置かれたときに発生します。
Snowflakeは、数値や文字列などの明示的な定数値のみを入力として受け付けます。
コード例¶
入力コード:¶
ALTER TABLE
T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER DEFAULT RANDOM(10);
出力コード:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "T_ALTERTABLETEST", "RANDOM" **
ALTER TABLE IF EXISTS T_ALTERTABLETEST
ADD
COLUMN COL10 INTEGER
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0078 - DEFAULT OPTION NOT ALLOWED IN SNOWFLAKE ***/!!!
DEFAULT RANDOM(10);
¶
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0079¶
重大性¶
中
説明¶
この警告は、 SnowConvert がソースコードに DBCC (データベースコンソールコマンド)ステートメントを検出したときに表示されます。DBCC ステートメントは、通常、Snowflakeのアーキテクチャと互換性のないデータベースメンテナンスコマンドです。
コード例¶
入力コード:¶
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0079 - DATABASE CONSOLE COMMAND 'CHECKIDENT' IS NOT SUPPORTED. ***/!!!
DBCC CHECKIDENT(@a, RESEED, @b) WITH NO_INFOMSGS;
推奨事項¶
これは、アクションを起こす必要のない情報メッセージです。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0049¶
分かりやすくするため、コードの一部を削除しています。
重大性¶
中
説明¶
Begin ... End
ブロックを含むほとんどの IF
ステートメントはサポートされており、 SSC-EWI-TS0049 エラーが発生することなく正常に実行されます。
コード例¶
入力コード:¶
CREATE OR ALTER FUNCTION [PURCHASING].[FOO](@status INT)
Returns INT
As
Begin
declare @result as int = 10;
SELECT @result = quantity FROM TABLE1 WHERE COL1 = @status;
IF @result = 3
BEGIN
IF @result>0 SELECT @result=0 ELSE SELECT @result=1
SELECT @result = 1
END
return @result;
End
出力コード:¶
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO (STATUS INT)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
RESULT INT := 10;
BEGIN
SELECT
quantity
INTO
:RESULT
FROM
TABLE1
WHERE
COL1 = :STATUS;
IF (:RESULT = 3) THEN
BEGIN
IF (:RESULT >0) THEN SELECT
0
INTO
:RESULT;
ELSE
SELECT
1
INTO
:RESULT;
END IF;
SELECT
1
INTO
:RESULT;
END;
END IF;
RETURN :RESULT;
END;
$$;
基本的なコード例(上記のような)を使用する場合、変換は正しく機能します。しかし、特定のエッジケースでは、「IF」ステートメントが正しく変換されず、 EWI (エラー、警告、情報)メッセージが生成されます。
手動サポート¶
ケース1: 単一のステートメント¶
これらのシナリオでは、変換されたステートメントは SELECT 句の一部になるため、変換は簡単です。
IF @result = 0
BEGIN
SET @result =1
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
( SELECT 1 AS RESULT )
ケース2: 複数のステートメント¶
複数の SQL ステートメントを変換する場合は、順序通りに変換します。最初のステートメント(N)から開始し、その出力を次のステートメント(N+1)のソーステーブルとして使用します。
IF @result = 0
BEGIN
Statement1
Statement2
Statement3
END
CASE WHEN (SELECT RESULT FROM CTE2)= 0 THEN
(
SELECT TransformedStatement3
FROM (
SELECT TransformedStatement2
FROM (
SELECT TransformedStatement1
) T1
) T2
)
ケース3: 複数のセットステートメント¶
このような状況では、 SET ステートメントごとに個別の変換を作成する必要があります。
IF @result = 0
BEGIN
SET @var1 = 1
SET @var2 = 3
SET @var3 = @var2
END
WITH CTE1 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0) = 0 THEN
(SELECT 1) AS VAR1)
WITH CTE2 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT 3) AS VAR2)
WITH CTE3 AS (
SELECT
CASE WHEN (SELECT
RESULT
FROM
CTE0)= 0 THEN
(SELECT T1.VAR2
FROM ((SELECT 3) AS VAR2) AS T1) AS VAR3)
...
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0037¶
重大性¶
中
例を明確かつ分かりやすくするため、コードの一部を削除しています。
説明¶
Snowflake Scriptingのカーソルは、結果セット内を進むことしかできません(スクロール不可)。FETCH NEXT のみを使用し、記録は1件ずつしか取得できません。
コード例¶
入力コード:¶
CREATE OR ALTER PROCEDURE scrollablecursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0037
DECLARE CursorVar CURSOR SCROLL STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
-- Should not be marked
DECLARE CursorVar2 CURSOR STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
DECLARE CursorVar3 CURSOR FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT FirstName
FROM vEmployee;
RETURN 'DONE';
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE scrollablecursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0037
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0037 - SNOWFLAKE SCRIPTING CURSORS ARE NON-SCROLLABLE, ONLY FETCH NEXT IS SUPPORTED ***/!!!
CursorVar CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
-- Should not be marked
CursorVar2 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
CursorVar3 CURSOR
FOR
SELECT
FirstName
FROM
vEmployee;
BEGIN
RETURN 'DONE';
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0013¶
この警告は無効になりました。最新のドキュメントについては、 SSC-FDM-TS0013 をご参照ください。
重大性¶
低
説明¶
この警告は、 SQL Serverの計算列をSnowflakeに変換するときに表示されます。変換後の関数がまったく同じではない可能性があることを警告します。
コード例¶
入力コード:¶
CREATE TABLE [TestTable](
[Col1] AS (CONVERT ([REAL], ExpressionValue))
);
出力コード:¶
CREATE OR REPLACE TABLE TestTable (
Col1 REAL AS (CAST(ExpressionValue AS REAL)) /*** SSC-FDM-TS0014 - COMPUTED COLUMN WAS TRANSFORMED TO ITS SNOWFLAKE EQUIVALENT, FUNCTIONAL EQUIVALENCE VERIFICATION PENDING. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
推奨事項¶
このメッセージは情報提供のみを目的としています。アクションは必要ありません。
自動変換されなかった式に手動で修正を加えます。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0076¶
この警告メッセージは使用されなくなりました。最新のドキュメントについては、 SSC-EWI-0002 をご参照ください。
重大性¶
中
説明¶
Snowflakeストアドプロシージャや関数では、デフォルトパラメーターをパラメーターリストの最後に配置する必要があります。デフォルト値を持つパラメーターは、パラメーター宣言のシーケンスの最後に移動する必要があります。
コード例¶
入力コード:¶
CREATE PROCEDURE MySampleProc
@Param1 NVARCHAR(50) = NULL,
@Param2 NVARCHAR(10),
@Param3 NVARCHAR(10) = NULL,
@Param4 NVARCHAR(10)
AS
SELECT 1;
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0076 - DEFAULT PARAMETERS MAY NEED TO BE REORDERED. SNOWFLAKE ONLY SUPPORTS DEFAULT PARAMETERS AT THE END OF THE PARAMETERS DECLARATIONS. ***/!!!
CREATE OR REPLACE PROCEDURE MySampleProc (PARAM1 STRING DEFAULT NULL, PARAM2 STRING, PARAM3 STRING DEFAULT NULL, PARAM4 STRING)
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
推奨事項¶
エンドユーザーからのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0056¶
この警告は無効になりました。最新のドキュメントについては、 SSC-FDM-TS0021 をご参照ください。
重大性¶
低
例を明確で分かりやすくするため、コードの一部を削除しています。
説明¶
この早期警告インジケーター(EWI)は、テーブルの変更ステートメントに MASKED WITH 句が含まれている場合に表示されます。これは、システムが MASKED WITH 関数に代わる近似値 MASKING POLICY を作成したことを示します。
コード例¶
入力コード:¶
ALTER TABLE table_name
ALTER COLUMN column_name
ADD MASKED WITH (FUNCTION = 'default()');
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER ***/!!!
CREATE OR REPLACE MASKING POLICY "default" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE 'xxxxx'
END;
ALTER TABLE IF EXISTS table_name MODIFY COLUMN column_name!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/!!! SET MASKING POLICY "default";
ALTER TABLE ステートメントを実行する前に、 MASKING POLICY を作成する必要があります。ポリシーの動作はおおよそのものであり、ロールやユーザー権限の調整が必要になる可能性があることに注意してください。
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0023¶
重大性¶
低
例を明確かつ簡潔にするため、コード出力の一部を削除しています。
説明¶
この警告は、 BULK INSERT
オプションが変換できない場合に表示されます。対応するオプションは、Snowflakeの FILE FORMAT
オプションとして指定する必要があります。
コード例¶
入力コード:¶
BULK INSERT #PCE FROM 'E:\PCE_Look-up_table.txt'
WITH
(
FIELDTERMINATOR ='\t',
ROWTERMINATOR ='\n',
FIRE_TRIGGERS
);
出力コード:¶
CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461199649565070
FIELD_DELIMITER = '\t'
RECORD_DELIMITER = '\n'
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0023 - 'FIRE_TRIGGERS' BULK OPTION COULD NOT BE TRANSFORMED TO ANY OF THE EXISTING FILE FORMAT OPTIONS ***/!!!
FIRE_TRIGGERS;
CREATE OR REPLACE STAGE STAGE_638461199649565070
FILE_FORMAT = FILE_FORMAT_638461199649565070;
--** SSC-FDM-TS0004 - PUT STATEMENT IS NOT SUPPORTED ON WEB UI. YOU SHOULD EXECUTE THE CODE THROUGH THE SNOWFLAKE CLI **
PUT file://E:\PCE_Look-up_table.txt @STAGE_638461199649565070 AUTO_COMPRESS = FALSE;
COPY INTO T_PCE FROM @STAGE_638461199649565070/PCE_Look-up_table.txt;
推奨事項¶
SnowSQL コマンドラインインターフェイス(CLI)の ユーザーガイド をご覧ください。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
関連 EWI¶
SSC-FDM-TS0004: PUT ステートメントはユーザーインターフェイスからは実行できません。
SSC-EWI-TS0072¶
重大性¶
低
例を明解で分かりやすくするため、出力コードの一部を削除しています
説明¶
この警告は、 SELECT ステートメントと OUTPUT パラメーターの両方を返す必要がある場合に表示されます。このような場合は、 OUTPUT パラメーターよりも SELECT ステートメントの結果が優先されます。
入力コード:¶
CREATE PROCEDURE SOMEPROC(@product_count INT OUTPUT, @123 INT OUTPUT)
AS
BEGIN
SELECT * from AdventureWorks.HumanResources.Department;
SELECT * from AdventureWorks.HumanResources.Employee;
END
出力コード:¶
CREATE OR REPLACE PROCEDURE SOMEPROC (PRODUCT_COUNT INT, _123 INT)
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
*
from
AdventureWorks.HumanResources.Department;
return_arr := array_append(return_arr, :ProcedureResultSet1);
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
*
from
AdventureWorks.HumanResources.Employee;
return_arr := array_append(return_arr, :ProcedureResultSet2);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0072 - RETURN statement will be ignored due to previous RETURN statement ***/!!!
RETURN OBJECT_CONSTRUCT('PRODUCT_COUNT', :PRODUCT_COUNT, '_123', :_123);
END;
$$;
推奨事項¶
無視する必要のある RETURN ステートメントは削除します。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
関連 EWI¶
SSC-FDM-0020: 複数の結果セットが返された場合、それらは仮テーブルに格納されます。
SSC-EWI-TS0046¶
重大性¶
中
説明¶
この警告は、Snowflake SQL に相当するものがないか、Snowflakeでサポートされていない SQL Serverシステムテーブル をコードが参照する場合に表示されます。
コード例¶
入力コード:¶
SELECT *
FROM
sys.all_sql_modules
WHERE
[STATE] = 0; -- state must be ONLINE
出力コード:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0046 - SYSTEM TABLE sys.all_sql_modules IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
sys.all_sql_modules
WHERE
STATE = 0; -- state must be ONLINE
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0017¶
重大性¶
低
説明¶
この警告は、 SnowConvert が CREATE TABLE
ステートメント内でマスキングされた列を検出した場合に表示されます。Snowflakeでは、列定義にオプションを追加するだけでは列マスキングは実装できません。SQL Serverと同じデータマスキング関数を実現するには、手動でマスキングロジックを実装する必要があります。
コード例¶
入力コード:¶
CREATE TABLE TABLE1
(
[COL1] nvarchar MASKED WITH (FUNCTION = 'default()') NULL,
[COL2] varchar(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
[COL3] varchar(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
[COL4] smallint MASKED WITH (FUNCTION = 'random(1, 100)') NULL
);
出力コード:¶
CREATE OR REPLACE TABLE TABLE1
(
COL1 VARCHAR
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'default()') NULL,
COL2 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
COL3 VARCHAR(100)
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'email()') NOT NULL,
COL4 SMALLINT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0017 - COLUMN MASKING NOT SUPPORTED IN CREATE TABLE ***/!!!
MASKED WITH (FUNCTION = 'random(1, 100)') NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
推奨事項¶
SnowConvert は現在、 MASKINGPOLICIES
の自動生成はサポートしていません。これらのポリシーは手動で作成する必要があります。
まず、マスキングポリシーの管理を担当するロールを作成します。
create role masking_admin;
次に、新しく作成したロールに必要な権限を付与します。
grant create masking policy on schema PUBLIC to role masking_admin;
allow table_owner role to set or unset the ssn_mask masking policy -- (optional)
grant apply on masking policy ssn_mask to role table_owner;
次のステップでマスキングポリシー関数を作成します。
-- default mask
create or replace masking policy default_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else 'xxxx'
end;
-- partial mask
create or replace masking policy partial_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'xxxxx' || RIGHT(val,1)
end;
-- email mask
create or replace masking policy email_mask as (val string) returns string ->
case
when current_role() in ('ANALYST') then val
else LEFT(val,1) || 'XXX@XXX.com'
end;
-- random mask
create or replace masking policy random_mask as (val smallint) returns smallint ->
case
when current_role() in ('ANALYST') then val
else UNIFORM(1,100,RANDOM())::SMALLINT
end;
マスキング関数のデモとして、 SQL Serverのマスキング関数と、Snowflakeにおける等価の実装の例を示します。
SQL Serverで以前にマスキングが有効になっていた列にマスキングポリシーを適用します。
alter table if exists TABLE1 modify column COL1 set masking policy default_mask;
alter table if exists TABLE1 modify column COL2 set masking policy partial_mask;
alter table if exists TABLE1 modify column COL3 set masking policy email_mask;
alter table if exists TABLE1 modify column COL4 set masking policy random_mask;
さらにサポートが必要な場合は、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0057¶
この早期警報インジケーター(EWI)は廃止されました。最新の情報については、 SSC-FDM-TS0022 ドキュメントをご参照ください。
重大性¶
低
例を明確で分かりやすくするため、コードの一部を削除しています。
説明¶
このエラーは、 MASKING POLICY が正しく機能するため、ロールや権限の割り当てる必要がある場合に発生します。適切な権限がない場合、データマスキングは機能しません。
コード例¶
入力コード¶
ALTER TABLE tableName
ALTER COLUMN columnName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)');
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0057 - MASKING ROLE MUST BE DEFINED PREVIOUSLY BY THE USER ***/!!!
CREATE OR REPLACE MASKING POLICY "partial_1_xxxxx_1" AS
(val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('YOUR_DEFINED_ROLE_HERE')
THEN val
ELSE LEFT(val, 1) || 'xxxxx' || RIGHT(val, 1)
END;
ALTER TABLE IF EXISTS tableName MODIFY COLUMN columnName!!!RESOLVE EWI!!! /*** SSC-EWI-TS0056 - A MASKING POLICY WAS CREATED AS SUBSTITUTE FOR MASKED WITH ***/!!! SET MASKING POLICY "partial_1_xxxxx_1";
6行目に示すように、プレースホルダーに1つ以上のロール値をコンマ区切りで追加することができます。各ロール値は、一重引用符で囲む必要があることを忘れないようにしてください。
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0063¶
重大性¶
Critical
説明¶
この警告は、Snowflakeがサポートしていないタイムゾーンがコードに含まれている場合に表示されます。
コード例¶
入力コード:¶
SELECT current_timestamp at time zone 'Turks And Caicos Standard Time';
出力コード:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0063 - TIME ZONE NOT SUPPORTED IN SNOWFLAKE ***/!!!
CURRENT_TIMESTAMP() at time zone 'Turks And Caicos Standard Time'
;
推奨事項¶
異なるタイムゾーンを扱うユーザー定義関数を作成できます。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0032¶
外部ウェブインターフェイス(EWI)は、ストアドプロシージャを JavaScript に翻訳するときにのみ生成されます。しかし、Snowflake Scriptingがストアドプロシージャの推奨言語になったため、この機能は推奨されなくなりました。
重大性¶
高
-t JavaScript
または --PLTargetLanguage JavaScript
のフラグをコマンドに追加して、 JavaScript にプロシージャとマクロを生成します。
例を分かりやすくするため、コード出力の一部を削除しています。
説明¶
この警告は、 BULK INSERT
ステートメントを含む連結リテラルを変換するときに表示されます。変換プロセスは、 BULK INSERT
をSnowflake PUT
コマンドに変換します。ただし、この PUT
コマンドは、動的 SQL から発信された場合には実行できません。
BULK INSERT
ステートメントを正しく処理するには、プロシージャとは別に PUT
コマンドを実行する必要があります。プロシージャに動的 SQL の BULK INSERT
ステートメントが複数含まれる場合は、次をお勧めします。
プロシージャを細かく分割する
BULK INSERT
ステートメントごとに、対応するPUT
コマンドを手動で実行します。
このアプローチにより、適切なファイルの読み込みとデータの挿入が保証されます。
コード例¶
入力コード:¶
-- Additional Params: -t JavaScript
CREATE PROCEDURE [dbo].[Load_FuelMgtMasterData]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@SQLString VARCHAR(500)
, @ImportName VARCHAR(200)
, @Today DATE
, @Yesterday DATE
, @SourceAffiliates VARCHAR(200);
SET @Today = GETDATE();
SET @Yesterday = DATEADD(DAY, -1, @Today);
TRUNCATE TABLE dbo.SourceFM_Affiliates;
SET @ImportName = '\\' + +@@ServerName
+ '\WorkA\merchantportal\affiliates.txt';
SET @SQLString = 'BULK INSERT ' + @SourceAffiliates + ' FROM '''
+ @ImportName + '''';
EXEC (@SQLString);
END;
出力コード:¶
CREATE OR REPLACE PROCEDURE dbo.Load_FuelMgtMasterData ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
/*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/
/* SET NOCOUNT ON*/
;
let SQLSTRING;
let IMPORTNAME;
let TODAY;
let YESTERDAY;
let SOURCEAFFILIATES;
TODAY = SELECT(` CURRENT_TIMESTAMP() :: TIMESTAMP`);
YESTERDAY = SELECT(` DATEADD(DAY, -1, ?)`,[TODAY]);
EXEC(`TRUNCATE TABLE dbo.SourceFM_Affiliates`);
IMPORTNAME = `\\` + SERVERNAME + `\WorkA\merchantportal\affiliates.txt`;
SQLSTRING =
// ** SSC-EWI-TS0032 - THE BULK INSERT WAS PART OF A DYNAMIC SQL, WHICH MAKES SOME OF THE TRANSLATED ELEMENTS INVALID UNLESS EXECUTED OUTSIDE DYNAMIC CODE. **
`CREATE OR REPLACE FILE FORMAT FILE_FORMAT_638461213351333410;
CREATE OR REPLACE STAGE STAGE_638461213351333410
FILE_FORMAT = FILE_FORMAT_638461213351333410;
PUT file://${IMPORTNAME} @STAGE_638461213351333410 AUTO_COMPRESS = FALSE;
COPY INTO ${SOURCEAFFILIATES} FROM @STAGE_638461213351333410/${IMPORTNAME}`;
EXEC(`${SQLSTRING}`);
$$;
推奨事項¶
プロシージャを実行する前に、動的
BULK INSERT
ステートメントで生成されたPUT
コマンドを抽出して実行します。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0073¶
この早期警告問題はサポートされなくなりました。最新のドキュメントについては、 SSC-FDM-TS0023 をご参照ください。
重大性¶
低
説明¶
この警告は、 ERROR_MESSAGE()関数の変換中に表示されます。Snowflakeでは正確なエラーメッセージが異なる場合があるため、ご注意ください。
入力コード:¶
SET @varErrorMessage = ERROR_MESSAGE()
出力コード¶
BEGIN
VARERRORMESSAGE := SQLERRM !!!RESOLVE EWI!!! /*** SSC-EWI-TS0073 - ERROR MESSAGE COULD BE DIFFERENT IN SNOWFLAKE ***/!!!;
END;
推奨¶
サポートが必要な場合は、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0080¶
重大性¶
高
説明¶
SQL Serverの EXECUTE AS
コマンドは、ユーザーが一時的に実行コンテキストを切り替えることを可能にします。この変更は、実行権限と、 USER_NAME()
のような文脈依存関数の出力の両方に影響します。元のコンテキストに戻るには、ユーザーは操作完了後に REVERT
コマンドを使用できます。
Snowflakeのプロシージャには実行コンテキストが必要で、これはプロシージャの作成時または変更時に CREATE PROCEDURE
または ALTER PROCEDURE
ステートメントを使用してのみ設定できます。プロシージャの実行中にこのコンテキストを変更することはできません。
コード例¶
入力コード:
CREATE PROCEDURE proc1()
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT USER_NAME();
EXECUTE AS CALLER;
SELECT USER_NAME();
REVERT;
SELECT USER_NAME();
END
GO
出力コード:
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/05/2024" }}'
EXECUTE AS OWNER
AS
$$
DECLARE
ProcedureResultSet1 VARCHAR;
ProcedureResultSet2 VARCHAR;
ProcedureResultSet3 VARCHAR;
return_arr ARRAY := array_construct();
BEGIN
ProcedureResultSet1 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet1) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet1);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
EXECUTE AS CALLER;
ProcedureResultSet2 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet2) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet2);
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0080 - CHANGING THE EXECUTION CONTEXT AT RUNTIME IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
REVERT;
ProcedureResultSet3 := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:ProcedureResultSet3) AS
SELECT
CURRENT_USER();
return_arr := array_append(return_arr, :ProcedureResultSet3);
--** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
RETURN return_arr;
END;
$$;
推奨事項¶
コンテキストスイッチなしで動作するようにコードを修正します。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0047¶
この警告は無効になりました。最新のドキュメントについては、 SSC-FDM-TS0019 をご参照ください。
重大性¶
低
説明¶
この警告は、 SQL Serverの文字列形式規則により、 RAISERROR エラーメッセージが異なる可能性があることを示しています。
コード例¶
入力コード:¶
CREATE PROCEDURE RAISERROR_PROCEDURE
AS
BEGIN
RAISERROR ('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1,
123,
7,
7,
'param2');
END
出力コード:¶
CREATE OR REPLACE PROCEDURE RAISERROR_PROCEDURE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0047 - RAISERROR ERROR MESSAGE MAY DIFFER BECAUSE OF THE SQL SERVER STRING FORMAT ***/!!!
SELECT
RAISERROR_UDF('This is a sample error message with the first parameter %d and the second parameter %*.*s',
10,
1, array_construct(
123,
7,
7,
'param2'));
END;
$$;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0016¶
例を明確かつ分かりやすくするため、コードの一部を削除しています。
説明¶
この警告は、 SnowConvert がソースコード内の ODBC Scalar関数を検出したときに表示されます。ODBC Scalar関数をSnowflakeのユーザー定義関数に変換することはできません。
コード例¶
入力コード:¶
SELECT {fn CURRENT_DATE_UDF()};
出力コード:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'CURRENT_DATE_UDF' NODE ***/!!!
CURRENT_DATE_UDF() !!!RESOLVE EWI!!! /*** SSC-EWI-TS0016 - USER DEFINED FUNCTIONS ARE NOT SUPPORTED IN ODBC SCALAR FUNCTION. ***/!!!;
関連 EWI¶
SSC-EWI-0073: 機能等価性の確認が必要です。
推奨事項¶
これは情報提供のみを目的としています。アクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0036¶
重大性¶
中
例を明確かつ簡潔にするため、コードの一部を省略しています。
説明¶
この警告は、コードにローカルカーソル以外のカーソルタイプが含まれている場合に表示されます。Snowflake Scriptingは現在ローカルカーソルのみをサポートしているため、すべてのカーソルタイプは翻訳時に自動的にローカルカーソルに変換されます。
コード例¶
入力コード:¶
CREATE OR ALTER PROCEDURE globalCursorTest
AS
BEGIN
-- Should be marked with SSC-EWI-TS0036
DECLARE MyCursor CURSOR GLOBAL STATIC READ_ONLY
FOR
SELECT *
FROM exampleTable;
-- Should not be marked
DECLARE MyCursor2 CURSOR LOCAL STATIC READ_ONLY
FOR
SELECT testCol
FROM myTable;
RETURN 'DONE';
END;
CREATE OR REPLACE PROCEDURE globalCursorTest ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- Should be marked with SSC-EWI-TS0036
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0036 - SNOWFLAKE SCRIPTING ONLY SUPPORTS LOCAL CURSORS ***/!!!
MyCursor CURSOR
FOR
SELECT
*
FROM
exampleTable;
-- Should not be marked
MyCursor2 CURSOR
FOR
SELECT
testCol
FROM
myTable;
BEGIN
RETURN 'DONE';
END;
$$;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0067¶
重大性¶
Critical
例を明確かつ簡潔にするため、コード出力の一部を削除しています。
説明¶
この警告は、 OPENXML に無効なパラメーターが含まれている場合、特に指定された XML のパスにアクセスできない場合に表示されます。
この早期警告インジケーター(EWI)を解決するには、パラメーターに完全なノードパスを指定する必要があります。
入力コード:¶
SELECT
*
FROM
OPENXML (@idoc, @path, 1) WITH (
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
出力コード:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0067 - INVALID PARAMETERS IN OPENXML TABLE-VALUED FUNCTION ***/!!!
OPENXML(@idoc, @path, 1);
入力コード(明示的パラメーター)¶
SELECT
*
FROM
OPENXML (@idoc, '/ROOT/Customer', 1) WITH(
CustomerID VARCHAR(10),
ContactName VARCHAR(20)
);
出力コード(明示的パラメーター)¶
SELECT
Left(value:Customer['@CustomerID'], '10') AS 'CustomerID',
Left(value:Customer['@ContactName'], '20') AS 'ContactName'
FROM
OPENXML_UDF($idoc, ':ROOT:Customer');
推奨事項¶
コードのパラメーターとしてパスを直接渡せるかどうかを確認します。
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0043¶
重大性¶
中
例を明確かつ簡潔にするため、コード出力の一部を削除しています。
説明¶
この警告は、 WITH XMLNAMESPACES 句に対して表示されます。この句はSnowflake SQL では使用できません。
コード例¶
入力コード:¶
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Production.Product
WHERE ProductID = 316
FOR XML RAW, ELEMENTS XSINIL
出力コード:¶
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
XMLNAMESPACES ('uri' as VARIANT /*** SSC-FDM-TS0015 - DATA TYPE NS1 IS NOT SUPPORTED IN SNOWFLAKE ***/)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Production.Product
WHERE
ProductID = 316
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW, ELEMENTS XSINIL;
推奨事項¶
ユーザー定義関数(UDFs)を使用して、ソースコードの関数を再現することを検討してください。以下に、元の動作を再現するのに役立つ UDFs の例を示します。
CREATE TABLE PRODUCT (ProductID INTEGER, Name VarChar(20), Color VarChar(20));
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT(PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
WITH XMLNAMESPACES ('uri' as ns1)
SELECT ProductID as 'ns1:ProductID',
Name as 'ns1:Name',
Color as 'ns1:Color'
FROM Product
FOR XML RAW
CREATE OR REPLACE TABLE PRODUCT (
ProductID INTEGER,
Name VARCHAR(20),
Color VARCHAR(20))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "07/12/2024" }}'
;
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(1,'UMBRELLA','RED');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(2,'SHORTS','BLUE');
INSERT INTO PRODUCT (PRODUCTID, NAME, COLOR) VALUES(3,'BALL','YELLOW');
--** SSC-PRF-TS0001 - PERFORMANCE WARNING - RECURSION FOR CTE NOT CHECKED. MIGHT REQUIRE RECURSIVE KEYWORD **
WITH
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0043 - WITH XMLNAMESPACES IS NOT SUPPORTED IN SNOWFLAKE ***/!!! XMLNAMESPACES ('uri' as ns1)
SELECT
ProductID AS "ns1:ProductID",
Name AS "ns1:Name",
Color AS "ns1:Color"
FROM
Product
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0044 - FOR XML RAW CLAUSE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
FOR XML RAW;
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
関連 EWI¶
SSC-PRF-TS0001: パフォーマンスに関する警告 - このコードには、再帰的である可能性のある共通テーブル式(CTE)が含まれています。「RECURSIVE」キーワードを追加する必要があるかどうかを確認します。
SSC-EWI-TS0044: 「FOR XML」句はSnowflakeではサポートされていないため、使用できません。
SSC-FDM-TS0015: SnowflakeのRegexp_Substr関数は、 POSIX 正規表現でのみ動作することに注意してください。
SSC-EWI-TS0077¶
重大性¶
低
説明¶
このエラーは、Snowflakeがサポートしていない照合順序句を使用した場合に表示されます。
コード例¶
入力コード:¶
SELECT 'a' COLLATE Albanian_BIN;
SELECT 'a' COLLATE Albanian_CI_AI;
CREATE TABLE ExampleTable (
ID INT,
Name VARCHAR(50) COLLATE collateName
);
出力コード:¶
SELECT 'a'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_BIN NOT SUPPORTED ***/!!!
-- COLLATE Albanian_BIN
;
SELECT 'a'
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION Albanian_CI_AI NOT SUPPORTED ***/!!!
-- COLLATE Albanian_CI_AI
;
CREATE OR REPLACE TABLE ExampleTable (
ID INT,
Name VARCHAR(50)
-- !!!RESOLVE EWI!!! /*** SSC-EWI-TS0077 - COLLATION collateName NOT SUPPORTED ***/!!!
-- COLLATE collateName
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
推奨事項¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TS0026¶
重大性¶
低
説明¶
この警告は、 DELETE FROM ステートメントを含む共通テーブル式(CTE)が CREATE OR REPLACE TABLE ステートメントに変換された場合に表示されます。
コード例¶
入力コード:¶
WITH Duplicated AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS RN
FROM WithQueryTest
)
DELETE FROM Duplicated
WHERE Duplicated.RN > 1
出力コード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TS0026 - WITH DELETE QUERY TURNED TO CREATE TABLE ***/!!!
CREATE OR REPLACE TABLE WithQueryTest AS
SELECT
*
FROM
WithQueryTest
QUALIFY
ROW_NUMBER()
OVER (PARTITION BY
ID
ORDER BY ID) = 1;
推奨事項¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください