SnowConvert AI - テラデータの問題¶
SSC-EWI-TD0001¶
再帰的転送エイリアスのエラー。
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
低
説明¶
この EWI は、 SnowConvert AI がエイリアス式内の再帰を検出するたびに表示されるため、Snowflake環境内でエイリアスを正しく機能させるために必要な転送エイリアスの変換を実行できません。
再帰的エイリアスは、エイリアス式が別のエイリアスを含み、2番目のエイリアス式が最初のエイリアスを含む場合に発生します。再帰は将来的に「推移的」に起こる可能性があるので、例のような些細なものではないかもしれません。
コード例¶
注意: 再帰的エイリアスはSnowflakeではサポートされていませんが、いくつかの単純なインスタンスはサポートされています。
注釈
再帰的エイリアスはSnowflakeではサポートされていませんが、いくつかの単純なインスタンスはサポートされていることに注意してください。 次の例をご参照ください。
次のコード例は、移行後のSnowflakeで動作します。
Teradata:¶
SELECT
COL1 AS COL2,
COL2 AS COL1
FROM
TABLE_EXAMPLE;
Snowflake Scripting:¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
COL1 AS COL2,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'COL1' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
COL2 AS COL1
FROM
TABLE_EXAMPLE;
しかし、以下のコード例は機能しません。
Teradata:¶
SELECT
A + B as C,
COL2 + C AS A,
COL3 AS B
FROM
TABLE_EXAMPLE;
Snowflake Scripting:¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0001 - 'A' HAS RECURSIVE REFERENCES. FORWARD ALIAS CONVERSION COULD NOT BE COMPLETED ***/!!!
COL2 + C AS A,
COL3 AS B,
A + B as C
FROM
TABLE_EXAMPLE;
ベストプラクティス¶
コードを確認して、再帰的転送エイリアスが存在しないことを確認してください。EWI には再帰的参照を持つエイリアスの最初のインスタンスの名前が表示されますが、それがコード内で再帰的参照を持つ唯一のインスタンスであることを意味するわけではありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0002¶
インターバル型はサポート対象外です。
この EWI は、 SnowConvert AI 28.1.100リリース以降、非推奨となっています。
Severity
高
Description
SQL ステートメントの列のセレクタが INTERVAL 型の場合、 EWI が追加され、Stub関数も作成されます。これは、 SnowFlake ではサポート対象外の型であるため、 SnowConvert AI が終了した後の保留中の作業を意味します。
Example Code
Teradata:
SELECT
CAST('07:00' AS INTERVAL HOUR(2) TO MINUTE),
CAST('08:00' AS INTERVAL HOUR(2) TO MINUTE) As Test_Interval;
Snowflake Scripting:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
INTERVAL '07 hour, 00 min',
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0002 - INTERVAL TYPE NOT SUPPORTED IN SNOWFLAKE ***/!!!
INTERVAL '08 hour, 00 min' As Test_Interval;
Best Practices
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0003
照合はトリム関数ではサポート対象外です。保持するには関数の結果に元の照合を追加します。
Severity
低
Description
Snowflakeでは、トリム関数( LTRIM 、 RTRIM 、 または TRIM )は、トリムする文字が空文字または空白文字でない限り、照合をサポートしません。
SnowConvert AI が LTRIM 、 RTRIM または TRIM LEADING 、 TRAILING、 もしくはその両方を上記のシナリオで検出した場合、 COLLATE 関数が自動的に生成され、入力列の照合なしにコピーを作成します。この EWI はトリム関数の前に列の照合が削除されたことを示すために生成されます。つまり、トリム関数の結果は照合を持たないことになり、その結果を使用するさらなる比較の結果が変わる可能性があります。
Example Code
Teradata:
CREATE TABLE collateTable (
col1 VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC
);
SELECT
TRIM(BOTH '0' FROM col1),
TRIM(LEADING ' ' FROM col1),
TRIM(TRAILING '0' FROM col1),
LTRIM(col1, '0'),
RTRIM(col1)
FROM
collateTable;
Snowflake Scripting:
CREATE OR REPLACE TABLE collateTable (
col1 VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
SELECT
TRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
LTRIM(col1, ' '),
RTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
LTRIM(COLLATE(col1, ''), '0') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0003 - COLLATION NOT SUPPORTED IN TRIM FUNCTIONS, ADD ORIGINAL COLLATION TO FUNCTION RESULT TO PRESERVE IT ***/!!!,
RTRIM(col1)
FROM
collateTable;
Best Practices
比較中に関数の差異を避けるために、
TRIM関数の結果文字列に列の元の照合を追加してください。これは、COLLATE関数を使用し、2番目の引数として元の列の照合を指定することで達成できます。この引数は、照合の値を持つリテラル文字列でなければなりません。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0004
Continue handlerで SQL 例外はサポート対象外です。
Severity
低
Description
Snowflakeプロシージャでは、Teradata Continue Handlerに相当する変換はありません。サポートされているExceptionコードによっては、 SnowConvert AI はこの動作をエミュレートする処理を行います。この EWI は、サポートされていない例外コードを持つContinue Handlerステートメントに追加されます。
Example Code
Teradata:
REPLACE PROCEDURE PURGING_ADD_TABLE
(
IN inDatabaseName VARCHAR(30),
IN inTableName VARCHAR(30)
)
BEGIN
DECLARE vCHAR_SQLSTATE CHAR(5);
DECLARE vSUCCESS CHAR(5);
DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
BEGIN
SET vCHAR_SQLSTATE = SQLCODE;
SET vSUCCESS = SQLCODE;
END;
SELECT 1;
END;
Snowflake Scripting:
CREATE OR REPLACE PROCEDURE PURGING_ADD_TABLE
(INDATABASENAME VARCHAR(30), INTABLENAME VARCHAR(30)
)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
vCHAR_SQLSTATE CHAR(5);
vSUCCESS CHAR(5);
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0004 - NOT SUPPORTED SQL EXCEPTION ON CONTINUE HANDLER ***/!!!
DECLARE CONTINUE HANDLER FOR SQLSTATE 'UNSUPPORTED'
BEGIN
vCHAR_SQLSTATE := SQLCODE;
vSUCCESS := SQLCODE;
END;
SELECT
1;
END;
$$;
Best Practices
例外コードをスローする可能性のあるステートメントをチェックし、 Continue Handler翻訳参照 で見られるように類似のコードブロックでそれらをカプセル化します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0005
ステートメントは変換されましたが、その機能はまだ実装されていません。
Severity
Critical
Description
ステートメントは認識され、変換されましたが、まだ実装が完了していないため、変換されたコードは期待される機能を持ちません。
この警告は、スクリプトがこのステートメントを使用する場合、スクリプトは期待される同じ機能を持たないことをユーザーに認識させるために追加されます。
ソース例
BTEQ 入力コード:
.SET SIDETITLES ON
Python出力コード:
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
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-EWI-TD0005 - THE STATEMENT WAS CONVERTED BUT ITS FUNCTIONALITY IS NOT IMPLEMENTED YET **
Export.side_titles(True)
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Best Practices
詳しくは、 BTEQ からPythonへの翻訳の仕様 をご参照ください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0006
無効なデフォルト値です。
Severity
低
Description
FLOAT データ型の DEFAULT TIME / DEFAULT DATE / DEFAULT CURREN_DATE / DEFAULT DEFAULT CURRENT_TIME / DEFAULT CURRENT_TIMESTAMP 列の仕様は、サポート対象外です。
Example Code
Teradata:
CREATE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME,
COL2 FLOAT DEFAULT DATE,
COL3 FLOAT DEFAULT CURRENT_DATE,
COL4 FLOAT DEFAULT CURRENT_TIME,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP
);
Snowflake Scripting:
CREATE OR REPLACE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
COL2 FLOAT DEFAULT DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
COL3 FLOAT DEFAULT CURRENT_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_DATE NOT VALID FOR DATA TYPE ***/!!!,
COL4 FLOAT DEFAULT CURRENT_TIME !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIME NOT VALID FOR DATA TYPE ***/!!!,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP !!!RESOLVE EWI!!! /*** SSC-EWI-TD0006 - DEFAULT CURRENT_TIMESTAMP NOT VALID FOR DATA TYPE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0007
GROUP BY 句はTeradata Modeの文字列比較でサポート対象外です。
Severity
低
Description
このエラーメッセージは、Teradata SQL クエリをSnowflakeに移行する際に発生する可能性のある問題を示しています。特に、 GROUP BY 句がTeradataモードで文字列比較の感度を処理する方法の違いに関連しています。
Teradataモードでは、 GROUP BY 句の文字列比較はデフォルトで大文字と小文字を区別しません( NOT CASESPECIFIC )が、Snowflakeでは、列が大文字小文字を区別しない COLLATE 句で明示的に定義されていない限り、大文字小文字を区別します。この違いは、Teradataで大文字と小文字を区別しないグループ化に依存しているクエリが、Snowflakeで異なる結果を生成する原因となります。
Example Code
Teradata:
CREATE TABLE employees (
employee_id INTEGER,
first_name VARCHAR(50) NOT CASESPECIFIC,
department VARCHAR(50)
);
INSERT INTO employees VALUES (1, 'John', 'Sales');
INSERT INTO employees VALUES (2, 'JOHN', 'sales');
INSERT INTO employees VALUES (3, 'john', 'SALES');
SELECT first_name, COUNT(*)
FROM employees
GROUP BY first_name;
Snowflake Scripting:
CREATE OR REPLACE TABLE employees (
employee_id INTEGER,
first_name VARCHAR(50),
department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "10/20/2025", "domain": "no-domain-provided", "migrationid": "kwOaAavBVnCx8OhdxEITfg==" }}'
;
INSERT INTO employees
VALUES (1, 'John', 'Sales');
INSERT INTO employees
VALUES (2, 'JOHN', 'sales');
INSERT INTO employees
VALUES (3, 'john', 'SALES');
SELECT
first_name,
COUNT(*)
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
期待される動作の違い
プラットフォーム |
グループ分けの行動 |
結果の行の例 |
|---|---|---|
Teradata Mode |
Groups 'John', 'JOHN', and 'john' together |
|
Snowflake |
Treats 'John', 'JOHN', and 'john' as separate |
|
Best Practices
Teradataモードからの移行時に、文字列の列を含む GROUP BY 句を確認し 、期待されるグループ化の動作を確認します。
注意: GROUP BY 句で RTRIM(UPPER(first_name)) または RTRIM(first_name) のような式を使用して、大文字と小文字を区別しない、またはトリムされたグループ化を行う場合、列が参照されるクエリのすべての部分で同じ式を一貫して適用する必要があります。例:
SELECT RTRIM(UPPER(first_name))
FROM employees
WHERE RTRIM(UPPER(first_name)) = 'JOHN'
GROUP BY RTRIM(UPPER(first_name));
これにより、フィルタリング、選択、グループ化がすべて同じロジックを使うようになり、ミスマッチや予期せぬ結果を避けることができます。
大文字と小文字を区別しない動作が必要な場合は、テーブル作成時に 列を COLLATE で定義します 。:
CREATE TABLE employees ( first_name VARCHAR(50) COLLATE 'en-cs' );
変換中に --UseCollateForCaseSpecification CLI フラグまたは変換設定を有効にして、大文字と小文字の仕様に COLLATE を使用します 。このオプションは、大文字小文字の仕様( CASESPECIFIC や NOT CASESPECIFIC など)が UPPER 関数ではなく COLLATE 関数で処理されるようにします。詳細は、CLI ドキュメント or conversion settingsをご参照ください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0008
文字列を比較する関数はサポート対象外です
Severity
低
Description
現在、Snowflakeでは一部の文字列比較関数に相当するものがありません。
この EWI は、比較タイプが_jaro_、n_gram、LD、LDWS、OSA、DL、hamming、LCS、jaccard、_cosine_および_soundexcode_の場合に追加されます。
Example Code
Teradata:
SELECT * FROM StringSimilarity (
ON (
SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
FROM table_1
) PARTITION BY ANY
USING
ComparisonColumnPairs ('ld(a,b) AS sim_fn')
) AS dt ORDER BY 1;
Snowflake Scripting:
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0008 - FUNCTION FOR COMPARING STRINGS IS NOT SUPPORTED ***/!!! StringSimilarity (
ON (
SELECT CAST(a AS VARCHAR(200)) AS a, CAST(b AS VARCHAR(200)) AS b
FROM table_1
) PARTITION BY ANY
USING
ComparisonColumnPairs ('ld(a,b) AS sim_fn')
) AS dt ORDER BY 1;
Best Practices
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0009
TEMPORAL 列はサポート対象外です。
Severity
低
Description
Teradataは、派生期間列を使用して、列レベルで一時的なテーブルのサポートを提供しています。これらの列はSnowflakeではサポートされていません。
Example Code
Teradata:
CREATE MULTISET TABLE Policy(
Policy_ID INTEGER,
Customer_ID INTEGER,
Policy_Type CHAR(2) NOT NULL,
Policy_Details CHAR(40),
Policy_Start DATE NOT NULL,
Policy_End DATE NOT NULL,
PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
)
PRIMARY INDEX(Policy_ID);
Snowflake Scripting:
CREATE OR REPLACE TABLE Policy (
Policy_ID INTEGER,
Customer_ID INTEGER,
Policy_Type CHAR(2) NOT NULL,
Policy_Details CHAR(40),
Policy_Start DATE NOT NULL,
Policy_End DATE NOT NULL,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0009 - TEMPORAL COLUMN NOT SUPPORTED ***/!!!
PERIOD FOR Validity(Policy_Start,Policy_End) AS VALIDTIME
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0010
UPPERCASE はSnowflakeでサポートされていません。
Severity
低
Description
UPPERCASE 列の属性はSnowflakeではサポートされていません。
Example Code
Teradata:
CREATE TABLE T_2010
(
col1 VARCHAR(1) UPPERCASE
);
Snowflake Scripting:
CREATE OR REPLACE TABLE T_2010 (
col1 VARCHAR(1)
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0010 - UPPERCASE NOT SUPPORTED BY SNOWFLAKE ***/!!!
UPPERCASE
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
UPPERCASE句は、'aaa'としてタイプされた文字が'AAA'として保存されることを示しているので、可能な回避策として、すべての挿入参照にUPPER関数を追加することができます。しかし、 ETL プロセスによる外部データのロードも変更する必要があります。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0012
バイナリはデフォルトをサポートしていません。
Severity
低
Description
この EWI は、 SnowConvert AI が DEFAULT 値の仕様とともに BINARY データ型を検出した時に表示されます。デフォルト値は BINARY 列で許可されていないため、削除されます。
Example Code
Teradata:
CREATE TABLE TableExample
(
ColumnExample BINARY DEFAULT '00000000'XB NOT NULL
)
Snowflake Scripting:
CREATE OR REPLACE TABLE TableExample (
ColumnExample BINARY DEFAULT NOT TO_BINARY('00000000') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0012 - BINARY DOES NOT SUPPORT DEFAULT NOT TO_BINARY('00000000') ***/!!! NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0017
一時的なグローバルテーブルトレース機能はサポートされていません。
Severity
低
Description
この EWI は、 SnowConvert AI が GLOBAL TEMPORARY TRACE オプションを伴うCreate Tableを検出した時に表示されます。TRACE の機能 に関する以下のTeradataドキュメントを確認してください。これはSnowflakeではサポートされていないため、削除されます。
Example Code
Teradata:
CREATE GLOBAL TEMPORARY TRACE TABLE TableExample
(
ColumnExample Number
)
Snowflake Scripting:
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0017 - GLOBAL TEMPORARY TABLE TRACE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE TableExample (
ColumnExample NUMBER(38, 18)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Best Practices
注意:
EVENT TABLEを使用することで、Snowflakeのトレース機能の一部を複製できるかもしれません。ログおよびトレース に関する以下のSnowflakeドキュメントを確認してください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0020
Regexp_Substr関数は POSIX 正規表現のみをサポートしています。
注釈
この EWI は非推奨です。 SSC-EWI-0009 ドキュメントを参照してください。
重大性¶
低
説明¶
現在、Snowflakeでは POSIX 基本正規表現構文を超える拡張正規表現はサポートされていません。
この EWI は、 REGEX_SUBSTR 、 REGEX_REPLACE 、 または REGEX_INSTR への関数呼び出しが SnowFlake に変換されるたびに追加され、サポートされていない可能性のある正規表現についてユーザーに警告します。サポートされていない 関数には、先読み、後読み、非キャプチャグループがあります。
コード例¶
Teradata:¶
SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
ベストプラクティス¶
それぞれのケースで使われている正規表現をチェックし、手作業が必要かどうかを判断します。SnowFlake の拡張正規表現サポートとその代替についての詳細は、[こちら](https://community.snowflake.com/s/question/0D50Z00007ENLKsSAP/expanded-support-for-regular-expressions-regex)を参照してください 。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0023¶
SELECT/SET INTO VARIABLE 内の ACTIVITY_COUNT は手動で修正する必要があります
重大性¶
低
説明¶
ACTIVITY_COUNT ステータス変数は、組み込み SQL またはストアドプロシージャアプリケーションのSQL DML ステートメントによって影響を受ける行の数を返します。詳しくは、 こちら をご参照ください。
その翻訳仕様で説明されているように、以下によって ACTIVITY_COUNT の動作をエミュレートする回避策があります。
SELECT $1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
SELECT/SET INTO VARIABLE ステートメントで ACTIVITY_COUNT を使用する場合、上記の回避策で単純に置き換えることはできません。
コード例¶
Teradata¶
REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
BEGIN
DECLARE rowCount INT;
DECLARE message VARCHAR(100);
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT ACTIVITY_COUNT INTO rowCount;
SET message = 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (message, rowCount);
END;
Snowflake¶
CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
rowCount INT;
message VARCHAR(100);
BEGIN
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT
ACTIVITY_COUNT !!!RESOLVE EWI!!! /*** SSC-EWI-TD0023 - ACTIVITY_COUNT INSIDE SELECT/SET INTO VARIABLE REQUIRES MANUAL FIX ***/!!! INTO
:rowCount;
message := 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (:message, :rowCount);
END;
$$;
マニュアル修正¶
上記で示した回避策の一部を使えば、このように挿入/更新/削除された行数を取得することができます。
CREATE OR REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/15/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
rowCount INT;
message VARCHAR(100);
BEGIN
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT $1 INTO :rowCount FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
message := 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (:message, :rowCount);
END;
$$;
完全なクエリを使用する代わりに、Snowflakeの SELECT INTO VARIABLE 構文に手動で適応させる必要があります。
さらに、RESULT_SCAN(LAST_QUERY_ID()) が正しくない結果を提供している場合は、 LAST_QUERY_ID の使用の考えられる制限の処理方法について、 SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) をご参照ください。
ベストプラクティス¶
提案された回避策を手動で適応させます。
LAST_QUERY_IDの使用の考えられる制限の処理方法について、 SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) をご参照ください。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0024¶
集約関数のため、Abortステートメントはサポートされていません。
重大性¶
低
説明¶
この EWI は、 AGGREGATE 関数がストアドプロシージャ内のABORT ステートメントの一部である場合に表示されます。このステートメントはコメントアウトされます。
コード例¶
Teradata:¶
REPLACE PROCEDURE ABORT_SAMPLE()
BEGIN
ABORT WHERE SUM(TABLE1.COL1) < 2;
END;
Snowflake Scripting:¶
CREATE OR REPLACE PROCEDURE ABORT_SAMPLE()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0024 - ABORT STATEMENT IS NOT SUPPORTED DUE TO AN AGGREGATE FUNCTION ***/!!!
ABORT WHERE SUM(TABLE1.COL1) < 2;
END;
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0025¶
出力形式がサポートされていません。
重大性¶
低
説明¶
この EWI は、CAST 関数がSnowflakeスクリプトでサポートされていない出力形式を指定した場合に表示されます。
コード例¶
Teradata:¶
CREATE TABLE SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR
);
REPLACE VIEW SAMPLE_VIEW
AS
SELECT
CAST(VARCHAR_TYPE AS FLOAT FORMAT 'ZZZ.ZZZZZ'),
CAST('01:02.030405' AS TIME(1) WITH TIME ZONE FORMAT 'MI:SS.S(6)')
FROM SAMPLE_TABLE;
Snowflake Scripting:¶
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
VARCHAR_TYPE VARCHAR
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "03/03/2025", "domain": "test" }}'
;
CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "03/03/2025", "domain": "test" }}'
AS
SELECT
TO_NUMBER(VARCHAR_TYPE, '999.00000', 38, 10) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'ZZZ.ZZZZZ' NOT SUPPORTED. ***/!!!,
TO_TIME('01:02.030405', 'MI:SS.FF6') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'MI:SS.S(6)' NOT SUPPORTED. ***/!!!
FROM
SAMPLE_TABLE;
ベストプラクティス¶
出力コードが元のコードと機能的に等しいかどうかをチェックします。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0027¶
SnowflakeはTeradataの組み込みの時間ディメンション列オプションをサポートしていません
重大性¶
低
説明¶
EWI が生成されるのは、Snowflakeが VALIDTIME や TRANSACTIONTIME のようなTeradataの組み込みの時間ディメンジョン属性をサポートしていないためです。
コード例¶
Teradataの入力:¶
CREATE MULTISET TABLE SAMPLE_TABLE
(
COL1 PERIOD(TIMESTAMP(6) WITH TIME ZONE) NOT NULL AS TRANSACTIONTIME
);
Snowflakeの出力:¶
CREATE OR REPLACE TABLE SAMPLE_TABLE (
COL1 VARCHAR(68) NOT NULL !!!RESOLVE EWI!!! /*** SSC-EWI-TD0027 - SNOWFLAKE DOES NOT SUPPORT 'TRANSACTIONTIME' COLUMN OPTION ***/!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
ベストプラクティス¶
CURRENT_TIMESTAMP のようなデフォルト値を持つ TIMESTAMP 列を手動で作成します。
テーブルストリームを利用することで、テーブルに対するデータ操作の変更と、各変更に関するメタデータを記録することができます。(ガイド)
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0029¶
キューテーブル機能はサポートされていません。
重大性¶
低
説明¶
この警告は、 QUEUE 属性を持つ TABLE が移行されたときに表示されます。Snowflakeでは QUEUE キーワードはサポートされていないため、削除されます。
コード例¶
入力:¶
CREATE MULTISET TABLE SAMPLE_TABLE,
QUEUE,
NO FALLBACK
(
COL1 INTEGER
);
出力:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0029 - QUEUE TABLE FUNCTIONALITY NOT SUPPORTED ***/!!!
CREATE OR REPLACE TABLE SAMPLE_TABLE
(
COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0031¶
Teradataではchar型は固定長であるため、結果が異なる場合があります。
重大性¶
低
説明¶
Teradata CHAR データ型は固定長であるため、 LIKE などの一部の関数は、列に挿入された単語ではなく、完全な列を一致させようとし、結果として誤った一致が発生します。しかし、Snowflakeの CHAR 型は可変サイズであるため、 LIKE 関数は常に挿入された値との一致を試みます。次のコードを例として考えてみましょう。
コード例¶
入力:¶
CREATE TABLE table1
(
col1 VARCHAR(36),
col2 CHAR(36)
);
INSERT INTO table1 VALUES ('Gabriel', 'Gabriel');
INSERT INTO table1 VALUES ('Barnum', 'Barnum');
INSERT INTO table1 VALUES ('Sergio', 'Sergio');
SELECT col1 FROM table1 where col1 LIKE 'Barnum';
-- The result is a single row with 'Barnum'
SELECT col2 FROM table1 where col2 LIKE 'Barnum';
-- It does not return any row
出力:¶
CREATE OR REPLACE TABLE table1
(
col1 VARCHAR(36),
col2 CHAR(36)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
INSERT INTO table1
VALUES ('Gabriel', 'Gabriel');
INSERT INTO table1
VALUES ('Barnum', 'Barnum');
INSERT INTO table1
VALUES ('Sergio', 'Sergio');
SELECT
col1 FROM
table1
where col1 ILIKE 'Barnum';
-- The result is a single row with 'Barnum'
SELECT
col2 FROM
table1
where
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0031 - THE RESULT OF LIKE MAY DIFFER DUE TO CHAR TYPE HAVING A FIXED LENGTH IN TERADATA ***/!!! col2 ILIKE 'Barnum';
-- It does not return any row
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0034¶
マルチステートメント SQL はサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
低
説明¶
マルチステートメント SQL の実行はサポートされていません。リクエストはトランザクションとして処理されました。
注釈
'--PLTargetLanguage Javascript' のように、次の EWI は、 PL Target LanguageフラグがJavascriptに設定されている場合にのみ生成されます。
コード例¶
入力:¶
-- Additional Params: --PLTargetLanguage Javascript
REPLACE PROCEDURE proc1()
BEGIN
BEGIN REQUEST;
SELECT* FROM TABLE1;
END REQUEST;
END;
出力:¶
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert AI Helpers Code section is omitted.
var TRANSACTION_HANDLER = function (error) {
throw error;
};
// ** SSC-EWI-TD0034 - MULTISTATEMENT SQL EXECUTION NOT SUPPORTED, REQUEST HANDLED AS TRANSACTION **
try {
EXEC(`BEGIN`);
EXEC(`SELECT
*
FROM
TABLE1`,[],undefined,TRANSACTION_HANDLER);
EXEC(`COMMIT`);
} catch(error) {
EXEC(`ROLLBACK`);
}
$$;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0039¶
入力形式がサポートされていません。
重大性¶
中
説明¶
指定された入力形式はSnowflakeではサポートされていません。
コード例¶
入力:¶
SELECT
CAST('02/032/25' AS DATE FORMAT 'MM/DDD/YY'),
CAST('02/032/25' AS DATE FORMAT 'MM/D3/YY'),
CAST('03-Thursday-2025' AS DATE FORMAT 'DD-EEEE-YYYY'),
CAST('03-Thursday-2025' AS DATE FORMAT 'DD-E4-YYYY');
出力:¶
SELECT
TO_DATE('02/032/25', 'MM/DDD/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/DDD/YY' NOT SUPPORTED ***/!!!,
TO_DATE('02/032/25', 'MM/D3/YY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'MM/D3/YY' NOT SUPPORTED ***/!!!,
TO_DATE('03-Thursday-2025', 'DD-EEEE-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-EEEE-YYYY' NOT SUPPORTED ***/!!!,
TO_DATE('03-Thursday-2025', 'DD-E4-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DD-E4-YYYY' NOT SUPPORTED ***/!!!;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0040¶
表の形式はサポートされていません。
重大性¶
低
説明¶
指定された形式はサポートされていません。
コード例¶
入力:¶
CREATE TABLE T_2040
(
C1 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(50)',
C2 VARCHAR(255) CHARACTER SET LATIN NOT CASESPECIFIC FORMAT 'X(75)'
);
出力:¶
CREATE OR REPLACE TABLE T_2040
(
C1 VARCHAR(255) FORMAT 'X(50)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!,
C2 VARCHAR(255) FORMAT 'X(75)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
SSC-EWI-TD0041¶
整数になるように、Trunc関数が追加されました。
重大性¶
低
説明¶
TeradataをSnowflakeに移行する際、数値変換の処理方法が異なる場合があります。Teradataでは、 INTEGER に値をキャストすると、元の値が浮動小数点数や数値の文字列表現であっても、暗黙のうちに小数点以下が切り捨てられます。しかし、Snowflakeでは、整数でない数値や文字列を直接 INTEGER にキャストすると、値がすでに整数でない場合にはエラーが発生したり、予期しない結果になることがあります。
互換性を確保するため、 INTEGER にキャストする前に TRUNC() 関数が適用されます。これは小数の部分を取り除き、整数への安全な変換を可能にします。しかし、ソース値が数値でなかったり、非数値文字列の場合、エラーが発生し、手作業が必要になることがあります。たとえば、 SnowConvert AI が参照先が見つからないために列の型を判断できない場合、手動で変換を調整する必要があるかもしれません。
コード例¶
入力:¶
SELECT
cast(date_column as integer);
出力:¶
SELECT
cast(TRUNC(date_column) as integer) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0041 - TRUNC FUNCTION WAS ADDED TO ENSURE INTEGER. MAY NEED CHANGES IF NOT NUMERIC OR STRING. ***/!!!;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0046¶
組み込みの参照はSnowflakeではサポートされていません。
重大性¶
中
説明¶
このエラーは、 DBC テーブルへの参照があり、選択された列がSnowflakeで同等でない場合に表示されます。
コード例¶
入力:¶
CREATE VIEW SAMPLE_VIEW
AS
SELECT PROTECTIONTYPE FROM DBC.DATABASES;
出力:¶
CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "08/14/2024" }}'
AS
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0046 - BUILT-IN REFERENCE TO PROTECTIONTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
PROTECTIONTYPE FROM
INFORMATION_SCHEMA.DATABASES;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0049¶
TPT-ステートメントが処理されません。
重大性¶
高
説明¶
TPT の DML ステートメントが、ツールで処理および変換できませんでした。これは、スクリプト変数との連結を使用したり、 DML ステートメント内で引用符をエスケープするなどの理由で発生する可能性があります。
コード例¶
入力コード:¶
-- Script1.tpt
DEFINE JOB load_job
DESCRIPTION 'LOAD TABLE FROM A FILE'
(
DEFINE SCHEMA schema_name
DESCRIPTION 'define SCHEMA'
(
var1 VARCHAR (50)
);
STEP setup_tables
(
APPLY
('RELEASE MLOAD database_name.table_name;')
TO OPERATOR (DDL_OPERATOR() );
);
);
生成されたコード:¶
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
import argparse
args = None
## Script1.tpt
class load_job:
#'LOAD TABLE FROM A FILE'
jobname = "load_job"
#'define SCHEMA'
schema_name = """(
var1 VARCHAR(50)
);"""
def setup_tables(self):
self.DDL_OPERATOR()
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0049 - THE FOLLOWING STATEMENT COULD NOT BE PROCESSED ***/!!!
#'RELEASE MLOAD database_name.table_name;'
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
_load_job = load_job()
_load_job.setup_tables()
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
ベストプラクティス¶
この問題については、insertステートメントを手動で入力できます。もしくは DML ステートメントがまだサポートされていないため、 SnowConvert AI チームにその特定のケースのサポートを追加するよう依頼してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0051¶
Teradata BYTES 関数の結果は、バイト列のSnowflake LENGTH 関数と異なります。
重大性¶
低
説明¶
Teradataのバイトデータ型は固定長であるため、 BYTES 関数は、より小さなバイト型の値を列に収めるために挿入される 末尾のゼロを常にカウントし 、元々挿入されていた値のサイズの代わりに列のサイズを返します。しかし、Snowflakeのバイナリ型は可変サイズであるため、 LENGTH 関数は常に挿入された値とのサイズを返します。次のコードを例として考えてみましょう。
Teradata:
create table exampleTable(
bytecol byte(10)
);
insert into exampleTable values ('2B'XB);
select bytes(bytecol) from exampleTable;
-- Will return 10, the size of bytecol
Snowflakeで同等のコード:
CREATE OR REPLACE TABLE exampleTable (
bytecol BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
INSERT INTO exampleTable
VALUES (TO_BINARY('2B'));
SELECT
LENGTH(bytecol) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!! from
exampleTable;
-- Will return 10, the size of bytecol
コード例:¶
入力コード:¶
create table sampleTable(
byteColumn byte(10),
varbyteColumn varbyte(15)
);
select bytes(byteColumn), bytes(varbyteColumn) from sampleTable;
生成されたコード:¶
CREATE OR REPLACE TABLE sampleTable (
byteColumn BINARY,
varbyteColumn BINARY(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
SELECT
LENGTH(byteColumn) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0051 - TERADATA BYTES FUNCTION RESULTS DIFFER FROM SNOWFLAKE LENGTH FUNCTION FOR BYTE TYPE COLUMNS ***/!!!,
LENGTH(varbyteColumn) from
sampleTable;
ベストプラクティス¶
BYTES 関数の結果に与えられた使用を分析します。Snowflake LENGTH 関数の動作は当初から望まれていたものであり、変更は必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0052¶
Snowflakeの暗黙的な数値変換はTeradataと異なり、非リテラル文字列では失敗することがあります。
重大性¶
低
説明¶
TeradataもSnowflakeも、数値パラメーターを期待する関数に文字列値を許可するので、これらの文字列は解析されて同等の数値に変換されます。
ただし、2つの言語は有効な数値文字列と考えるものが異なります。Teradataはより寛容で、空文字列や空白のみの文字列、埋め込みダッシュ、仮数や指数に桁がない場合、通貨記号、桁区切り記号、桁の後に数値の記号を指定した場合などを解析できます。たとえば、以下の文字列が有効です。
'1-2-3-4-5' -> 12345'$50' -> 50'5000-' -> -5000'1,569,284.55' -> 1569284.55
Snowflakeは自動オプティミスティック文字列変換 を適用し、文字列が TM9 または TME 形式のいずれかに一致することを想定しているため、前述のほとんどのケースで変換は失敗します。これらの差異を解決するために、 SnowConvert AI は暗黙の数値変換を行う関数に渡された文字列リテラルを処理し、 TM9 または TME に一致する同等の文字列を生成するので、Snowflakeはそれらを解析できます。これはリテラル文字列値にのみ適用され、非リテラル値はSnowflakeによって解析される保証がないことを意味します。
コード例¶
入力コード:¶
create table myTable(
stringCol varchar(30)
);
insert into myTable values (' 1,236,857.45-');
select cos(' 1,236,857.45-');
select cos(stringCol) from myTable;
生成されたコード:¶
CREATE OR REPLACE TABLE myTable (
stringCol varchar(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/14/2025", "domain": "no-domain-provided" }}'
;
INSERT INTO myTable
VALUES (' 1,236,857.45-');
SELECT
COS('-1236857.45');
SELECT
COS(stringCol !!!RESOLVE EWI!!! /*** SSC-EWI-TD0052 - SNOWFLAKE IMPLICIT CONVERSION TO NUMERIC DIFFERS FROM TERADATA AND MAY FAIL FOR NON-LITERAL STRING VALUES ***/!!!)
from
myTable;
ベストプラクティス¶
ユーザーによる追加のアクションは必要ありません。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0053¶
Snowflakeはperiodデータ型をサポートしておらず、すべてのperiodはvarcharとして処理されます。
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
この EWI は非推奨です。 SSC-FDM-TD0036 ドキュメントをご参照ください。
生成されるvarchar表現の精度¶
PERIOD_UDF は、Snowflakeで指定されたタイムスタンプと時間のデフォルト形式を使用してperiodのvarchar表現を生成します。つまり、タイムスタンプは3桁の精度を持ち、時刻変数は0の精度を持つことを意味します。このため、結果の精度が予想よりも高くなったり低くなったりすることがあります。結果の文字列に含まれる精度の桁数を変更するには2つの方法があります。
PERIOD_UDF の3種類のパラメーターバージョンを使用します。この関数のオーバーロードは
PRECISIONDIGITSパラメーターを使用し、0から9までの整数で結果に含まれる時間の小数部の桁数を制御します。Snowflakeが最大9桁の精度をサポートしていても、Teradataでは最大6桁であることに注意してください。例:
呼び出し |
結果 |
|---|---|
|
|
|
|
|
|
セッションパラメーター
TIMESTAMP_NTZ_OUTPUT_FORMATとTIME_OUTPUT_FORMATを次のように変更します。コマンドALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = <format>およびALTER SESSION SET TIME_OUTPUT_FORMAT = <format>を使用して、現在のセッションにSnowflakeがデフォルトで使用する形式を変更できます。それらを変更して、現在のセッションについて PERIOD_UDF の今後の実行の結果に、望ましい精度の桁数の変更が含まれるようにします。
コード例¶
入力コード:¶
create table vacations (
employeeName varchar(50),
duration period(date)
);
insert into vacations values ('Richard', period(date '2021-05-15', date '2021-06-15'));
select end(duration) from vacations;
生成されたコード:¶
CREATE OR REPLACE TABLE vacations (
employeeName varchar(50),
duration VARCHAR(24) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
INSERT INTO vacations
VALUES ('Richard', PUBLIC.PERIOD_UDF(date '2021-05-15', date '2021-06-15') !!!RESOLVE EWI!!! /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/);
SELECT
PUBLIC.PERIOD_END_UDF(duration) /*** SSC-FDM-TD0036 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/ from
vacations;
ベストプラクティス¶
PERIODとその関連する関数の動作はvarcharを使用してエミュレートされるため、その正しさを保証するために得られた結果を確認することをお勧めします。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0055¶
Snowflakeがサポートする TO_CHAR の形式はTeradataと異なるため、失敗したり動作が異なったりする場合があります。
注釈
この EWI は非推奨です。 SSC-FDM-TD0029 ドキュメントをご参照ください。
セッションパラメーターに依存する形式要素¶
Teradata形式要素の中には、セッションパラメーターの値に依存するSnowflake関数にマッピングされるものがあります。結果の機能的な差異を避けるために、これらのセッションパラメーターをTeradataと同じ値に設定する必要があります。この種の関数にマッピングされる形式要素は以下の通りです。
D :
DAYOFWEEK関数にマップされます。この関数の結果はWEEK_STARTセッションパラメーターに依存します。デフォルトでは、Teradataは日曜日を週の初めとみなしますが、Snowflakeでは月曜日を週の初日とみなします。WW :
WEEK関数にマップされます。この関数はセッションパラメーターWEEK_OF_YEAR_POLICYに依存します。このパラメーターはデフォルトで ISO 標準(1年の最初の週は、1月の少なくとも4日を含む最初の週)を使用するように設定されていますが、Teradataでは1月1日を最初の週の開始とみなすように設定されています。
セッションパラメーターを変更するには、 ALTER SESSION SET parameter_name = value を使用します。セッションパラメーターの詳細については、 このページ をご参照ください。
TO_CHAR の単一パラメーターバージョン。¶
TO_CHAR(Datetime) の単一パラメーターバージョンは、セッションパラメーター TIMESTAMP_LTZ_OUTPUT_FORMAT 、 TIMESTAMP_NTZ_OUTPUT_FORMAT 、 TIMESTAMP_TZ_OUTPUT_FORMAT 、 TIME_OUTPUT_FORMAT で指定されたデフォルト形式を使用します。動作の違いを避けるために、Teradataで使用されているものと同じ値に設定してください。
TO_CHAR(Numeric) の場合、Snowflakeは TM9 または TME 形式のいずれかを使用してvarchar表現を生成し、数値のコンパクトな表現を取得します。Teradataは、数値のコンパクトな表現も生成するため、アクションは不要です。
コード例¶
入力コード:¶
select to_char(date '2008-09-13', 'DD/RM/YYYY');
select to_char(date '2010-10-20', 'DS');
select to_char(1255.495, 'SC9999.9999', 'nls_iso_currency = ''EUR''');
select to_char(45620);
生成されたコード:¶
SELECT
TO_CHAR(date '2008-09-13', 'DD/') || PUBLIC.ROMAN_NUMERALS_MONTH_UDF(date '2008-09-13') || TO_CHAR(date '2008-09-13', '/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
TO_CHAR(date '2010-10-20', 'MM/DD/YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
PUBLIC.INSERT_CURRENCY_UDF(TO_CHAR(1255.495, 'S9999.0000'), 2, 'EUR') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
SELECT
TO_CHAR(45620) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0055 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/!!!;
ベストプラクティス¶
FF を使用する場合は、Teradataで使用しているものと同じ精度の DateTime 型を使用するか、形式要素に精度を追加して、異なる動作を避けるようにしてください。
タイムゾーン関連の形式要素を使用する場合は、異なる動作を避けるために
TIMESTAMP_TZ型の最初のパラメーターを使用します。また、SnowflakeではTIME型にタイムゾーン情報を持たせることはできないことを覚えておいてください。異なる動作を避けるために、必要なセッションパラメーターをTeradataのデフォルト値で設定します。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0057¶
NEW JSON のバイナリデータはサポートされていません。
重大性¶
低
説明¶
NEW JSON 関数は、文字列またはバイナリ形式で表現された JSON データを受け入れます。データがバイナリ表現である場合、この関数は変換されません。このバイナリ形式は、 JSON オブジェクトに関するメタデータを解釈できないため、Snowflakeでは有効ではないからです。この詳細については、Teradata NEW JSON ドキュメント をご参照ください。
コード例¶
入力コード¶
SELECT NEW JSON ('160000000268656C6C6F0006000000776F726C640000'xb, BSON);
生成されたコード¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0057 - NEW JSON FUNCTION WITH BINARY DATA IS NOT SUPPORTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'BSON' NOT SUPPORTED ***/!!!
NEW JSON (TO_BINARY('160000000268656C6C6F0006000000776F726C640000'), BSON);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0059¶
Snowflakeユーザーのデフォルトタイムゾーンは、Teradataの値と一致させるための設定が必要な場合があります。
重大性¶
低
説明¶
Teradataと同じように、ユーザーにデフォルトのタイムゾーン値を設定すると、セッションに新しい値が定義されるまで、そのタイムゾーンを使用してセッションが開始されます。
この警告は、Teradataでユーザーに定義されたものと同じタイムゾーンをSnowflakeユーザーにも設定する必要があることを思い出させるために生成されます。これを行うには、Snowflakeで次のクエリを使用してください。 ALTER SESSION SET TIMEZONE = 'equivalent_timezone' Snowflakeが受け入れるのは IANA タイムゾーンデータベース 標準タイムゾーンのみであることを覚えておいてください。
コード例¶
入力コード:¶
SET TIME ZONE USER;
生成されたコード:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0059 - SNOWFLAKE USER DEFAULT TIME ZONE MAY REQUIRE CONFIGURATION TO MATCH TERADATA VALUE ***/!!!
ALTER SESSION UNSET TIMEZONE;
ベストプラクティス¶
ユーザーのデフォルトタイムゾーンを、Teradataユーザーに設定したタイムゾーンと同じタイムゾーンに設定することを忘れないでください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0060¶
JSON_TABLE は変換されず、セマンティック情報から列の名前を取得できませんでした
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
低
説明¶
JSON_TABLE 関数は SnowConvert AI で変換できますが、この変換には JSON_TABLE ON サブクエリで選択されている列の名前を知っている必要があります。
このメッセージは、列の名前がサブクエリに明示的に記述されておらず(たとえば SELECT * が使用されている)、参照されているテーブルのセマンティック情報が見つからなかった、つまり列の名前を抽出できなかったことを警告するために生成されます。
JSON データをテーブルにロードする方法については、こちらの ページ をご参照ください。
コード例¶
入力コード:¶
CREATE TABLE demo.Train (
firstCol INT,
jsonCol JSON(400),
thirdCol VARCHAR(30)
);
SELECT * FROM JSON_TABLE
(ON (SELECT T.*
FROM demo.Train T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
SELECT * FROM JSON_TABLE
(ON (SELECT T.*
FROM demo.missingTable T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
生成されたコード:¶
CREATE OR REPLACE TABLE demo.Train (
firstCol INT,
jsonCol VARIANT,
thirdCol VARCHAR(30)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "12/16/2024", "domain": "test" }}'
;
SELECT
* FROM
(
SELECT
firstCol,
rowexpr.value:name :: CHAR(20) AS Column_0,
rowexpr.value:type :: VARCHAR(20) AS Column_1,
thirdCol
FROM
demo.Train T,
TABLE(FLATTEN(INPUT => jsonCol:schools)) rowexpr
) JT;
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0060 - JSON_TABLE NOT TRANSFORMED, COLUMN NAMES COULD NOT BE RETRIEVED FROM SEMANTIC INFORMATION ***/!!! JSON_TABLE
(ON (
SELECT
T.*
FROM
demo.missingTable T)
USING rowexpr('$.schools[*]')
colexpr('[ {"jsonpath" : "$.name",
"type" : "CHAR(20)"},
{"jsonpath" : "$.type",
"type" : "VARCHAR(20)"}]')
)
AS JT;
ベストプラクティス¶
SnowConvert AI に提供されたコードが完全であることを確認してください。テーブル定義を提供していない場合は、テーブル定義がある状態でコードを再実行してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0061¶
TD_UNPIVOT 変換には、見つからなかった列の情報が必要です。結果に列がありません
重大性¶
低
説明¶
SnowConvert AI はサポートされていません。 TD_UNPIVOT 関数を変換します。これは、テーブルの列を行として表現するために使用できます。
しかし、この変換を行うには、テーブル列に関する情報(より具体的には列の名前)が必要です。この情報が存在しない場合、変換は、列が結果から欠落した不完全な状態のままになることがあります。このような場合にこの EWI が生成されます。
コード例¶
入力コード:¶
CREATE TABLE unpivotTable (
myKey INTEGER NOT NULL PRIMARY KEY,
firstSemesterIncome DECIMAL(10,2),
secondSemesterIncome DECIMAL(10,2),
firstSemesterExpenses DECIMAL(10,2),
secondSemesterExpenses DECIMAL(10,2)
);
SELECT * FROM
TD_UNPIVOT(
ON unpivotTable
USING
VALUE_COLUMNS('Income', 'Expenses')
UNPIVOT_COLUMN('Semester')
COLUMN_LIST('firstSemesterIncome, firstSemesterExpenses', 'secondSemesterIncome, secondSemesterExpenses')
COLUMN_ALIAS_LIST('First', 'Second')
)X ORDER BY mykey;
SELECT * FROM
TD_UNPIVOT(
ON unknownTable
USING
VALUE_COLUMNS('MonthIncome')
UNPIVOT_COLUMN('Months')
COLUMN_LIST('januaryIncome', 'februaryIncome', 'marchIncome', 'aprilIncome')
COLUMN_ALIAS_LIST('January', 'February', 'March', 'April')
)X ORDER BY yearKey;
生成されたコード:¶
CREATE OR REPLACE TABLE unpivotTable (
myKey INTEGER NOT NULL PRIMARY KEY,
firstSemesterIncome DECIMAL(10,2),
secondSemesterIncome DECIMAL(10,2),
firstSemesterExpenses DECIMAL(10,2),
secondSemesterExpenses DECIMAL(10,2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
SELECT
* FROM
(
SELECT
myKey,
TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('FIRSTSEMESTERINCOME', 'First', 'FIRSTSEMESTEREXPENSES', 'First', 'SECONDSEMESTERINCOME', 'Second', 'SECONDSEMESTEREXPENSES', 'Second'), Semester), '"') AS Semester,
Income,
Expenses
FROM
unpivotTable UNPIVOT(Income FOR Semester IN (
firstSemesterIncome,
secondSemesterIncome
)) UNPIVOT(Expenses FOR Semester1 IN (
firstSemesterExpenses,
secondSemesterExpenses
))
WHERE
Semester = 'FIRSTSEMESTERINCOME'
AND Semester1 = 'FIRSTSEMESTEREXPENSES'
OR Semester = 'SECONDSEMESTERINCOME'
AND Semester1 = 'SECONDSEMESTEREXPENSES'
) X ORDER BY mykey;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "VALUE_COLUMNS", "UNPIVOT_COLUMN", "COLUMN_LIST", "COLUMN_ALIAS_LIST" **
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0061 - TD_UNPIVOT TRANSFORMATION REQUIRES COLUMN INFORMATION THAT COULD NOT BE FOUND, COLUMNS MISSING IN RESULT ***/!!!
(
SELECT
TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('JANUARYINCOME', 'January', 'FEBRUARYINCOME', 'February', 'MARCHINCOME', 'March', 'APRILINCOME', 'April'), Months), '"') AS Months,
MonthIncome
FROM
unknownTable UNPIVOT(MonthIncome FOR Months IN (
januaryIncome,
februaryIncome,
marchIncome,
aprilIncome
))
) X ORDER BY yearKey;
ベストプラクティス¶
変換ツールに列に関する情報を提供する方法は2つあります。 TD_UNPIVOT 呼び出しと同じファイルにテーブル仕様を配置するか、 SELECT * またはテーブル名の代わりに ON 式の SELECT クエリで列リストを指定します。
この問題は、入力テーブルの ALL の列がピボットされていない場合は、安全に無視することができます。そうでない場合は、列が欠落してしまいます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0063¶
JSON パスは認識されませんでした
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
中
説明¶
このメッセージは、文字列が期待される JSON 形式を持たないため、 SnowConvert AI が JSON パスをデシリアライズできない場合に表示されます。
コード例¶
入力コード:¶
SELECT
*
FROM
JSON_TABLE (
ON (
SELECT
id,
trainSchedule as ts
FROM
demo.PUBLIC.Train T
) USING rowexpr('$weekShedule.Monday[*]') colexpr(
'[{"jsonpath" "$.time",
"type"" : "CHAR ( 12 )"}]'
)
) AS JT(Id, Ordinal, Time, City);
生成されたコード:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0063 - UNRECOGNIZED JSON PATH $weekShedule.Monday[*] ***/!!!
JSON_TABLE (
ON
!!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!! (
SELECT
id,
trainSchedule as ts
FROM
demo.PUBLIC.Train T
) USING rowexpr('$weekShedule.Monday[*]') colexpr(
'[{"jsonpath" "$.time",
"type"" : "CHAR ( 12 )"}]'
)
) AS JT(Id, Ordinal, Time, City);
ベストプラクティス¶
Jsonパスに予期しない文字が含まれていないか、または正しい形式でないかをチェックします。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0066¶
次の識別子には、Snowflakeでは無効なUnicodeエスケープ文字が1つ以上あります。
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
低
説明¶
このメッセージは、 SnowConvert AI がTeradata Unicode区切り識別子 をSnowflakeで無効な文字で変換した場合に表示されます。
コード例¶
入力コード:¶
SELECT * FROM U&"#000f#ffff" UESCAPE '#';
生成されたコード:¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
* FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0066 - THE FOLLOWING IDENTIFIER HAS ONE OR MORE UNICODE ESCAPE CHARACTERS THAT ARE INVALID IN SNOWFLAKE ***/!!!
"\u000f\uffff";
ベストプラクティス¶
Snowflakeで有効なUnicode文字を含む識別子を使用してください。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0068¶
Snowflakeはプロファイルをサポートしておらず、代わりにロールを参照します
重大性¶
中
説明¶
Teradataプロファイルは、ストレージスペースとパスワード制約管理に関連する複数の共通パラメーターを定義することを許可します。
しかし、 Snowflakeはクラウドアーキテクチャと連携し、ストレージを自動的に管理・最適化します 。つまり、ユーザー側でストレージのカスタマイズは行われません。また、 Snowflakeには現在、すべてのユーザーパスワードに適用され、変更できないパスワードポリシーが定義されています。
このエラーは、Teradataプロファイルへの参照が、ユーザーロールへの参照に変更されたことを示すことが判明した場合に生成されます。ユーザーロールはSnowflakeでのプロファイルに最も近いものですが、ユーザのプロファイルとロール名が同じでない限り、クエリ結果に違いが生じる可能性があります。
コード例¶
入力コード:¶
SELECT PROFILE;
生成されたコード:¶
SELECT
CURRENT_ROLE() !!!RESOLVE EWI!!! /*** SSC-EWI-TD0068 - SNOWFLAKE DOES NOT SUPPORT PROFILES, REFERENCING ROLE INSTEAD ***/!!!;
ベストプラクティス¶
ユーザープロファイルを参照することは避けてください。それらはサポートされておらず、ユーザーのプロファイルとロールの両方が同じ名前でない限り、クエリ結果は異なります。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0069¶
ST_DISTANCE の結果は ST_SPHERICALDISTANCE と若干異なります。
注釈
この EWI は非推奨です。 SSC-FDM-TD0031 ドキュメントをご参照ください
重大性¶
低
説明¶
Teradataの関数 ST_SPHERICALDISTANCE は、地球上の2つの球面座標間の距離をハバーサイン公式を用いて計算します。一方、Snowflakeの ST_DISTANCE 関数は、2つの地理的な点の間の最小距離を計算するためにハバーサイン公式を利用しません。
コード例¶
入力コード:¶
--The distance between New York and Los Angeles
Select Cast('POINT(-73.989308 40.741895)' As ST_GEOMETRY) As location1,
Cast('POINT(40.741895 34.053691)' As ST_GEOMETRY) As location2,
location1.ST_SPHERICALDISTANCE(location2) As Distance_In_km;
生成されたコード¶
--The distance between New York and Los Angeles
SELECT
Cast('POINT(-73.989308 40.741895)' As GEOGRAPHY) As location1,
Cast('POINT(40.741895 34.053691)' As GEOGRAPHY) As location2,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0069 - ST_DISTANCE RESULTS ARE SLIGHTLY DIFFERENT FROM ST_SPHERICALDISTANCE ***/!!!
ST_DISTANCE(
location1, location2) As Distance_In_km;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0070¶
同じ実行フローを保証するために、Labelセクションの最後にreturnステートメントが追加されました。
注釈
この EWI は非推奨です。 SSC-FDM-TD0030 ドキュメントをご参照ください
重大性¶
中
説明¶
GotoステートメントがLabelセクションに置き換えられ、returnステートメントを含まない場合、同じ実行フローを保証するために、セクションの最後にreturnステートメントを追加します。
Gotoコマンドの後に BTEQ が実行されると、gotoコマンドとlabelコマンドの間にある同名のステートメントは無視されます。そのため、これらのステートメントが実行されるのを避けるために、Labelセクションにはreturnステートメントを含める必要があります。
加えて、Gotoコマンドは同名のLabelを除き、他のすべてのステートメントをスキップします。この時、実行が再開されます。したがって、Gotoコマンド以前に定義されたLabelセクションで実行が再開されることはありません。
コード例¶
入力コード:¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.LOGON dbc,dbc;
select 'STATEMENTS';
.GOTO LABEL_B
select 'IGNORED STATEMENTS';
.label LABEL_B
select 'LABEL_B STATEMENTS';
生成されたコード¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
--.LOGON dbc,dbc
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'BTLogOn' NODE ***/!!!
null;
BEGIN
SELECT
'STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
/*.label LABEL_B*/
BEGIN
SELECT
'LABEL_B STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0070 - A RETURN STATEMENT WAS ADDED AT THE END OF THE LABEL SECTION LABEL_B TO ENSURE THE SAME EXECUTION FLOW ***/!!!
RETURN 0;
BEGIN
SELECT
'IGNORED STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
/*.label LABEL_B*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
BEGIN
SELECT
'LABEL_B STATEMENTS';
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END
$$
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0076¶
Snowflakeでは外部テーブルの使用はサポートされていません。
重大性¶
中
説明¶
外部テーブル は、Amazon S3、Azure Blob storage、Google Cloud Storageの半構造化データや非構造化データなど、外部オブジェクトストレージ内のデータへのアクセスを可能にします。この構文はSnowflakeではサポートされていません。しかし、Snowflakeには外部テーブル、icebergテーブル、標準テーブルなど、代わりに使用できるものがあります。
コード例¶
入力コード:¶
SELECT cust_id, income, age FROM
FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
生成されたコード:¶
SELECT
cust_id,
income,
age FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0076 - THE USE OF FOREIGN TABLES IS NOT SUPPORTED IN SNOWFLAKE. ***/!!!
FOREIGN TABLE (SELECT cust_id, income, age FROM twm_customer)@hadoop1 T1;
ベストプラクティス¶
Teradataの外部テーブルの代わりに、 Snowflake外部テーブル を使うことができます。 外部テーブルは、クラウドストレージ(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)データレイクにあるデータファイルを参照します。これにより、データレイク内のファイルに保存されているデータを、データベース内にあるかのようにクエリできます。外部テーブルは、 COPY INTO <table>ステートメントがサポートする任意の形式で保存されたデータにアクセスできます。
もうひとつの手段は、 SnowflakeのIcebergテーブル です。つまり、Icebergテーブルは、オープン形式とカスタマー提供のクラウドストレージを使用するテーブルと考えることができます。このデータはParquetファイルに保存されます。
最後が 標準Snowflakeテーブル です。これは、Teradataの外部テーブルの機能をカバーするための選択肢になります。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0077¶
RESET WHEN 句は、その条件により、このシナリオではサポートされていません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
中
説明¶
SnowConvert AI は現在、バイナリ条件(<=, >= または =)を持つ RESETWHEN 句のみをサポートしています。IS NOT NULL のような他のタイプの条件は、Snowflakeではサポートされていないため、 RESETWHEN 句は削除され、エラーメッセージが追加されます。
このエラーメッセージは、 RESET WHEN 条件が、移行ツールによって定義が見つからなかった式を参照している場合にも表示されます。現在、このツールは同じクエリで定義された列へのエイリアス参照をサポートしています。
コード例¶
Condition is not binary¶
入力コード:¶
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY month_id
RESET WHEN balance IS NOT NULL
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM account_balance
ORDER BY 1,2;
生成されたコード¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
ORDER BY month_id
ROWS UNBOUNDED PRECEDING
) as balance_increase
FROM
account_balance
ORDER BY 1,2;
Condition expression was not found¶
入力コード:¶
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
ORDER BY month_id
RESET WHEN balance <= not_found_expresion
) as balance_increase
FROM account_balance
ORDER BY 1,2;
生成されたコード¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
account_id,
month_id,
balance,
ROW_NUMBER() OVER (
PARTITION BY account_id
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0077 - RESET WHEN CLAUSE IS NOT SUPPORTED IN THIS SCENARIO DUE TO ITS CONDITION ***/!!!
ORDER BY month_id
) as balance_increase
FROM
account_balance
ORDER BY 1,2;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0079¶
必要なPeriod型列が見つかりませんでした
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
低
説明¶
この警告が表示されるのは、Normalize句の機能を複製するために必要なPeriod列が見つからなかったためです。
コード例¶
入力コード:¶
SELECT NORMALIZE emp_id, duration2 FROM project;
生成されたコード¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0079 - THE REQUIRED PERIOD TYPE COLUMN WAS NOT FOUND ***/!!!
// SnowConvert AI Helpers Code section is omitted.
WITH NormalizeCTE AS
(
SELECT
T1.*,
SUM(GroupStartFlag)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin
ROWS UNBOUNDED PRECEDING) GroupID
FROM
(
SELECT
emp_id,
duration2,
PUBLIC.PERIOD_BEGIN_UDF(PeriodColumn) PeriodColumn_begin,
PUBLIC.PERIOD_END_UDF(PeriodColumn) PeriodColumn_end,
(CASE
WHEN PeriodColumn_begin <= LAG(PeriodColumn_end)
OVER (
PARTITION BY
emp_id, duration2
ORDER BY
PeriodColumn_begin,
PeriodColumn_end)
THEN 0
ELSE 1
END) GroupStartFlag FROM
project
) T1
)
SELECT
emp_id,
duration2,
PUBLIC.PERIOD_UDF(MIN(PeriodColumn_begin), MAX(PeriodColumn_end))
FROM
NormalizeCTE
GROUP BY
emp_id,
duration2,
GroupID;
ベストプラクティス¶
この警告を手動で修正するには、最初のPeriod列がどれであったかを調べ、定義されている場合を除いて参照をすべて削除し、 PeriodColumn を見つかった列で置き換えます。
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0082¶
現在のエンコーディングを使用したTranslate関数はサポートされていません
重大性¶
中
説明¶
現在のエンコーディング引数を使用したTranslate関数の使用は、Snowflakeではサポートされていません。この関数は翻訳中にコメントアウトされます。
コード例¶
入力コード:¶
SELECT Translate('abc' USING KANJISJIS_TO_LATIN);
生成されたコード¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0082 - TRANSLATE FUNCTION USING KANJISJIS_TO_LATIN ENCODING IS NOT SUPPORTED ***/!!!
Translate('abc' USING KANJISJIS_TO_LATIN);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0083¶
一度に2つ以上の複雑なSelect句を変換できません
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
中
説明¶
SnowConvert AI は、2つ以上の複雑な SELECT 句を変換することができません。 CTE または複合 FROM 句にマップする必要があるため、マップされたコードはコンパイルできないか、論理サイクルに入りません。
複雑な SELECT 句とは¶
NORMALIZE 、 EXPAND ON 、 RESET WHEN など、 CTE または複合 FROM 句へのマッピングが必要なもの。
コード例¶
入力コード:¶
SELECT
NORMALIZE emp_id,
duration,
dept_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY emp_id
ORDER BY
dept_id RESET WHEN balance <= SUM(balance) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
)
) -1
) AS balance_increase
FROM project
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
生成されたコード¶
// SnowConvert AI Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
NORMALIZE emp_id,
duration,
dept_id,
balance,
(
ROW_NUMBER() OVER (
PARTITION BY
emp_id, new_dynamic_part
ORDER BY
dept_id
) -1
) AS balance_increase
FROM
(
SELECT
emp_id,
duration,
dept_id,
balance,
previous_value,
SUM(dynamic_part) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS new_dynamic_part
FROM
(
SELECT
emp_id,
duration,
dept_id,
balance,
SUM(balance) OVER (
PARTITION BY emp_id
ORDER BY dept_id
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
) AS previous_value,
(CASE
WHEN balance <= previous_value
THEN 1
ELSE 0
END) AS dynamic_part
FROM
project
)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0083 - NOT ABLE TO TRANSFORM TWO OR MORE COMPLEX SELECT CLAUSES AT A TIME ***/!!!
EXPAND ON duration AS bg BY ANCHOR ANCHOR_SECOND
ORDER BY 1, 2;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0087¶
ifステートメントが逆転したため、 GOTO ステートメントは削除されました。
注釈
この EWI は非推奨です。 SSC-FDM-TD0026 ドキュメントをご参照ください。
注釈
わかりやすくするため、出力コードの一部を省略しています。
重大性¶
中
説明¶
SQL ifステートメントの機能を複製するために、 IF および LABEL コマンドとともに GOTO コマンドを使用するのが一般的です。このように使うと、ifステートメント、if-elseステートメント、あるいはif-elseif-elseステートメントに直接変換できます。しかし、このような場合、 GOTO コマンドは不要になるので、 LABEL セクションで置き換えられないよう削除する必要があります。
コード例¶
入力コード:¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.If ActivityCount = 0 THEN .GOTO endIf
DROP TABLE TABLE1;
.Label endIf
SELECT A FROM TABLE1;
生成されたコード¶
EXECUTE IMMEDIATE
$$
DECLARE
STATUS_OBJECT OBJECT := OBJECT_CONSTRUCT('SQLCODE', 0);
BEGIN
IF (NOT (STATUS_OBJECT['SQLROWCOUNT'] = 0)) THEN
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0087 - GOTO endIf WAS REMOVED DUE TO IF STATEMENT INVERSION ***/!!!
BEGIN
DROP TABLE TABLE1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END IF;
/*.Label endIf*/
--** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
BEGIN
SELECT
A
FROM
TABLE1;
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLROWCOUNT', SQLROWCOUNT);
EXCEPTION
WHEN OTHER THEN
STATUS_OBJECT := OBJECT_CONSTRUCT('SQLCODE', SQLCODE, 'SQLERRM', SQLERRM, 'SQLSTATE', SQLSTATE);
END;
END
$$
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0091¶
式がキャストとして変換され、依存関係の欠落によるエラーが発生する可能性があります。
注釈
わかりやすくするため、出力コードの一部を省略しています
重大性¶
中
説明¶
Teradataスクリプトでは、 CAST 式に次の構文を使用できます。
<expression> ( <DataType> )
残念ながら、この構文は、 CAST を DATE や TIME に変換しようとするときに曖昧さが生じます。これらのキーワードは、それぞれ CURRENT_DATE や CURRENT_TIME 関数としても動作するためです。
したがって、 CAST になる式に関するコンテキストがないと、 CAST の実際のケースを処理しているのか、 DATE や TIME をパラメーターとして受け入れる関数を処理しているのかを区別する確実な方法はありません。
つまり、 <expression> が列なのか、ユーザー定義関数( UDF )なのかを知る必要があります。そのためには、コードを変換する際に、 CREATE TABLE または CREATE FUNCTION を追加する必要があります。
たとえば、次の SELECT ステートメントを確認します。AMBIGUOUS_EXPR に関するコンテキストがないため、関数の呼び出しなのか、 CAST から DATE に変換しているかのかを判断する方法がありません。しかし、 COL1 は テーブル TAB の列であるため、 COL1 (DATE) は実際には CAST であることがわかっています。
CREATE TABLE TAB (
COL1 VARCHAR(23)
)
SELECT
COL1 (DATE),
AMBIGUOUS_EXPR (DATE)
FROM TAB;
コード例¶
入力コード:¶
CREATE TABLE TAB (
COL1 VARCHAR(23)
)
SELECT
COL1 (DATE),
AMBIGUOUS_EXPR (DATE)
FROM TAB;
生成されたコード¶
CREATE OR REPLACE TABLE TAB (
COL1 VARCHAR(23)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
SELECT
TO_DATE(
COL1, 'YYYY/MM/DD') AS COL1,
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0091 - EXPRESSION CONVERTED AS CAST BY DEFAULT. CONVERSION MIGHT PRESENT ERRORS DUE TO MISSING DEPENDENCIES FOR 'AMBIGUOUS_EXPR'. ***/!!!
AMBIGUOUS_EXPR :: DATE
FROM
TAB;
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0092¶
Teradataの組み込みテーブル/ビューの翻訳は現在サポートされていません
重大性¶
低
説明¶
この EWI は、 SnowConvert AI が現在翻訳されていないTeradataシステムテーブルを検出した時に追加されます。
コード例¶
入力コード:¶
SELECT
CRLF ||
TRIM(em.ErrorText) INTO :MsgText
FROM
DBC.ErrorMsgs em
WHERE
em.ErrorCode = SUBSTR(:SqlStateCode, 2, 4)
生成されたコード¶
SELECT
CRLF ||
TRIM(em.ErrorText) INTO :MsgText
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0092 - TRANSLATION FOR TERADATA BUILT-IN TABLE/VIEW DBC.ErrorMsgs IS NOT CURRENTLY SUPPORTED. ***/!!!
DBC.ErrorMsgs em
WHERE
UPPER(RTRIM(
em.ErrorCode)) = UPPER(RTRIM(SUBSTR(:SqlStateCode, 2, 4)));
ベストプラクティス¶
Information_SchemaやSNOWFLAKE.ACCOUNT_USAGEなど、Snowflakeの内部テーブルで同等のものを探します。さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。
SSC-EWI-TD0093¶
形式はサポートされていないため、varcharキャストのすべての使用で更新する必要があります。
重大性¶
高
説明¶
この EWI は、 CAST 関数を使用して数値式を指定された形式を持つ別の数値型にキャストする際に追加されます。形式は数値そのものには影響しませんが、その後に結果を文字列にキャストすると、意図した形式が正しく適用されません。したがって、結果が VARCHAR にキャストされるすべてのインスタンスを更新し、 EWI で定義されている形式が使用されるようにする必要があります。
コード例¶
入力コード:¶
SELECT
CAST(245222.32 AS FORMAT '-(10)9.9(4)') AS FormattedAmount,
CAST(FormattedAmount AS VARCHAR(30));
生成されたコード¶
SELECT
245222.32 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0093 - FORMAT '-(10)9.9(4)' IS NOT SUPPORTED AND MUST BE UPDATED TO THE FOLLOWING FORMAT 'S9999999999.0000' IN ALL VARCHAR CAST USAGES. ***/!!! AS FormattedAmount,
LEFT(LTRIM(TO_VARCHAR(FormattedAmount, 'MI0.00000000000000EEEEE')), 10);
ベストプラクティス¶
さらにサポートが必要な場合は、 snowconvert-support@snowflake.com までメールでお問い合わせください。