Snowflake Data Cloud Connector > 部 III: Snowflake Data Cloud Connectorを使用したSQL ELT > マッピングタスクのSQL ELTの最適化 > Snowflake Data Cloudでのトランスフォーメーション
  

Snowflake Data Cloudでのトランスフォーメーション

SQL ELTの最適化を設定すると、データ統合は、設定済みのトランスフォーメーションをSnowflakeにプッシュしようとします。
完全なSQL ELTを使用して、次のようなトランスフォーメーションをSnowflakeにプッシュすることができます。
*詳細モードのマッピングには適用されません。
注: ルータートランスフォーメーションはソースSQL ELTにのみ適用することができ、階層プロセッサトランスフォーメーションは詳細モードのマッピングにのみ適用することができます。
トランスフォーメーションの設定に関する詳細については、データ統合のドキュメントにある「トランスフォーメーション」を参照してください。

アグリゲータトランスフォーメーション

完全なSQL ELTの最適化を設定して、Snowflakeで処理するアグリゲータトランスフォーメーションをプッシュできます。

集計計算

次の集計計算を実行できます。

受信ポート

アグリゲータトランスフォーメーションを設定し、受信ポートが集計関数またはマッピングのグループ化フィールドで使用されていない場合、グループ化または集計関数の一部ではないカラムに対してANY_VALUE()関数が使用されます。この場合、ANY_VALUE()関数はポートから任意の値を返すため、出力は確定的ではありません。ただし、詳細モードでは、受信ポートがグループ化フィールドの一部でない場合、MAX()関数が使用されます。また、アグリゲータトランスフォーメーションにより、値が1の追加のカラムが生成されます。ただし、このカラムはSQL ELTクエリの挿入部分では削除されるため、使用されません。

式トランスフォーメーション

完全なSQL ELTの最適化を設定して、Snowflakeで処理する式トランスフォーメーションをプッシュできます。
マッピング内の各ソースに式トランスフォーメーションを追加してから、マッピング内のダウンストリームに結合することができます。さらに、トランスフォーメーションから分岐してから、マッピングのダウンストリームのトランスフォーメーションに分岐する複数の式トランスフォーメーションを追加できます。
式トランスフォーメーションを設定するときは、次のルールを考慮して、変数を式に含めてください。

階層プロセッサトランスフォーメーション

詳細モードでは、Amazon S3 V2またはMicrosoft Azure Data Lake Storage Gen2ソースから階層入力またはリレーショナル入力を読み取り、リレーショナルまたは階層出力としてSnowflakeターゲットに書き込むように階層プロセッサトランスフォーメーションを設定できます。
階層プロセッサトランスフォーメーションは、構造または配列を表す階層フィールドを処理します。
次のような制限付きで階層プロセッサトランスフォーメーションを設定できます。

ルックアップトランスフォーメーション

完全なSQL ELTの最適化を設定して、ルックアップトランスフォーメーションをプッシュし、Snowflakeで処理できます。接続済みのルックアップおよび未接続のルックアップをプッシュできます。
マッピングに未接続のルックアップが含まれている場合は、未接続のルックアップ関数を他の式関数とネストすることもできます。例えば、:LKP.U_LOOKUP(Upper(argument1), argument)のようにすることができます。

ルックアップオブジェクト

ルックアップを設定するときは、次のルールを考慮してください。

接続済みのルックアップ

Snowflake Data Cloudのソースとターゲットを使用したマッピングで、ルックアップオブジェクトの[複数一致]オプションを[すべての行を返す]に設定します。

未接続のルックアップ

接続されていないルックアップトランスフォーメーションを設定する場合は、次のルールを考慮してください。

接続されたルックアップと未接続のルックアップでの複数一致の動作

接続済みのルックアップまたは未接続のルックアップを含むマッピングに対してSQL ELTの最適化を有効にする場合は、次のガイドラインに従う必要があります。

FileNameポート

Amazon S3ソースとSnowflakeターゲットを含むマッピングでAmazon S3ソースのルックアップを設定した場合は、Amazon S3ソースおよびルックアップオブジェクトからFileNameポートを削除します。FileNameポートは使用できません。

ルックアップクエリオブジェクト

Snowflakeのデータをルックアップするためのマッピングでルックアップトランスフォーメーションのクエリとしてルックアップオブジェクトを使用する場合は、詳細ルックアッププロパティまたはSnowflake Data Cloud接続の追加のJDBC URLパラメータでデータベースとスキーマを指定する必要があります。

ノーマライザトランスフォーメーション

複数回発生するデータのインスタンスごとに行を返すように、マッピングでノーマライザトランスフォーメーションを設定できます。
例えば、リレーショナルソースに、四半期の売上データが格納された4つのフィールドがあるとします。この場合、四半期ごとに別個の出力行を生成するように、ノーマライザトランスフォーメーションを設定することができます。
詳細モードでは、次のような制限付きでノーマライザトランスフォーメーションを設定できます。

