SnowConvert AI - Teradata - DML¶
このセクションでは、データ操作言語要素の変換リファレンスのドキュメントをご覧いただけます。
ステートメントの削除¶
ステートメントの削除 を見る
Teradataは FROM 句で複数のテーブルを呼び出すことをサポートしていますが、Snowflakeはサポートしていません。したがって、USING 句を使用して、条件に関係する余分なテーブルを参照する必要があります。
Teradata
削除
Snowflake
削除
既知の問題¶
1.DEL 省略形がサポートされていません¶
省略形はSnowflakeではサポートされていませんが、 DELETE に変更することで正しく翻訳されます。
集合演算子¶
SQL 集合演算子は、複数のクエリの結果セットを操作し、各クエリの結果を1つの結果セットにまとめます。
注釈
わかりやすくするため、出力コードの一部を省略しています。
セット演算子 を参照してください。
TeradataとSnowflakeの両方のセット演算子は同じ構文で、 INTERSECT ALL の句 ALL を除いて、 EXCEPT、 INTERSECT、 UNION のシナリオをサポートしています。これはSnowflakeではサポートされていないため、変換後に ALL の部分がコメントされたコードになる結果となっています。
Teradata
Intersect¶
Snowflake
Intersect¶
既知の問題¶
1.INTERSECT ALL がサポートされていません¶
Snowflakeでは INTERSECT ALL はサポートされておらず、 ALL の部分がコメントされます。
関連 EWIs¶
SSC-EWI-0040:ステートメントがサポートされていません。
ステートメントの更新¶
説明¶
テーブルの既存の行の列値を変更します。 (Teradata SQL 言語リファレンス UPDATE)
サンプルソースパターン¶
基本ケース¶
Teradata
更新
Snowflake
更新
フォワードエイリアスを使用した UPDATE¶
Teradataは宣言前のエイリアスの参照をサポートしていますが、Snowflakeはサポートしていません。このシナリオの変換は、参照されるテーブルを取り出し、参照するテーブル名のエイリアスを変更することです。
Teradata
更新
Snowflake
更新
UPDATE with target table in the FROM clause¶
Teradataは、 FROM 句でターゲットテーブルを定義することをサポートしています。Snowflakeでは、エイリアスの重複や曖昧な列参照エラーを回避するために、これは削除されています。
Teradata
更新
Snowflake
更新
関連 EWIs¶
関連 EWIs はありません。
修飾子付き¶
共通テーブル式( CTEs )とも呼ばれる複数の名前付きクエリのリストで WITH 修飾子を使用するSelectステートメント。
修飾子付き を見る
Snowflakeは、 CTEs (共通テーブル式)を複数持つ SELECT ステートメントで、Teradataの WITH 修飾子をサポートしています。Teradataは、 CTE の定義が宣言される前に参照されるかどうかに関係なく、どのような順序でもサポートしますが、Snowflakeでは、 CTE が別の CTE を呼び出す場合は、呼び出される前に定義する必要があります。次に、 WITH 内の変換された CTEs のシーケンスは、参照されていない CTEs、次に次の CTE を呼び出す CTE、というように並び替えられます。
WITH の呼び出しシーケンスにサイクルが検出された場合、 SSC-EWI-TD0077 の例に詳述されているように、シーケンスは変更されずに元のまま残されます。
以下の例では、n1とn2という2つの CTEs があり、n1はn2を参照しています。次に、Snowflakeではまずn2を対応する変換コードとして定義しなければなりません。
注釈
わかりやすくするため、出力コードの一部を省略しています。
Teradata
修飾子付き¶
Snowflake
修飾子付き¶
既知の問題¶
1.サイクルが見つかった場合、並べ替えは不可能¶
CTEs の参照が分析され、 CTEs の呼び出しの間にサイクルがある場合、 CTEs は順序付けされません。
関連 EWIs¶
関連 EWIs はありません。
ステートメントの挿入¶
テーブルに新しい行を追加する SQL ステートメント。
注釈
わかりやすくするため、出力コードの一部を省略しています。
ステートメントの挿入 を見る
Teradataでは、各テーブル列の値をインラインで代入する代替 INSERT 構文があります。この代替構造をSnowflakeでサポートするには、特別な変換が必要です。値のインライン代入は、Snowflake INSERT INTO ステートメントの VALUES(...) 部分に分離して配置されます。
Teradata
挿入¶
Snowflake
挿入¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs ¶
関連 EWIs はありません。
LOGGING ERRORS¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
注釈
関連性のないステートメント。
警告
このステートメントは関連性のない構文であるため、 移行から削除される ことに注意してください。つまり、Snowflakeでは必要ないということです。
説明¶
ステートメントを INSERT...SELECT として使用する際にエラーをログに記録するステートメント。以下の ドキュメント を参照してください。
サンプルソースパターン¶
LOGGING ERRORS¶
この例では、 LOGGING ERRORS は関係ない構文なので削除されていることに注意してください。構文はSnowflakeでは必須ではありません。
Teradata¶
Snowflake¶
INSERT INTO MY_TABLE SELECT
*
FROM
MY_SAMPLE;
LOGGING ALL ERRORS¶
この例では、 LOGGING ALL ERRORS は関係ない構文なので削除されていることに注意してください。構文はSnowflakeでは必須ではありません。
Teradata¶
Snowflake¶
LOGGING ERRORS WITH NO LIMIT¶
この例では、 LOGGING ERRORS WITH NO LIMIT は関係ない構文なので削除されていることに注意してください。構文はSnowflakeでは必須ではありません。
Teradata¶
Snowflake¶
LOGGING ERRORS WITH LIMIT OF¶
この例では、 LOGGING ERRORS WITH LIMIT OF は関係ない構文なので削除されていることに注意してください。構文はSnowflakeでは必須ではありません。
Teradata¶
Snowflake¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs ¶
関連 EWIs はありません。
ステートメントを選択¶
ステートメントを選択 を見る
Snowflakeは、いくつかの例外を除き、Teradataの SELECT 構文をサポートしています。主に、 SEL の省略形をサポートしていません。
Teradata
Sel
Snowflake
Select
Teradataは宣言前のエイリアスの参照をサポートしていますが、Snowflakeはサポートしていません。このシナリオの変換は、参照される列を取り出し、その列が参照する列名のエイリアスを変更することです。
Teradata
エイリアス
Snowflake
エイリアス
削除された句オプション¶
以下の句オプションはSnowflakeには関係ないため、移行時に削除されます。
Teradata |
Snowflake |
|---|---|
拡大 |
サポート対象外 |
ノーマライズ |
サポート対象外 |
チェックオプション付き(クエリ) |
サポート対象外 |
既知の問題¶
1.SEL 省略形がサポートされていません¶
省略形はSnowflakeではサポートされていませんが、 SELECT に変更することで正しく翻訳されます。
関連 EWIs¶
関連 EWIs はありません。
ANY 述語¶
警告
これは進行中の作業であり、将来的に変更が加えられる可能性があります。
説明¶
Teradataでは、比較演算または IN/NOT IN 述語で定量化が可能です。式とサブクエリが返す値のセット内の少なくとも1つの値の比較が真です。詳細情報については、以下の Teradataドキュメント を参照してください。
Teradata構文
Where量指定子:
Snowflake構文
SuccessPlaceholder
In subquery form, IN is equivalent to = ANY and NOT IN is equivalent to <> ALL. Review the following Snowflake documentation for more information.
個々の値を比較するには、
row constructors (括弧で括られた値のリスト)を比較するには、
値をサブクエリによって返される値と比較するには、
サンプルソースパターン¶
サンプルデータ¶
Teradata¶
クエリ¶
Snowflake¶
クエリ¶
Equal ANY predicate in WHERE clause ¶
Teradata
入力¶
出力¶
DeptNo |
|---|
100 |
500 |
100 |
300 |
Snowflake
入力¶
出力¶
DeptNo |
|---|
100 |
500 |
100 |
300 |
WHERE 句の他の比較演算子¶
他の比較演算子がある場合、同等の変換は、必要なロジックを持つサブクエリを追加することです。
Teradata
入力¶
出力¶
名前 |
DeptNo |
|---|---|
イブ |
100 |
アリス |
100 |
デイビッド |
200 |
ボブ |
300 |
Snowflake
入力¶
出力¶
NAME |
DEPTNO |
|---|---|
アリス |
100 |
イブ |
100 |
ボブ |
300 |
デイビッド |
200 |
WHERE 句内の IN ANY¶
Teradata
入力¶
出力¶
DeptNo |
|---|
100 |
500 |
100 |
300 |
Snowflake
入力¶
出力¶
DeptNo |
|---|
100 |
500 |
100 |
300 |
WHERE 句内の NOT IN ALL¶
Teradata
入力¶
出力¶
名前 |
DeptNo |
|---|---|
チャーリー |
500 |
ボブ |
300 |
Snowflake
入力¶
出力¶
名前 |
DeptNo |
|---|---|
チャーリー |
500 |
ボブ |
300 |
既知の問題¶
WHERE 句内の NOT IN ANY¶
Teradata
入力¶
出力¶
名前 |
DeptNo |
|---|---|
イブ |
100 |
チャーリー |
500 |
アリス |
100 |
デイビッド |
200 |
ボブ |
300 |
Snowflake
入力¶
出力¶
名前 |
DeptNo |
|---|---|
イブ |
100 |
チャーリー |
500 |
アリス |
100 |
デイビッド |
200 |
ボブ |
300 |
関連 EWIs¶
関連 EWIs はありません。
Expand On句¶
Teradata Expand On機能をSnowflakeに変換するための翻訳リファレンス
説明¶
Expand On句は、 期間 データ型を持つ列を拡大し、入力行の期間値に基づいて行の規則的な時系列を作成します。Expand On句の詳細情報については、 Teradataドキュメント を参照してください。
サンプルソースパターン¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
サンプルデータ¶
Teradata¶
Snowflake¶
Expand On句¶
期間列を秒単位で拡大するとします。このExpand On句には、アンカー期間拡大と間隔リテラル拡大があります。
アンカー期間拡大¶
Teradata¶
結果¶
ID |
BEGIN (bg) |
|---|---|
1 |
2022-05-23 10:15:21.0000 |
1 |
2022-05-23 10:15:22.0000 |
1 |
2022-05-23 10:15:23.0000 |
1 |
2022-05-23 10:15:24.0000 |
1 |
2022-05-23 10:15:25.0000 |
SnowflakeはExpand On句をサポートしていません。同じ結果と機能を再現するために、Teradataの SQL コードは CTE ブロックに含まれ、 EXPAND_ON_UDF および TABLE 関数を使用し、 FLATTEN 関数を使用して複数行を返し、 ROW_COUNT_UDF および DIFF_TTIME_PERIOD_UDF を使用して必要な行数を示し、 VALUE を返して、EXPAND_ON_UDF が異なる定期的な時系列を計算できるようにします。この CTE ブロックはExpand On句と同じexpand列エイリアスを返すので、期間データ型のどのような使用法でも結果を使用できます。
Snowflake¶
結果¶
ID |
PERIOD_BEGIN_UDF(bg) |
|---|---|
1 |
2022-05-23 10:15:21.0000 |
1 |
2022-05-23 10:15:22.0000 |
1 |
2022-05-23 10:15:23.0000 |
1 |
2022-05-23 10:15:24.0000 |
1 |
2022-05-23 10:15:25.0000 |
既知の問題¶
Expand On句は、間隔リテラル拡大を使用することができます。この場合、 SnowConvert AI は、この翻訳が計画されているというエラーを追加します。
間隔リテラル拡大¶
Teradata¶
結果¶
ID |
BEGIN(bg) |
|---|---|
1 |
2022-05-23 10:15:20.0000 |
1 |
2022-05-23 10:15:21.0000 |
1 |
2022-05-23 10:15:22.0000 |
1 |
2022-05-23 10:15:23.0000 |
1 |
2022-05-23 10:15:24.0000 |
Snowflake¶
関連 EWIs¶
SSC-EWI-0073: 機能等価性レビュー保留中。
SSC-EWI-TD0053:Snowflakeはperiodデータ型をサポートしておらず、すべてのperiodはvarcharとして処理されます。
ノーマライズ¶
Teradata Normalize機能をSnowflakeに変換するための翻訳リファレンス
説明¶
NORMALIZE は、最初の期間の列の期間値が一致または重複する場合、個々の期間値を包含する期間を形成するために結合されることを指定します。Normalize句の詳細情報については、 Teradataドキュメント を参照してください。
サンプルソースパターン¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
サンプルデータ¶
Teradata¶
Snowflake¶
Normalize句¶
Normalize句を従業員IDで使用したいとします。
Teradata¶
結果¶
EMP_ID |
DURATION |
|---|---|
20 |
(2010-03-10, 2010-07-20) |
10 |
(2010-01-10, 2010-08-18) |
20 |
(2020-05-10, 2010-09-20) |
Snowflake¶
結果¶
EMP_ID |
PUBLIC.PERIOD_UDF(MIN(START_DATE), MAX(END_DATE)) |
|---|---|
20 |
2020-05-10*2010-09-20 |
20 |
2010-03-10*2010-07-20 |
10 |
2010-01-10*2010-08-18 |
既知の問題¶
Normalize句には、** ON MEETS OR OVERLAPS 、 ON OVERLAPS または ON OVERLAPS OR MEETS **を使用することができます。これらの場合、 SnowConvert AI は、この翻訳が将来予定されているというエラーを追加します。
Teradata¶
Snowflake¶
関連 EWIs¶
SSC-EWI-0073: 機能等価性レビュー保留中。
SSC-EWI-TD0079:必要なPeriod型列が見つかりませんでした。
SSC-EWI-TD0053:Snowflakeはperiodデータ型をサポートしておらず、すべてのperiodはvarcharとして処理されます。
Reset When¶
説明¶
Reset Whenは、 SQL ウィンドウ関数が動作するパーティションを、特定の条件に基づいて決定します。条件がTrueに評価されると、既存のウィンドウパーティション内に新しい動的サブパーティションが作成されます。Reset Whenの詳細情報については、 Teradataドキュメントを参照してください。
サンプルソースパターン¶
サンプルデータ¶
Teradata¶
クエリ
結果
account_id |
month_id |
balance |
|---|---|---|
1 |
1 |
60 |
1 |
2 |
99 |
1 |
3 |
94 |
1 |
4 |
90 |
1 |
5 |
80 |
1 |
6 |
88 |
1 |
7 |
90 |
1 |
8 |
92 |
1 |
9 |
10 |
1 |
10 |
60 |
1 |
11 |
80 |
1 |
12 |
10 |
Snowflake¶
クエリ
結果
account_id |
month_id |
balance |
|---|---|---|
1 |
1 |
60 |
1 |
2 |
99 |
1 |
3 |
94 |
1 |
4 |
90 |
1 |
5 |
80 |
1 |
6 |
88 |
1 |
7 |
90 |
1 |
8 |
92 |
1 |
9 |
10 |
1 |
10 |
60 |
1 |
11 |
80 |
1 |
12 |
10 |
Reset When¶
各アカウントについて、毎月の連続した残高増加のシーケンスを分析したいとします。ある月の残高が前月の残高以下である場合、カウンターをゼロにリセットし、再スタートする必要があります。
このデータを分析するために、Teradata SQL は以下のように、ネストされた集計とReset Whenステートメントを持つウィンドウ関数を使用します。
Teradata¶
クエリ
結果
| account_id | month_id | balance | balance_increase |
|---|---|---|---|
| 1 | 1 | 60 | 0 |
| 1 | 2 | 99 | 1 |
| 1 | 3 | 94 | 0 |
| 1 | 4 | 90 | 0 |
| 1 | 5 | 80 | 0 |
| 1 | 6 | 88 | 1 |
| 1 | 7 | 90 | 2 |
| 1 | 8 | 92 | 3 |
| 1 | 9 | 10 | 0 |
| 1 | 10 | 60 | 1 |
| 1 | 11 | 80 | 2 |
| 1 | 12 | 10 | 0 |
Snowflake¶
Snowflakeはウィンドウ関数のReset When句をサポートしていません。同じ結果を再現するには、Teradata SQL コードを、ネイティブ SQL 構文とネストされたサブクエリを使用して、以下のように翻訳する必要があります。
クエリ
結果
| account_id | month_id | balance | balance_increase |
|---|---|---|---|
| 1 | 1 | 60 | 0 |
| 1 | 2 | 99 | 1 |
| 1 | 3 | 94 | 0 |
| 1 | 4 | 90 | 0 |
| 1 | 5 | 80 | 0 |
| 1 | 6 | 88 | 1 |
| 1 | 7 | 90 | 2 |
| 1 | 8 | 92 | 3 |
| 1 | 9 | 10 | 0 |
| 1 | 10 | 60 | 1 |
| 1 | 11 | 80 | 2 |
| 1 | 12 | 10 | 0 |
SnowflakeのReset When機能をサポートするには、2つのネストされたサブクエリが必要です。
内部サブクエリでは、動的パーティションインディケータ(dynamic_part)が作成され、入力されます。ある月の残高が前月の残高以下の場合、dynamic_partは1にセットされ、それ以外の場合、0にセットされます。
次のレイヤーでは、 SUM ウィンドウ関数の結果として、new_dynamic_part属性が生成されます。
最後に、既存のパーティション属性(account_id)に新しいパーティション属性(動的パーティション)としてnew_dynamic_partを追加し、Teradataと同じ ROW_NUMBER()ウィンドウ関数を適用します。
これらの変更後、SnowflakeはTeradataと同じ出力を生成します。
条件付きウィンドウ関数が列の場合のReset When¶
RESET WHEN 条件で使用されるウィンドウ関数が、 previous という列として定義されていることを除けば、上記と同じ例です。このバリエーションでは、前の例のように previous_value を定義する必要がなくなるため、変換がわずかに変わります。それは同じ回避策です。
Teradata¶
クエリ
結果
| account_id | month_id | balance | previous | balance_increase |
|---|---|---|---|---|
| 1 | 1 | 60 | 0 | |
| 1 | 2 | 99 | 60 | 1 |
| 1 | 3 | 94 | 99 | 0 |
| 1 | 4 | 90 | 94 | 0 |
| 1 | 5 | 80 | 90 | 0 |
| 1 | 6 | 88 | 80 | 1 |
| 1 | 7 | 90 | 88 | 2 |
| 1 | 8 | 92 | 90 | 3 |
| 1 | 9 | 10 | 92 | 0 |
| 1 | 10 | 60 | 10 | 1 |
| 1 | 11 | 80 | 60 | 2 |
| 1 | 12 | 10 | 80 | 0 |
Snowflake¶
クエリ
無題
| account_id | month_id | balance | previous | balance_increase |
|---|---|---|---|---|
| 1 | 1 | 60 | 0 | |
| 1 | 2 | 99 | 60 | 1 |
| 1 | 3 | 94 | 99 | 0 |
| 1 | 4 | 90 | 94 | 0 |
| 1 | 5 | 80 | 90 | 0 |
| 1 | 6 | 88 | 80 | 1 |
| 1 | 7 | 90 | 88 | 2 |
| 1 | 8 | 92 | 90 | 3 |
| 1 | 9 | 10 | 92 | 0 |
| 1 | 10 | 60 | 10 | 1 |
| 1 | 11 | 80 | 60 | 2 |
| 1 | 12 | 10 | 80 | 0 |
既知の問題¶
RESET WHEN 句には、その条件などいくつかのバリエーションがあります。現在、 SnowConvert AI はバイナリ条件( <=, >=、<>または=)のみをサポートしています。 IS NOT NULL のように他の型では、 SnowConvert AI は RESET WHEN 句を削除し、次の例に示すように、Snowflakeではサポートされていないため、エラーメッセージを追加します。
Teradata¶
クエリ
Snowflake¶
クエリ
関連 EWIs¶
SSC-EWI-TD0077: RESET WHEN 句はその条件のため、このシナリオではサポートされていません。
SAMPLE 句¶
説明¶
Teradataの SAMPLE 句は、処理する行数を減らし、1つ以上の行のサンプルを端数のリストまたは行数のリストとして返します。この句は SELECT クエリで使用されます。詳細情報については、以下の Teradataドキュメント を参照してください。
Teradata構文
Snowflake構文
詳細情報については、以下の Snowflakeドキュメント を参照してください。SAMPLE と TABLESAMPLE は同義です。
条件:
Snowflakeでは、以下のキーワードは互換性があります。
SAMPLE | TABLESAMPLEBERNOULLI | ROWSYSTEM | BLOCKREPEATABLE | SEED
以下のテーブルでキーの違いを確認してください。
SAMPLE 動作 |
Teradata |
Snowflake |
|---|---|---|
確率によるサンプル |
分数の説明としても知られています。0,1から1の間の小数でなければなりません。 |
0から100までの小数点。 |
固定行数 |
カウントの説明としても知られています。サンプリングする行数を決める正の整数です。 |
テーブルからサンプルする行数(最大1,000,000)を指定します。 |
繰り返し行 |
これは |
|
サンプリング方法 |
Proportional および |
|
サンプルソースパターン¶
サンプルデータ¶
Teradata¶
クエリ
Snowflake¶
クエリ
SAMPLE 句¶
固定行数¶
この例では、行数は一定ですが、各実行で同じ結果になるとは限らないことに注意してください。
Teradata
入力
出力 2行。
Snowflake
入力
出力 2行。
確率に基づく行数¶
このオプションは、確率セットに応じてさまざまな行を返します。
Teradata
入力
出力 各行の25%の確率:出力1行。
Snowflake
入力
出力 各行の25%の確率:出力1行。
既知の問題¶
置換による固定行数¶
このオプションは固定行数を返し、行の繰り返しを許可します。Snowflakeでは、テーブルの行数以上のサンプルをリクエストすることはできません。
Teradataサンプル
入力
出力
EmpNo |
名前 |
DeptNo |
|---|---|---|
5 |
イブ |
100 |
5 |
イブ |
100 |
5 |
イブ |
100 |
4 |
デイビッド |
200 |
4 |
デイビッド |
200 |
3 |
チャーリー |
500 |
1 |
アリス |
100 |
1 |
アリス |
100 |
条件付きサンプリング¶
Snowflakeには条件付きサンプリングはありません。これは CTE を使用することで実現できます。
Teradataサンプル
入力
出力
EmpNo |
名前 |
DeptNo |
|---|---|---|
3 |
チャーリー |
500 |
4 |
デイビッド |
200 |
2 |
ボブ |
300 |
関連 EWIs¶
SSC-EWI-0021:構文はSnowflakeではサポートされていません。