SnowConvert: Teradataの問題¶
SSC-EWI-TD0069¶
この早期警告問題(EWI)はサポートされなくなりました。最新の情報については、 SSC-FDM-TD0031 ドキュメントをご参照ください。
重大性¶
低
説明¶
Teradataの関数 ST_SPHERICALDISTANCE とSnowflakeの関数 ST_DISTANCE は、地理的なポイント間の距離の計算が異なります。Teradataは(地球のような)球面上の2点間の距離を測定するためにHaversine式を使用しますが、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-TD0079¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
低
説明¶
この警告が表示されるのは、Normalize句の機能を再現するために必要な「期間」列が見つからないためです。
コード例¶
入力コード:¶
SELECT NORMALIZE emp_id, duration2 FROM project;
出力コード¶
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0079 - THE REQUIRED PERIOD TYPE COLUMN WAS NOT FOUND ***/!!!
// SnowConvert 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;
推奨事項¶
この警告を解決するには、コード内の最初の期間列を探し、最初に定義されている場所以外の期間列への参照をすべて削除します。次に、「PeriodColumn」を見つけた列の名前に置き換えます。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0008¶
重大性¶
低
説明¶
現在のところ、Snowflakeには、一部の文字列比較関数に直接相当するものはありません。
この EWI は、次の文字列比較メソッドのいずれかを使用する場合に表示されます。 jaro、 n_gram、 LD (レーベンシュタイン距離)、 LDWS (代入ありのレーベンシュタイン距離)、 OSA (文字列配列最適化)、 DL (ダメラウ・レーベンシュタイン)、 hamming、 LCS (最長共通部分列)、 jaccard、 cosine または soundexcode。
コード例¶
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;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0059¶
重大性¶
低
説明¶
Teradataと同様に、ユーザーにデフォルトのタイムゾーンを設定すると、セッションに別のタイムゾーンが指定されるまで、すべてのセッションでそのタイムゾーンが使用されます。
この警告は、以前にTeradataユーザーに定義したタイムゾーンと同じタイムゾーンをSnowflakeに設定することを思い出させます。Snowflakeでタイムゾーンを設定するには、以下のクエリを実行します。
ALTER SESSION SET 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-TD0049¶
重大性¶
高
説明¶
ツールは、 TPT の 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 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 ステートメントを手動で記述するか、 SnowConvert チームに連絡し、現在サポートされていないこの特定の DML ステートメントのサポートをリクエストします。
その他のサポートについては、 snowconvert-support@snowflake.com にメールでご連絡ください
SSC-EWI-TD0009¶
重大性¶
低
説明¶
Teradataのテンポラルテーブルは、派生期間列を使用して、列レベルで時間ベースのデータを追跡します。この機能は現在Snowflakeでは利用できません。
コード例¶
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"}}'
;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0039¶
重大性¶
中
説明¶
使用しようとしているファイル形式はSnowflakeと互換性がありません。
コード例¶
入力:¶
SELECT
CAST('01-12-2020' AS DATE FORMAT 'dd-mm-yyyy'),
CAST('01-12-2020' AS DATE FORMAT 'DDDBEEEE');
出力:¶
SELECT
TO_DATE('01-12-2020', 'DD-MM-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'dd-mm-yyyy' NOT SUPPORTED. ***/!!!,
TO_DATE('01-12-2020', 'DDD EEEE') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'DDDBEEEE' NOT SUPPORTED. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'DDD EEEE' NOT SUPPORTED ***/!!!;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0068¶
重大性¶
中
説明¶
Teradataプロファイルを使用すると、ストレージスペースを管理し、パスワード制限を管理する複数の共有パラメーターを設定できます。
Snowflakeはクラウドアーキテクチャを通じてストレージを管理し、すべての最適化を自動的に処理する ため、ユーザー側のストレージ構成は不要です。さらに、すべてのユーザーに普遍的に適用され、カスタマイズできない 標準パスワードポリシーをSnowflakeは強制 します。
このエラーは、Teradataプロファイル参照が検出され、Snowflakeロール参照に変換されたときに発生します。SnowflakeのロールはTeradataプロファイルに最も近いものですが、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-TD0029¶
重大性¶
低
説明¶
この警告は、 TABLE
で QUEUE 属性を使用している場合に表示されます。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-TD0063¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
中
説明¶
このエラーは、 SnowConvert が JSON のパス文字列に遭遇したときに発生します。このパス文字列は、必要な 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-TD0057¶
重大性¶
低
説明¶
NEW JSON 関数は、文字列またはバイナリ形式の JSON データを受け付けます。データがバイナリ形式の場合、Snowflakeは JSON オブジェクトに関するバイナリ形式のメタデータを解釈できないため、関数は変更されません。詳細は、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-TD0006¶
重大性¶
低
説明¶
FLOAT データ型は、 DEFAULT TIME、 DEFAULT DATE、 DEFAULT CURRENT_DATE、 DEFAULT CURRENT_TIME、 DEFAULT CURRENT_TIMESTAMP 仕様を使用したデフォルト値をサポートしていません。
コード例¶
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"}}'
;
推奨事項¶
ユーザー側からのアクションは必要ありません。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0002¶
この EWI は SnowConvert 28.1.100リリース以降、廃止されました。
重大性¶
高
説明¶
SQL ステートメントに INTERVAL タイプの列セレクターが含まれる場合、 SnowConvert は EWI (エラー、警告、情報)メッセージを追加し、スタブ関数を作成します。Snowflakeは INTERVAL データ型をサポートしていないため、変換処理完了後に手動での操作が必要になります。
コード例¶
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;
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0053¶
例を明確で分かりやすくするため、コードの一部を削除しています。
生成されるvarchar表現の精度¶
PERIOD_UDF 関数は、Snowflakeのデフォルトのタイムスタンプと時間形式を使用して期間の文字列表現を作成します。デフォルトでは、タイムスタンプには精度のために小数点以下3桁が含まれますが、時刻変数には小数点以下はありません。出力文字列の精度を調整する必要がある場合は、2つのオプションが利用可能です。
PRECISIONDIGITS
パラメーターには、 PERIOD_UDF の3パラメーターバージョンを使用します。このパラメーターは、0から9までの整数を指定し、結果の小数部分の10進数を制御します。Snowflakeは小数点以下9桁までサポートしていますが、Teradataは6桁までしかサポートしていません。例:
呼び出し |
結果 |
---|---|
|
|
|
|
|
|
セッション出力の時間形式を設定する:
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) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - 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-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!);
SELECT
PUBLIC.PERIOD_END_UDF(duration) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!! from
vacations;
推奨事項¶
PERIOD
およびその関連関数は、varcharデータ型を使用してシミュレートされているため、結果の正確性を検証することをお勧めします。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0077¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
中程度
説明¶
SnowConvert (SC)は、バイナリ比較演算子(<=、>=または=)を使用する RESET WHEN
句のみをサポートしています。IS NOT NULL
などの他の条件を使用した場合、Snowflakeはこれらの条件をサポートしていないため、 SC は RESET WHEN
句を削除し、エラーメッセージを表示します。
このエラーメッセージは、 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 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 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-TD0012¶
重大性¶
低
説明¶
この警告は、 SnowConvert が DEFAULT 値を持つ BINARY データ型の列を検出した場合に表示されます。Snowflakeは BINARY 列のデフォルト値をサポートしていないため、 SnowConvert は DEFAULT 値指定を削除します。
コード例¶
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"}}'
;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0003¶
重大性¶
低
説明¶
Snowflakeでは、トリム関数(LTRIM、 RTRIM、
または TRIM
)は、空白文字や空白文字を削除する場合にのみ照合順序をサポートします。他の文字タイプの照合順序はサポートしていません。
SnowConvert が照合列で LTRIM
、 RTRIM
、または TRIM
(LEADING
または TRAILING
オプションあり)関数に遭遇すると、自動的に COLLATE
関数を追加します。この関数は、トリム処理を適用する前に入力列の非照合コピーを作成します。早期警告インジケーター(EWI)は、トリム関数が適用される前に列の照合順序が削除されたことを警告します。その結果、トリミングされた出力には照合順序の設定がないため、この結果を使用した後の文字列比較に影響を与える可能性があります。
コード例¶
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) COLLATE 'en-cs'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "06/17/2024" }}'
;
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;
推奨事項¶
一貫した比較動作を維持するために、
COLLATE
関数を使用して、TRIM
関数の結果に元の列の照合順序を追加します。第2引数にリテラル文字列として元の照合順序値を指定します。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0052¶
重大性¶
低
説明¶
TeradataもSnowflakeも、文字列値を数値パラメーターを期待する関数に渡すと、自動的に数値に変換します。文字列値は解析され、等価な数値に変換されます。
Teradataとターゲット言語では、数値文字列の扱いが異なります。Teradataはより柔軟で、様々な文字列形式を数値として解析することができます。
空文字列または空白のみの文字列
ダッシュを埋め込んだ文字列
仮数または指数に桁のない数値
通貨記号
桁区切りのある数字
数字の後に符号が付く数字
'1-2-3-4-5' -> 12345
'$50' -> 50
'5000-' -> -5000
'1,569,284.55' -> 1569284.55
Snowflakeは 自動的にオプティミスティック文字列変換 を使用し、文字列が TM9 または TME 形式のいずれかに一致することを期待します。文字列がこれらの形式に一致しない場合、変換は失敗します。これに対処するため、 SnowConvert は、 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":1, "minor":0},"attributes":{"component":"teradata"}}'
;
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-TD0066¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
低
説明¶
このメッセージは、 SnowConvert でTeradata Unicode区切り識別子にSnowflakeでサポートされていない文字が含まれている場合に表示されます。詳細情報については、 Teradata Unicode区切り識別子 をご参照ください。
コード例¶
入力コード:¶
SELECT * FROM U&"#000f#ffff" UESCAPE '#';
出力コード:¶
// SnowConvert 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-TD0027¶
重大性¶
低
説明¶
Snowflakeは、 VALIDTIME や TRANSACTIONTIME などのTeradata組み込みのテンポラル時間属性をサポートしていないため、 EWI (エラー、警告、情報)メッセージが表示されます。
コード例¶
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 ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - 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"}}'
;
推奨事項¶
TIMESTAMP 列を手動で作成し、そのデフォルト値を CURRENT_TIMESTAMP に設定します。
テーブルストリームを使用してデータの変更を追跡し、変更ごとにメタデータを取得します。(ガイド)
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0076¶
重大性¶
中程度
説明¶
Teradataの 外部テーブル を使用すると、Amazon S3、Azure Blobストレージ、Google Cloud Storageなどの外部の場所に格納されたデータにアクセスできます。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 <テーブル> コマンドで動作するすべてのファイル形式をサポートしています。
SnowflakeのIcebergテーブル は、もう一つの選択肢を提供します。これらのテーブルはオープン形式を使用し、データをParquetファイルとして独自のクラウドストレージに格納します。
標準のSnowflakeテーブル は、Teradataの外部テーブル機能を置き換えることもできます。
その他のヘルプについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0091¶
分かりやすくするため、出力コードのセクションの一部を削除しています。
重大性¶
中
説明¶
Teradataスクリプトでは、 CAST 式を使用して、次の構文でデータ型を変換できます。
<expression> ( <DataType> )
DATE
または TIME
のある CAST を使ってデータ型を変換する場合、これらのキーワードはそれぞれ CURRENT_DATE
と CURRENT_TIME
関数としても機能するため、曖昧さが生じる可能性があります。
そのため、 CAST 操作を必要とする式に関する追加のコンテキストなしでコードを調べる場合、本物の CAST 操作と、単に DATE または TIME パラメーターを入力として受け取る関数を区別することが難しくなります。
<expression>
が列なのかユーザー定義関数(UDF)なのかを判断するには、コードを変換する際に対応する CREATE TABLE
または CREATE FUNCTION
ステートメントを含める必要があります。これにより、式の定義に関する必要なコンテキストが提供されます。
たとえば、次の SELECT
ステートメントを見てみましょう。AMBIGUOUS_EXPR
に遭遇したとき、追加的な文脈がなければ、それが関数呼び出しを表しているのか、 DATE
へのタイプ変換を表しているのかを判断することはできません。しかし、 COL1 (DATE)
はタイプ変換(CAST)の操作であることは確かです。なぜなら、 COL1
はテーブル TAB
の列だからです。
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-TD0017¶
重大性¶
低
説明¶
この警告は、 GLOBAL TEMPORARY TRACE オプションを含むCreate Tableステートメントを SnowConvert が検出したときに表示されます。この機能は、Teradata(TRACE 機能))固有のもので、Snowflakeでは利用することができず、変換中に削除されます。
コード例¶
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"}}'
;
推奨事項¶
注意: Snowflakeのトレース機能は、
EVENT TABLE
を使用して再現することができます。詳細情報については、 ログとトレース に関するSnowflakeドキュメントをご参照ください。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0046¶
重大性¶
中
説明¶
このエラーは、 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-TD0023¶
重大性¶
低
説明¶
ACTIVITY_COUNT
ステータス変数は、埋め込み SQL またはストアドプロシージャで使用された SQL DML ステートメント(INSERT、 UPDATE、 DELETE など)によって変更された行数を示します。詳細は こちら をご覧ください。
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で使用するには、Snowflakeの SELECT INTO VARIABLE 構文を使うように修正する必要があります。
さらに、 RESULT_SCAN(LAST_QUERY_ID())
を使用したときに正しくない結果に気づいた場合は、 SSC-FDM-TD0033 で潜在的な制限とその対処法に関する情報をご参照ください。
推奨事項¶
推奨される回避策を手動で適用します。
SSC-FDM-TD0033 を見直し、
LAST_QUERY_ID
を使用することの限界とその対処法を理解します。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0051¶
重大性¶
低
説明¶
バイトデータ型を扱う場合、TeradataとSnowflakeには重要な違いがあります。
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-TD0034¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
低
説明¶
1つのリクエストで複数の SQL ステートメントを実行することはサポートされていません。リクエストは1つのトランザクションとして処理されました。
このエラー警告情報(EWI)は、コマンドを使用して PL ターゲット言語フラグをJavascriptにセットした場合にのみ表示されます。「--PLTargetLanguage 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 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-TD0024¶
重大性¶
低
説明¶
この警告は、ストアドプロシージャ内のコメントアウトされた ABORT
ステートメント内で AGGREGATE
関数が使用されている場合に表示されます。
コード例¶
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-TD0010¶
重大性¶
低
説明¶
テキストを大文字に変換するために使用される UPPERCASE 列属性は、Snowflakeでは利用できません。
コード例¶
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"}}'
;
推奨事項¶
UPPERCASE
句は、データを格納する際に小文字を大文字に変換します。たとえば、「aaa」は「AAA」として格納されます。これを処理するには、すべてのinsertステートメントに UPPER 関数を追加することができます。ただし、外部データを読み込み中の ETL プロセスも変更する必要があることに注意してください。その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0041¶
重大性¶
低
説明¶
入力されたファイル形式はシステムでサポートされていません。
コード例¶
入力:¶
SELECT
cast(T_2041.integer_column as integer);
出力:¶
SELECT
cast(TRUNC(T_2041.integer_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-TD0061¶
重大性¶
低
説明¶
SnowConvert は、列データをテーブルの行に変換する 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-TD0004¶
重大性¶
低
説明¶
Snowflakeプロシージャには、TeradataのContinueハンドラー機能に直接相当するものがありません。SnowConvert はいくつかの例外コードを処理し、同様の動作をエミュレートできますが、Continue Handlerステートメントでサポートされていない例外コードに遭遇すると、 EWI (エラー、警告、情報)メッセージを生成します。
コード例¶
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;
$$;
推奨事項¶
Continue Handler翻訳参照 に示されている例と同様に、例外を発生させる可能性のあるステートメントを識別して特定し、コードブロックで囲みます。
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0055¶
この早期警告問題(EWI)はサポートされなくなりました。最新の情報については、 SSC-FDM-TD0029 ドキュメントをご参照ください。
セッションパラメーターに依存する形式要素¶
以下のTeradata形式要素は、特定のセッションパラメーター設定を必要とするSnowflake関数にマッピングされています。TeradataとSnowflakeで一貫した結果を得るには、これらのセッションパラメーターをTeradataのセットに合わせて構成する必要があります。
D:
DAYOFWEEK
関数にマッピング。TeradataとSnowflakeではデフォルトの設定が異なるため、結果が異なる場合があります。Teradataは日曜日を週の最初の曜日として使用し、Snowflakeは月曜日を使用しています。WW:
WEEK
関数にマッピング。週の計算ポリシーが異なるため、結果が異なる場合があります。Snowflakeはデフォルトで ISO (最初の週は1月が4日以上含まれること)の標準を使用しますが、Teradataは1月1日を最初の週の開始とみなします。
セッションパラメーターを変更するには、 ALTER SESSION SET parameter_name = value
コマンドを使用します。使用可能なセッションパラメーターとその使用方法に関する詳細については、 こちらのページ をご覧ください。
TO_CHAR の単一パラメーターバージョン¶
TO_CHAR(Datetime)
関数にパラメーターを1つ指定すると、セッションパラメーターで定義されたデフォルトの日付と時刻の形式を使用します。これらのパラメーターには以下があります。
TIMESTAMP_LTZ_OUTPUT_FORMAT
TIMESTAMP_NTZ_OUTPUT_FORMAT
TIMESTAMP_TZ_OUTPUT_FORMAT
TIME_OUTPUT_FORMAT
TeradataとSnowflake間で一貫した動作を保証するために、これらのパラメーターがTeradataの設定と一致していることを確認してください。
TO_CHAR(Numeric)
を使用して数値を文字列に変換する場合、Snowflakeは自動的に TM9
または TME
のいずれかの形式を使用して、コンパクトな文字列表現を作成します。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-TD0082¶
重大性¶
中
説明¶
現在のエンコーディングパラメーターを使用した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-TD0020¶
この警告メッセージは使用されなくなりました。最新のドキュメントは SSC-EWI-0009 をご参照ください。
重大性¶
低
説明¶
Snowflakeは現在、 POSIX 基本正規表現構文のみをサポートしています。高度な正規表現機能は使用できません。
この警告は、 REGEX_SUBSTR、 REGEX_REPLACE、 または REGEX_INSTR の関数呼び出しがSnowflakeに変換されるたびに表示されます。正規表現機能の一部がSnowflakeでサポートされていない可能性があることをユーザーに警告します。 サポートされていない 重要な機能には以下があります。
Lookahead
Lookbehind
Non-capturing groups
コード例¶
Teradata:¶
SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0020 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
推奨事項¶
各正規表現パターンを確認し、手動による調整が必要かどうかを識別します。Snowflakeの正規表現機能と代替オプションの詳細については、 こちら をご参照ください。
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0060¶
例を明解で分かりやすくするため、出力コードの一部を削除しています
重大性¶
低
説明¶
SnowConvert ツールは JSON_TABLE 関数を変換できますが、変換を正しく実行するには 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 にコードを提供する際は、必ずテーブル定義を含めるようにしてください。それらがないと、コードをもう一度実行する必要があります。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0031¶
重大性¶
低
説明¶
TeradataとSnowflakeの 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":1, "minor":0},"attributes":{"component":"teradata"}}'
;
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
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0031 - THE RESULT OF LIKE MAY DIFFER DUE TO CHAR TYPE HAVING A FIXED LENGTH IN TERADATA ***/!!! col2 LIKE 'Barnum';
-- It does not return any row
推奨事項¶
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0005¶
重大性¶
Critical
説明¶
コードは正常に変換されましたが、この機能はまだ完全に実装されていないため、意図したとおりに動作しない可能性があります。
警告では、このステートメントを使用すると元のスクリプトとは異なる関数になることをユーザーに通知します。
ソース例¶
BTEQ 入力コード:¶
.SET SIDETITLES ON
Python出力コード:¶
#*** Generated code is based on the SnowConvert 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()
推奨事項¶
BTEQ からPythonへの翻訳に関する詳細情報については、 BTEQ からPythonへの翻訳仕様 をご参照ください。
その他のサポートについては、 snowconvert-support@snowflake.com にお問い合わせください
SSC-EWI-TD0083¶
分かりやすくするため、出力コードの一部を削除しています。
重大性¶
中
説明¶
SnowConvert は、複数の複雑なステートメント(SELECT)を同時に処理することができません。これらのステートメントを変換するには、共通テーブル式(CTEs)または複合 FROM 句にマッピングする必要があり、コンパイルエラーや無限論理ループが発生する可能性があるため、この制限が存在します。
複雑な SELECT 句とは¶
共通テーブル式(CTE)または複合 FROM 句にマッピングする必要があるステートメント。 NORMALIZE、 EXPAND ON、 RESET WHEN 関数を含みます。
コード例¶
入力コード:¶
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 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-TD0070¶
この早期警告問題(EWI)はサポートされなくなりました。最新の情報については、 SSC-FDM-TD0030 ドキュメントをご参照ください。
重大性¶
中
説明¶
SC でGotoステートメントをLabelセクションに置き換えると、returnステートメントがない場合は、自動的にセクションの最後に追加されます。これにより、プログラムの実行フローが元のコードと変わらないことが保証されます。
BTEQ Gotoコマンドが実行されると、Gotoコマンドと対応するラベルの間のステートメントはすべてスキップされます。ラベルに到達した後の意図しない実行を防ぐために、ラベルセクションに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-TD0001¶
分かりやすくするため、出力コードの一部を削除しています。
重大性¶
低
説明¶
この警告は、 SnowConvert がエイリアス式で再帰パターンを識別した場合に表示されます。このような場合、 SnowConvert は、エイリアスがSnowflakeで適切に動作するために必要なForward Alias変換を実行できません。
再帰エイリアスは、2つ以上のエイリアスが循環パターンでお互いを参照する場合に発生します。これは、エイリアスAがエイリアスBを参照し、エイリアスBがエイリアスAを参照するというように直接的に起こることもあれば、複数のミディアムエイリアスを通じて間接的に(transitively)循環参照が起こることもあります。
コード例¶
注意: Snowflakeでは再帰エイリアスは一般的にサポートされていませんが、いくつかの基本的なケースはサポートされています。
注意: 一般的にSnowflakeは再帰エイリアスをサポートしていません。しかし、以下の例に示すように、いくつかの基本的なケースはサポートされています。
以下のコードは、移行プロセス完了後、Snowflakeで正常に実行されたことを示しています。
Teradata:¶
SELECT
COL1 AS COL2,
COL2 AS COL1
FROM
TABLE_EXAMPLE;
Snowflake Scripting:¶
// SnowConvert 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 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-TD0087¶
このドキュメントはもはや維持されていません。最新の情報については、 SSC-FDM-TD0026 をご参照ください。
例を明確かつ簡潔にするため、コードの一部を省略しています。
重大性¶
中
説明¶
SQL IF ステートメントの関数を複製する場合、開発者はしばしば GOTO コマンドと IF、 LABEL コマンドを組み合わせます。これらの組み合わせは、ifステートメント、if-elseステートメント、if-elseif-elseステートメントに直接変換することができます。このような場合は、 LABEL セクションに置き換わると冗長になるため、 GOTO コマンドを削除します。
コード例¶
入力コード:¶
-- 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-TD0025¶
重大性¶
低
説明¶
この警告は、Snowflake Scriptingがサポートしていない出力形式で CAST
関数を使用した場合に表示されます。
コード例¶
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)'),
CAST('01-12-2020' AS DATE FORMAT 'dd-mm-yyyy')
FROM SAMPLE_TABLE;
Snowflake Scripting:¶
CREATE OR REPLACE TABLE SAMPLE_TABLE (
VARCHAR_TYPE VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
CREATE OR REPLACE VIEW SAMPLE_VIEW
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
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. ***/!!!,
TO_DATE('01-12-2020', 'DD-MM-YYYY') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'dd-mm-yyyy' NOT SUPPORTED. ***/!!!
FROM
SAMPLE_TABLE;
推奨事項¶
変換されたコードがソースコードと同じように機能することを検証します。
その他のサポートについては、サポートチーム 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) COLLATE 'en-cs' FORMAT 'X(50)' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0040 - FORMAT IN TABLE T_2040 NOT SUPPORTED ***/!!!,
C2 VARCHAR(255) COLLATE 'en-cs' 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": "06/17/2024" }}'
;
推奨事項¶
その他のサポートについては、サポートチーム snowconvert-support@snowflake.com にお問い合わせください