ルータートランスフォーメーション

ソースSQL ELTの最適化を設定して、ルータートランスフォーメーションをデータベースにプッシュして処理することができます。
ルータートランスフォーメーションを設定する場合は、1つの出力グループのみをターゲットトランスフォーメーションに接続またはマッピングします。

シーケンスジェネレータトランスフォーメーション

シーケンスジェネレータトランスフォーメーションを設定すると、シーケンスジェネレータトランスフォーメーションに続くトランスフォーメーションでNEXTVALポートを単一または複数のポートに接続できます。
次のような制限付きで、シーケンスジェネレータトランスフォーメーションをプッシュできます。

詳細モードおよびSQL ELTモードのマッピングでシーケンスジェネレータトランスフォーメーションを使用するためのガイドライン

詳細モードおよびSQL ELTモードでのシーケンスジェネレータトランスフォーメーションは、マッピングの同じルールに従います。ただし、詳細モードおよびSQL ELTモードのマッピングでシーケンスジェネレータトランスフォーメーションを使用するには、Snowflakeのシーケンスの名前を使用して、マッピングタスクプロパティに追加のプロパティを設定する必要があります。
  1. 1タスクプロパティの[ランタイムオプション]タブで、[詳細セッションプロパティ]セクションに移動します。
  2. 2カスタムプロパティを追加し、次のセッションプロパティ値を次の形式で入力します。
  3. Pushdown.<Sequence transformation name in mapping>.SequenceName=<sequence name to create in Snowflake>
  4. 例:
  5. Pushdown.Seq_SF.SequenceName=snowflake_first_sequence&:Pushdown.sequence_second.SequenceName=SECOND_SEQUENCE&:Pushdown.seq_third.SequenceName=THIRD_SEQ
複数のシーケンスジェネレータトランスフォーメーションを使用する場合、シーケンスごとにSnowflakeデータベースに作成されるシーケンスオブジェクトの名前は一意である必要があります。名前が一意でない場合、トランスフォーメーションはCREATE SEQUENCE IF NOT EXISTSクエリで同じ名前を使用して2回実行されます。最初のシーケンスは想定どおりに実行されますが、最初のシーケンスと同じ名前を持つ2番目のシーケンスによって最初のシーケンスがオーバーライドされることはありません。したがって、2番目のシーケンスに生成されるnextValueは誤った値となります。ただし、シーケンスオブジェクトに対して一意の名前を使用してシーケンスを実行した場合、マッピングを実行する回数に関係なく、そのシーケンスが再度更新されることはありません。
注: SQL ELTの最適化を無効にしてマッピングを実行すると、シーケンス値は最初の開始値から再開されます。マッピングを削除した場合は、Snowflakeデータベースからもシーケンスを削除する必要があります。

SQLトランスフォーメーション

SQLトランスフォーメーションは、特定の関数と共有シーケンスをプッシュするためにのみ使用できます。

関数を使用したクエリの実行

入力したクエリに関数をSQLトランスフォーメーションに含めて、Snowflakeターゲットエンドポイントでクエリを実行できます。
関数をプッシュするには、SELECT句のSQL文のみを使用する必要があります。選択クエリまたは関数でカラム名を指定します。「SELECT * FROM TABLE」などの文を使用して関数をプッシュしないでください。
入力したクエリでは、次のような関数を使用できます。
SQLトランスフォーメーションでCURRENT_ROLE、CURRENT_DATABASE、およびCURRENT_SCHEMA関数を使用するには、Snowflake Data Cloud接続の追加のJDBCパラメータフィールドにデータベース、ロール、およびスキーマ名を指定します。接続に値を指定しない場合、データ統合によってターゲットにNULLが挿入されます。

共有シーケンスの再利用

SQLトランスフォーメーションで定義した共有シーケンスを使用して、マッピングをSnowflakeエンドポイントにプッシュできます。データ統合は、Snowflakeソースと同じ順序でデータをターゲットに書き込みます。
Snowflakeから共有シーケンスを取得し、SQLトランスフォーメーションで入力したクエリでシーケンスを定義します。
入力したクエリの共有シーケンスを次の構文で指定します: Select <Snowflake_schema_name>.<Snowflake_database_name>.<sequence_name>.NEXTVAL

ユーザー定義関数

SnowflakeのJavaまたはSQLユーザー定義関数(UDF)から読み取るように、SQLトランスフォーメーションでカスタムクエリを設定できます。
UDFには次のガイドラインが適用されます。

共有体トランスフォーメーション

次のような制限付きで、共有体トランスフォーメーションをプッシュできます。

アップデートストラテジトランスフォーメーション

アップデートストラテジトランスフォーメーションを使用することはできません。
代わりにターゲットトランスフォーメーションの更新および更新/挿入操作を使用して、Snowflakeに書き込みを行うことができます。