マッピングタスクのSQL ELTの最適化
マッピングタスクからSQL ELTの最適化を設定して、マッピングのパフォーマンスを向上させることができます。
マッピングを作成した後に、マッピングをマッピングタスクに追加して、マッピングタスクでSQL ELTの最適化を設定します。データ統合によるSQL ELTの最適化の処理方法は、[ランタイムオプション]タブの[SQL ELTの最適化のフォールバックオプション]メニューで選択できます。
このタスクにより、トランスフォーメーションロジックがAmazon Redshiftクエリに変換され、クエリがAmazon Redshiftに送信されて、マッピングロジックがAmazon Redshiftデータベースで処理されます。
マッピングに複数のパイプラインが含まれている場合は、フローの実行順序を定義して、パイプラインからターゲットを特定の順序でロードすることができます。
詳細モードのマッピングを実行した場合、SQL ELTの最適化は使用できません。
SQL ELTの最適化のタイプ
SQL ELTの最適化を適用すると、タスクのプロパティで指定した最適化のタイプに基づいて、タスクは、トランスフォーメーションロジックをソースデータベースまたはターゲットデータベースにプッシュします。データ統合は、トランスフォーメーションロジックをSQLクエリに変換するか、Amazon RedshiftコマンドをAmazon Redshiftデータベースに変換します。データベースでは、そのSQLクエリまたはAmazon Redshiftコマンドを実行してトランスフォーメーションを処理します。
マッピングでは、次のタイプのSQL ELTの最適化を設定することができます。
- なし
- このタスクは、トランスフォーメーションロジックをAmazon Redshiftデータベースにプッシュダウンしません。
- Full
- このタスクは、ターゲットデータベースで処理するために可能な限り多くのトランスフォーメーションロジックをプッシュします。トランスフォーメーションがマッピングでサポートされていない場合、タスクは、SQL ELTの最適化でトランスフォーメーションがサポートされるポイントまでマッピングロジックを部分的にプッシュダウンします。
- ソース
- このタスクは、ソースデータベースで処理するために可能な限り多くのトランスフォーメーションロジックをプッシュダウンします。SQL ELTの最適化を選択すると、タスクは、ターゲットトランスフォーメーションに到達するまで、設定されたすべてのトランスフォーメーションのトランスフォーメーションロジックをマッピングのダウンストリームにプッシュします。また、ターゲットトランスフォーメーションロジックを省略し、残りのマッピングロジックをソースデータベースにプッシュダウンします。
ソースSQL ELTの最適化と完全なSQL ELTの最適化を使用したデータ統合の動作
Amazon Redshiftに対して読み取りと書き込みを行うマッピングに対して完全なSQL ELTの最適化またはソースSQL ELTの最適化を選択すると、データ統合はソースからターゲットへのマッピング、またはダウンストリームトランスフォーメーションに到達するまでマッピングを分析して、処理用にマッピングロジックの一部のみまたは全体をプッシュダウンするかを決定します。
マッピング内のすべてのトランスフォーメーションがSQL ELTの最適化でサポートされている場合、タスクはマッピングロジック全体をデータベースにプッシュダウンします。
トランスフォーメーションがマッピングでサポートされていない場合、タスクは、SQL ELTの最適化でトランスフォーメーションがサポートされるポイントまでマッピングロジックを部分的にプッシュダウンします。データ統合は、プッシュダウンする必要のあるトランスフォーメーションロジックのSELECTステートメントを生成して実行します。次に、データ統合サービスはこのSQLクエリの結果が読み込み、マッピングの残りのトランスフォーメーションを処理します。
SQL ELTの最適化のシナリオ
マッピングでAmazon Redshift V2コネクタまたはAmazon Redshift ODBCコネクタを使用してSQL ELTの最適化を設定できます。
マッピングでAmazon Redshift V2コネクタを使用する場合は、次のようなシナリオでSQL ELTの最適化の設定を使用できます。
注: 詳細モードのマッピングに基づくマッピングタスクに対してSQL ELTの最適化を設定することはできません。
ソースエンドポイントとターゲットエンドポイント | マッピングでサポートされるSQL ELTの最適化のシナリオ | SQL ELTの最適化のタイプ |
---|
Amazon S3ソース Amazon Redshiftターゲット | Amazon S3から読み取り、Amazon Redshift V2接続を使用してAmazon Redshiftに書き込みます。 データをソースからターゲットに読み取るときに、この接続はAWSコマンドを使用します。 | 完全 |
Amazon Redshiftソース Amazon Redshiftターゲット | Amazon Redshift V2接続を使用して、Amazon Redshiftから読み取り、Amazon Redshiftに書き込みます。 ソースとターゲットは、同じクラスタ領域または異なるクラスタ領域に存在することができます。 | ソース、完全 注: Secure Agentは、処理用のマッピングロジック全体、または必要に応じて部分的なマッピングロジックのみをAmazon Redshiftにプッシュします。 |
Amazon Redshiftソース | Amazon Redshift V2接続を使用してAmazon Redshiftから読み取り、他のターゲットに書き込みます。 | ソース |
注: Secure AgentまたはHosted Agentを使用して、SQL ELTの最適化が設定されたマッピングを実行できます。 |
注: Amazon Redshift ODBC接続を使用してAmazon Redshiftに対してデータの読み取りおよび書き込みを行うマッピングに対してSQL ELTを設定できます。マッピングでAmazon Redshift V2接続を使用して、SQL ELTの最適化を設定することをお勧めします。Amazon Redshift V2接続を使用して特定のトランスフォーメーションロジックをプッシュダウンできない場合は、Amazon Redshift ODBC接続を使用したSQL ELTの最適化の設定を試すことができます。
SQL ELTの互換性
トランスフォーメーション、関数、および演算子をデータベースにプッシュするようにタスクを設定できます。
SQL ELTの最適化を使用した場合、Secure Agentはデータベース内の同等の演算子、関数を特定することで、トランスフォーメーションの式を変換します。対応する演算子および関数が存在しない場合、Secure Agentはトランスフォーメーションロジックを処理します。
Amazon Redshift V2での関数
SQL ELTの最適化を使用した場合、Secure Agentはデータベース内の同等の関数を特定することで、トランスフォーメーションの式を変換します。同等の関数がない場合、Secure Agentはトランスフォーメーションロジックを処理します。
次の表に、Amazon Redshiftデータベースで使用できるSQL ELT関数を示します。Xの付いたカラムは、関数をAmazon Redshiftデータベースにプッシュできることを示します。ダッシュ(-)記号の付いたカラムは、関数をデータベースにプッシュできないことを示しています。
機能 | SQL ELT | 機能 | SQL ELT | 機能 | SQL ELT |
---|
ABORT() | - | INITCAP() | X | REG_MATCH() | X |
ABS() | X | INSTR() | X | REG_REPLACE | X |
ADD_TO_DATE() | X | IS_DATE() | - | REPLACECHR() | X |
AES_DECRYPT() | - | IS_NUMBER() | X | REPLACESTR() | X |
AES_ENCRYPT() | - | IS_SPACES() | X | REVERSE() | - |
ASCII() | X | ISNULL() | X | ROUND(DATE) | - |
AVG() | X | LAST() | - | ROUND(NUMBER) | X |
CEIL() | X | LAST_DAY() | X | RPAD() | X |
CHOOSE() | - | LEAST() | - | RTRIM() | X |
CHR() | X | LENGTH() | X | SET_DATE_PART() | - |
CHRCODE() | - | LN() | X | SIGN() | X |
COMPRESS() | - | LOG() | X | SIN() | X |
CONCAT() | X | LOOKUP() | X | SINH() | - |
COS() | X | LOWER() | X | SOUNDEX() | - |
COSH() | - | LPAD() | X | SQRT() | X |
COUNT() | X | LTRIM() | X | STDDEV() | X |
CRC32() | - | MAKE_DATE_TIME() | - | SUBSTR() | X |
CUME() | - | MAX() | X | SUM() | X |
DATE_COMPARE() | X | MD5() | X | SYSTIMESTAMP() | X |
DATE_DIFF() | X | MEDIAN() | X | TAN() | X |
DECODE() | X | METAPHONE() | - | TANH() | - |
DECODE_BASE64() | - | MIN() | X | TO_BIGINT | X |
DECOMPRESS() | - | MOD() | X | TO_CHAR(DATE) | X |
ENCODE_BASE64() | - | MOVINGAVG() | - | TO_CHAR(NUMBER) | X |
EXP() | X | MOVINGSUM() | - | TO_DATE() | X |
FIRST() | - | NPER() | - | TO_DECIMAL() | X |
FLOOR() | X | PERCENTILE() | - | TO_FLOAT() | X |
FV() | - | PMT() | - | TO_INTEGER() | X |
GET_DATE_PART() | X | POWER() | X | TRUNC(DATE) | X |
GREATEST() | - | PV() | - | TRUNC(NUMBER) | X |
IIF() | X | RAND() | - | UPPER() | X |
IN() | X | RATE() | - | VARIANCE() | X |
INDEXOF() | - | REG_EXTRACT() | - | | |
Amazon Redshift V2での演算子
SQL ELTの最適化を使用した場合、データ統合はデータベース内で同等の演算子を特定することで、トランスフォーメーションの式を変換します。対応する演算子が存在しない場合は、データ統合がトランスフォーメーションロジックを処理します。
完全なSQL ELTの最適化を使用して、これらの演算子をAmazon Redshiftデータベースにプッシュすることができます。
次の表に、Amazon Redshiftデータベースにプッシュできる演算子を示します。
演算子 | 演算子 |
---|
+ | = |
- | >= |
* | <= |
/ | ! = |
% | AND |
|| | OR |
> | NOT |
< | |
Amazon Redshift V2を使用した変数
完全なSQL ELTを使用して、式トランスフォーメーションでSYSDATE変数をAmazon Redshiftデータベースにプッシュできます。
注: 完全なSQL ELTの最適化を使用してSYSDATE変数をプッシュする場合、この変数はAmazon Redshiftクラスタのdate/timeデータ型に対応しますが、プッシュダウンの最適化を行わないマッピングの場合、SYSDATE変数はエージェントのdate/timeデータ型に対応します。
SQL ELTの最適化の設定
マッピングを最適化するには、マッピングをタスクに追加してから、マッピングタスクでSQL ELTの最適化を設定します。
1マッピングタスクを作成します。
2[ランタイムオプション]タブのSQL ELTの最適化セクションで、SQL ELTの最適化の値を[完全]または[ソース]に設定します。
SQL ELTの最適化は、Amazon Redshiftソースから読み取りを行う場合にのみ使用します。
注: 最適化コンテキストタイプオプションは、Amazon Redshift V2マッピングタスクには適用されません。
3完全なSQL ELTの最適化が使用できない場合は、[SQL ELTの最適化のフォールバックオプション]メニューで、データ統合によるSQL ELTの最適化の処理方法を選択します。
- - 部分的なSQL ELTの最適化。デフォルト。データ統合はトランスフォーメーションロジックを可能な限りソースデータベースとターゲットデータベースにプッシュします。データベースにプッシュできないトランスフォーメーションロジックすべてが処理されます。部分的なSQL ELTの最適化は、Amazon Redshiftに対して読み取りおよび書き込みを行う場合にのみ使用できます。
- - 非SQL ELTの最適化。タスクはSQL ELTの最適化を使用せずに実行されます。
- - タスクの失敗。データ統合はタスクに失敗します。
注: フォールバックオプションは、詳細モードのマッピングには適用されません。
マッピングタスクの実行時に、トランスフォーメーションロジックがAmazon Redshiftデータベースにプッシュされます。SQL ELTの最適化の実行を確認するには、ジョブのセッションログをチェックします。[マイジョブ]ページで、開始したジョブを監視することができます。
Amazon Redshift V2マッピングのトランスフォーメーション
SQL ELTの最適化を設定すると、Secure Agentは、Amazon Redshiftに対する設定済みのトランスフォーメーションのプッシュを試行します。
次のリストに、Amazon Redshiftにプッシュダウンできるトランスフォーメーションの利用可否を示します。
- •アグリゲータ
- •式
- •フィルタ
- •ジョイナ
- •ルックアップ
- •ソーター
- •SQL
- •ルータ
- •共有体
アグリゲータトランスフォーメーション
完全なSQL ELTの最適化を設定し、アグリゲータトランスフォーメーションをプッシュしてAmazon Redshiftで処理することができます。
集計計算
次の集計計算を実行できます。
- •AVG
- •COUNT
- •MAX
- •MIN
- •MEDIAN
- •SUM
- •VARIANCE
受信フィールド
アグリゲータトランスフォーメーションを設定し、入力フィールドが集計関数またはグループ化フィールドで使用されていない場合、ANY_VALUE()関数はフィールドからの値を返すため、出力は確定的ではありません。
式トランスフォーメーション
完全なSQL ELTの最適化を設定し、式トランスフォーメーションをプッシュしてAmazon Redshiftで処理することができます。
マッピング内の各ソースに式トランスフォーメーションを追加してから、マッピング内のダウンストリームに結合することができます。さらに、トランスフォーメーションから分岐してから、マッピングのダウンストリームのトランスフォーメーションに分岐する複数の式トランスフォーメーションを追加できます。
式トランスフォーメーションを設定するときは、次のルールを考慮して、変数を式に含めてください。
- •前の行の処理中に割り当てられた値を現在の行の計算に使用している場合、変数を使用することはできません。この場合、マッピングはSQL ELTの最適化を使用せずに実行されます。
- •変数はネストできますが、式で定義する前に変数を参照することはできません。
変数がこの順序で定義されていない場合、マッピングはSQL ELTの最適化を使用せずに実行されます。
例:
var: AGEPLUS2 = AGEPLUS1 + 1
var: AGEPLUS1 = AGE + 1
out: NEXTAGE = AGEPLUS2 + 1
ここで、AGE +1は後で定義されます。最初の変数のAGEPLUS2はAGEPLUS1を参照しており、未解決のままです。
これを解決するには、次の順序で変数を指定します。
var: AGEPLUS1 = AGE + 1
var: AGEPLUS2 = AGEPLUS1 + 1
out: NEXTAGE = AGEPLUS2 + 1
- •変数は、循環型の式またはそれ自体を参照する式を持つことはできません。
例:
var: AGEPLUS1 = AGEPLUS2 + 1
var: AGEPLUS2 = AGEPLUS1 + 1
out: NEXTAGE= AGEPLUS2
ここで、AGEPLUS1はAGEPLUS2を参照し、未解決のままです。
ジョイナトランスフォーメーション
2つのAmazon S3ソースまたは2つのAmazon Redshiftソース間でジョイナトランスフォーメーションを設定できます。
ルックアップトランスフォーメーション
完全なSQL ELTの最適化を設定し、ルックアップトランスフォーメーションをプッシュしてAmazon Redshiftで処理することができます。接続済みのルックアップおよび未接続のルックアップをプッシュできます。
マッピングでルックアップを設定する場合は、次のルールを考慮してください。
- •使用されるソースがAmazon S3の場合にのみ、Amazon S3へのルックアップを設定できます。
- •使用されるソースがAmazon S3またはAmazon Redshiftである場合は、Amazon Redshiftへのルックアップを設定できます。
ソータートランスフォーメーション
完全なSQL ELTの最適化を設定し、ソータートランスフォーメーションをプッシュしてAmazon Redshiftで処理することができます。
ソータートランスフォーメーションを選択する際に、適用できるのは次のようなソータの詳細プロパティのみです。
- •重複なし。重複する行を削除して、個別のクエリを作成できます。
- •NULLを下として扱う。NULL値を持つカラムに基づいて、クエリ内のカラムをソートすることができます。カラムはクエリ内でのみ並べ替えることができます。ソートの順序は、Redshiftターゲットには適用されません。
SQLトランスフォーメーション
SQLトランスフォーメーションを使用して、Redshiftがサポートするスカラ関数をAmazon Redshiftにプッシュできます。
マッピングに対してSQL ELTの最適化を設定する場合は、SQLトランスフォーメーションでSQLユーザー定義関数(UDF)を使用し、Amazon Redshiftターゲットエンドポイントでクエリを実行できます。
関数をプッシュダウンする場合に使用できるのは、SELECT句のSQL文のみです。次のスニペットは、単純なSELECT SQLクエリの構文を示しています。
SELECT <function_name1>(~Arg~), <function_name2> (~Arg~)...
対応するクエリを次の形式で指定する必要があります。
select <Redshift_supported_scalar_function1> (~Arg~), <Redshift_supported_scalar_function2> (~Arg~)
次のような制限付きで、SQLトランスフォーメーションをプッシュできます。
- •SQLトランスフォーメーションで設定できるのはSQLクエリのみです。Amazon RedshiftにSQL ELTの最適化を設定した場合、ストアドプロシージャを有効にすることはできません。
- •SQLクエリは、「FROM」引数や「WHERE」引数のない単純なSELECT文でなければなりません。SQLトランスフォーメーションは、単純なSELECT文の関数のみをサポートします。
- •SELECTクエリを指定する場合は、関数に基づいてカラム名とカラム数も指定する必要があります。例えば、クエリselect square(~AGE~), sqrt(~SNAME~)を指定する場合、AGE関数とSNAME関数用に2つの出力カラムを指定する必要があります。そうしないと、マッピングは失敗します。
- •SQLトランスフォーメーションは、クエリプロパティにSELECT文がある場合にのみ使用できます。パラメータ化された入力ポートからSELECT文を含むクエリ全体が取得された場合でも、SQL ELTの最適化は失敗します。
- •SQLエラーが発生した場合、そのエラーはデフォルトでSQLErrorフィールドに追加されます。ただし、マッピングがPDOモードで実行されている場合、SQLErrorフィールドはNullのままです。
- •NumRowsAffectedフィールドの数は、出力バッファの計算中に影響を受けた行の数を記録します。ただし、SQLトランスフォーメーションの場合、クエリは行ごとではなく、すべてのレコードに対して一度に実行されるため、NumRowsAffectedは0になります。
- •Amazon Redshiftは、動的クエリのサポートが制限されている、SQLトランスフォーメーションのパッシブ動作のみを提供します。
ルータートランスフォーメーション
ルータートランスフォーメーションを設定する場合は、1つの出力グループのみをターゲットトランスフォーメーションに接続またはマッピングする必要があります。
機能
次のソースから読み取りを行い、Amazon Redshiftターゲットに書き込みを行うマッピングにSQL ELTの最適化を設定できます。
- •Amazon Redshift V2ソース
- •Amazon S3 V2ソース
マッピングを設定する場合、SQL ELTの最適化が有効になっているマッピングについては、一部のパラメータがサポートされません。各ソースがサポートするパラメータのリストを参照してください。
Amazon Redshift V2のソース、ターゲット、ルックアップ
基本的なIAMとロールの引き受け認証を使用して、ソーストランスフォーメーションでAmazon Redshift V2接続を設定し、マッピングタスクでSQL ELTの最適化を有効にすることができます。
接続プロパティ
SQL ELTの最適化を設定する際に、Amazon Redshift V2接続のAmazon Redshift V2ソースに対して次のような詳細プロパティを使用できます。
- •ユーザー名
- •パスワード
- •アクセスキーとシークレットキー
- •JDBC URL
- •領域
- •マスタ対称キー
- •顧客マスタキーID
ソースのプロパティ
SQL ELTの最適化を設定する際に、ソーストランスフォーメーションのAmazon Redshift V2ソースに対して次のようなプロパティを使用できます。
ターゲットプロパティ
SQL ELTの最適化を設定する際に、Amazon Redshift V2ターゲットに対して次のようなプロパティを使用できます。
- •ターゲット接続 - パラメータ、実行時にパラメータのオーバーライドを許可する
- •ターゲットタイプ - 単一オブジェクト、パラメータ
- •実行時にパラメータのオーバーライドを許可する
- •ターゲットオブジェクト - 既存のターゲット、実行時に新規作成
- •操作 - 挿入、更新、更新/挿入、削除、またはデータドリブン
- •ターゲットテーブルの分析
- •ロールの想定
- •Copyコマンド
- - リージョン
- - Truncatecolumn
- - AWS_IAM_Role、ParquetファイルとORCファイル用のみ
- •Pre-SQL
- •Post-SQL
- •CharおよびVarcharにNull値が必要
- •スキーマ名
- •ターゲットテーブル名
- •データアップロード前のターゲットテーブルの切り詰め
- •テーブルのクリーンアップ
- •ターゲットクエリのオーバーライド
- •ソース行を(挿入、更新、更新/挿入、削除、およびなし)として扱います。データ依存操作を使用する場合は、[なし]を選択します。
- •INSERT用のアップロードバッチごとの最大エラー数
注: 使用できないソースおよびターゲットの詳細プロパティを設定すると、マッピングはInformaticaランタイム環境で実行されます。
ルックアップのプロパティ
SQL ELTの最適化を設定する際に、Amazon Redshift V2ルックアップに対して次のようなプロパティを使用できます。
- •ルックアップ接続 - パラメータ、実行時にパラメータのオーバーライドを許可する
- •ソースタイプ - 単一オブジェクト、クエリ、パラメータ
- •複数一致 - エラーを報告。接続されていないルックアップに適用できます。
- •複数の一致 - すべての行を返す。接続されたルックアップに適用できます。
- •S3バケット名
- •圧縮を有効にする
- •Unloadオプション
- •暗号化タイプ
- •スキーマ名
- •ソーステーブル名
- •Pre-SQL
- •Post-SQL
- •SQLクエリ
- •個別選択
注: マッピングタスクでパラメータファイルを指定して、マッピング内のAmazon Redshift V2のソース、ルックアップ、およびターゲットの接続とオブジェクトをオーバーライドできます。
Amazon S3 V2ソース
マッピングタスクでSQL ELTの最適化を有効にした場合は、基本的なロールの引き受け、およびIAM認証を使用してAmazon S3 V2接続を設定する必要があります。
ソースのプロパティ
SQL ELTの最適化を設定する際に、マッピングでAmazon S3 V2ソースに対して次のようなプロパティを使用できます。
- •ソース接続
- •ソースタイプ - 単一オブジェクト、パラメータ
- •パラメータ
- •暗号化タイプ - クライアントサイド暗号化(フラットファイルに適用可能)、サーバー側の暗号化、KMSを使用したサーバー側の暗号化
- •データ圧縮 - Gzip(フラットファイルおよびParquetファイルに適用可能)、Deflate(Avroファイルに適用可能)、Snappy(Avroファイル、Parquetファイル、およびORCファイルに適用可能)、Zlib(ORCファイルに適用可能)
- •ファイル形式
- - 区切り文字
- - 修飾子
- - コードページ
- - ヘッダー行番号
- - 最初のデータ行
- - ソースタイプ
- - フォルダパス
- •ファイルソースタイプ
- •ファイル名
- •入力形式
- - Avro
- - Parquet
- - ORC
- - JSON
- - 区切りファイル
複数のターゲットに対するSQL ELTの最適化
マッピングに複数のAmazon Redshift V2ターゲットを追加できます。
複数のAmazon Redshift V2ターゲットに書き込みを行うようにマッピングを設定した場合、完全なSQL ELTの最適化を設定すると、書き込み操作をさらに最適化することができます。
最適化を行うためには、複数のターゲットに対して個別に挿入、更新、更新/挿入、削除、またはデータ依存操作を設定するという選択ができます。
複数のターゲットトランスフォーメーションで同じまたは異なるAmazon Redshift V2ターゲットテーブルを選択し、ターゲットトランスフォーメーションごとに異なる操作を実行して、互いに依存しない状態で実行することができます。
マッピングに複数のパイプラインが含まれている場合は、フローの実行順序を定義して、パイプラインからターゲットを特定の順序でロードすることができます。
複数のパイプラインのフロー実行順序を定義し、1つのパイプラインに対して-DEnableSingleCommit=trueを設定した場合は、-DEnableSingleCommit=trueプロパティが優先されます。
ルールおよびガイドライン
複数のターゲットに対して完全なSQL ELTの最適化を行う場合は、次のルールとガイドラインを考慮してください。
- •マッピングを実行し、すべてのターゲットで同じターゲットテーブルを使用すると、行数は、SQL ELTの最適化を使用せずに実行されるマッピングの行数とは異なるものになります。Amazon S3ソースを使用して、複数のAmazon Redshift V2ターゲットで更新/挿入操作を実行する場合に適用されます。
- •マッピングを実行し、すべてのターゲットで同じターゲットテーブルを使用すると、Secure Agentは、SQL ELTの最適化を使用せずに実行されるマッピングのデータとは異なるデータセットでターゲットへの書き込みを行います。Amazon S3ソースを使用して、複数のAmazon Redshift V2ターゲットで挿入操作を実行し、[データロード前にターゲットテーブルをトランケート]詳細ターゲットプロパティを有効にした場合に適用されます。
複数のターゲットの処理順序の決定
1つのパイプラインで複数のターゲットに書き込みを行うようにマッピングを設定し、それぞれのターゲットを任意の書き込み操作用に設定すると、ターゲット操作は、削除、更新、更新/挿入および挿入に対して事前定義された順序で処理されます。
事前定義された順序でターゲット操作を処理するには、Secure Agentとタスクプロパティで特定のプロパティを設定する必要があります。
Secure Agentのプロパティで-DEnableSingleCommit=trueを設定
次のタスクを実行して、Secure Agentのプロパティを設定します。
- 1[管理]を開いて[ランタイム環境]を選択します。
- 2このプロパティを設定するSecure Agentを選択します。
- 3ページの右上隅にある[編集]をクリックします。
- 4[システム構成の詳細]セクションで、データ統合サービスの[タイプ]に[DTM]を選択します。
- 5JVMオプションを編集し、プロパティを-DEnableSingleCommit=trueに設定します。
タスクのプロパティでEnableSingleCommitプロパティを設定
次のタスクを実行して、タスクのプロパティを設定します。
- 1マッピングタスクプロパティの[ランタイムオプション]タブで、[詳細セッションプロパティ]セクションに移動します。
- 2[セッションプロパティ名]リストから、[カスタムプロパティ]を選択し、[セッションプロパティ値]を[はい]に設定します。
ターゲット操作を事前定義された順序で処理する場合は、次のガイドラインを考慮してください。
- •マッピングの実行後、結果はクエリの実行順では表示されません。クエリと各クエリの影響を受ける行は、セッションログで確認することができます。
- •データドリブンターゲット操作を選択し、ターゲットの[ソース行の扱い]オプションを[なし]に設定する場合は、次のガイドラインを考慮してください。
- - データドリブン条件にDD_INSERT、DD_UPDATE、DD_DELETEなどの1つの値を入力すると、データドリブン条件で指定されたターゲット操作が考慮され、削除、更新、更新/挿入、および挿入に対して定義済みの順序でターゲット操作が処理されます。
- - データドリブン条件にネストされたIFF文またはDD_REJECTを入力すると、データドリブンターゲット操作が考慮され、ターゲット操作は事前定義された順序では処理されません。
- •-DEnableSingleCommit=trueプロパティを設定した後のPost SQLおよびPre SQLクエリの実行順序は、プロパティが設定される前の実行順序とは違うものになります。
SQL ELTの最適化ジョブのクリーンな停止
SQL ELTの最適化が有効になっているタスクが実行されている場合は、ジョブにクリーンな停止を使用して、ジョブによって生成されたすべての発行済みの文とプロセスを終了できます。
データ統合の[マイジョブ]ページと[監視]の[すべてのジョブと実行中のジョブ]ページの[クリーンな停止]オプションを使用します。
SQL ELTの最適化タスクに対してクリーンな停止を実行する前に、次の例外を確認してください。
- •SQL ELTの最適化が有効になっているタスクに対してクリーンな停止を実行した場合に、マッピングのターゲットまたはソースのプロパティにSQL文が含まれていると、進行中のすべてのSQL文を元に戻す操作が試行されます。コミットされたSQLステートメントはいずれも元に戻すことはできません。
- •実行時に新しいターゲットを作成し、ジョブにすぐにクリーンな停止使用するように設定されたマッピングを実行すると、ジョブが終了した場合でも、データ統合によってターゲットテーブルが作成されます。
SQL ELTの最適化のルールとガイドライン
Amazon Redshiftデータベースに対してSQL ELTの最適化を設定する場合は、次のルールとガイドラインを使用してください。
Amazon Redshiftとの間で読み取りおよび書き込みを行うマッピングでの完全なSQL ELTの最適化に対するルール
Amazon Redshiftとの間で読み取りまたは書き込みを行うマッピングに完全なSQL ELTの最適化を設定する場合は、次のガイドラインを考慮してください。
- •Amazon Redshiftのソースとターゲットが同じクラスタ内にある場合、Secure Agentは、UNLOADコマンドとCOPYコマンドを使用してAmazon S3でデータをステージングしてからAmazon Redshiftに書き込むという処理は行いません。Secure Agentは、挿入、更新、更新/挿入、削除、またはデータ駆動型の操作を直接実行して、データをAmazon Redshiftに書き込むため、タスクのパフォーマンスが向上します。
- •完全なSQL ELTの最適化が有効になっているマッピングに対してTimeカラムを含むデータの更新操作を設定し、詳細ターゲットプロパティの[ターゲットクエリのオーバーライド]フィールドで指定した値を使用してターゲットクエリをオーバーライドした場合、タスクは実行されますがデータは処理されません。
- • IAMロールを引き受け、ソースまたは完全なSQL ELTの最適化を有効にした状態でマッピングを実行してRedshiftからデータを読み取った場合、ロールの引き受けは適用されません。
ロールの引き受けを適用し、マッピングを正常に実行するには、AWS_IAM_ROLEプロパティを指定して、その値をソーストランスフォーメーションの[Unloadオプション]フィールドに設定する必要があります。
例: AWS_IAM_ROLE=arn:aws:iam::0093:role/redshift_role
- •異なる領域にあるAmazon S3バケットをマッピング内のソースとターゲットのオブジェクトが指している場合は、COPYコマンドでREGION属性を指定して、ソースのAmazon S3バケットと同じ領域のターゲットにAmazon S3バケットを設定します。
- • 読み取るデータに区切り文字(|)、引用符(")、およびエスケープ(\)文字が含まれており、ソーストランスフォーメーションの[Unloadオプション]フィールドにADDQUOTES;DELIMITER = \174;と設定すると、マッピングは失敗します。
このエラーを回避するには、ターゲットトランスフォーメーションの[コピーオプション]フィールドで次のプロパティを設定します: ESCAPE;REMOVEQUOTES;CSV=OFF;QUOTE=OFF;DELIMITER = \174;
- •NULL値を含んだBigint、Datetime、およびBooleanデータ型の単一のカラムテーブルからデータを読み取った場合、NULL値はターゲットに書き込まれません。
このエラーを回避するには、ターゲットトランスフォーメーションの[コピーオプション]フィールドにIGNOREBLANKLINESと設定する必要があります。
- • データを読み取るようにマッピングでソーストランスフォーメーションを設定し、ESCAPE=OFFまたはONと設定して、[Unloadオプション]フィールドにADDQUOTESと設定してからデータにエスケープ文字と引用符を追加すると、NULL値がターゲットに書き込まれます。
これを回避するには、ターゲットトランスフォーメーションの[コピーオプション]フィールドにQUOTE=\042を追加してから、マッピングを実行する必要があります。
- •データの読み取り時にデータにエスケープ(\)文字が含まれている場合は、ソーストランスフォーメーションの[Unloadオプション]フィールドにESCAPE=OFFと指定する必要があります。プロパティを設定していない場合、エスケープ文字がターゲットに複製されます。例えば、データ出力12\12\2012は12\\12\\2012と表示されます。
- •float4またはdouble値を含んだデータの読み取りと書き込みを行うと、ターゲットのfloat値はわずかに変化します。
- •トランスフォーメーションでユーザー定義関数を指定すると、関数名がセッションログに正しく表示されません。
- •マッピングにシーケンスジェネレータトランスフォーメーションが含まれている場合は、必ずNEXTVAL出力フィールドをターゲットにマッピングしてください。CURRVAL出力フィールドをターゲットにマッピングしないでください。CURRVAL出力フィールドをターゲットにマッピングした場合、マッピングタスクでは、トランスフォーメーションがサポートされている、SQL ELTの最適化を使用せずに実行されるポイントまでマッピングロジックが部分的にプッシュダウンされることはありません。
- •テーブル名とカラム名が同じである、またはテーブル名がカラム名のサブストリングであるソースで、複数のオブジェクトを使用してマッピングを設定すると、マッピングが失敗します。
- •timestamptzデータ型のターゲットオブジェクトに対してデータ依存操作を実行することはできません。
- •詳細フィルタを使用して、ソースで複数のオブジェクトを使用する完全なSQL ELTの最適化を使用してマッピングを実行すると、UNLOADおよびCOPYコマンドが異なるクラスタ間で機能せず、マッピングが失敗します。
- •ソースとターゲットが異なるクラスタに属するマッピング内の同じオブジェクトを変更するPre-SQLまたはPost-SQLクエリを定義すると、完全なSQL ELTの最適化の実行時にタスクが失敗します。
- •マッピングに複数のパイプラインが含まれている場合は、サポートされていない関数が検出されると、1つのパイプラインのみのロジックがソースにプッシュされます。他のパイプラインは、SQL ELTの最適化を使用せずに実行されます。
Amazon Redshiftから読み取りを行うマッピングでのソースSQL ELTの最適化のルール
Amazon Redshiftから読み取りを行うマッピングに対してソースSQL ELTの最適化を設定する場合は、次のガイドラインを考慮してください。
- •詳細ソースプロパティでSQLクエリまたはカスタムクエリを設定すると、マッピングをAmazon Redshiftにプッシュできます。
- •カスタムクエリをソースまたはSQLオーバーライドとして使用すると、テーブル名のエイリアスは適切に生成されません。SQL ELTの最適化クエリの名前の先頭の文字は、"INF"になります。
- •ソースカラム名がエイリアス化されている完全なSQL ELTの最適化でSQLクエリをオーバーライドしてマッピングを実行すると、マッピングは失敗します。エイリアス名とソースカラム名が同じであることを確認してください。
- •複数の出力グループを持つルータートランスフォーメーションをAmazon Redshiftソースにプッシュすることはできません。
- •クエリソースタイプを使用してAmazon Redshiftから読み取った場合は、フィールドメタデータを保持してマッピングを保存するという選択ができます。クエリを編集してマッピングを実行した場合でも、設計時に指定したフィールドメタデータは保持されます。
- •ソーストランスフォーメーションとルックアップトランスフォーメーションでは、読み取りモードを[直接]に設定できません。
- •COPYコマンドオプションは、timestamptzデータ型には適用されません。
- •REG_REPLACE()関数内で[^\x00-\x7F]+パターンを使用し、SQL ELTの最適化を使用してマッピングを実行すると、ターゲットの非ASCII文字とスペースの両方が置き換えられます。ただし、SQL ELTの最適化を使用せずに同じマッピングを実行すると、非ASCII文字のみが置換され、スペースはターゲットに保持されます。
式で使用できるパターンの詳細については、「
Pattern-matching conditions」を参照してください。
複数のソースオブジェクトの追加のルールおよびガイドライン
複数のソースオブジェクトを追加するときは、次のルールとガイドラインを考慮してください。
- •テーブル名とカラム名に予約語を使用する場合、テーブル名を二重引用符で囲む必要があります。
- •複数のソースオブジェクトを追加する場合、自己結合を使用することはできません。
- •詳細リレーションのカラム名に特殊文字を使用すると、クエリが正しく形成されず、マッピングタスクが失敗します。
- •完全外部結合条件は、=、,、およびAND演算子でのみ使用できます。
- •スキーマ名をオーバーライドして、関連するソースオブジェクトに詳細フィルタを設定すると、Secure Agentは、関連するソースオブジェクトではなく、親オブジェクトにのみ詳細フィルタを適用します。
- •プライマリキーと外部キーのリレーションを持つ親オブジェクトと子オブジェクトを選択し、関連オブジェクトの外部キーがテーブルのプライマリキーでもある場合、ターゲットの作成時にマッピングタスクが失敗します。
- • [複数のオブジェクト]ソースタイプを選択し、empなどのソースオブジェクトを追加し、emp.idとdept.d_idなどの異なるカラムでプライマリキーと外部キーのリレーションを定義すると、マッピングが失敗して、次のエラーが表示されます。
[FATAL] Unload/Copy command failed with error: Invalid operation: column emp.d_id does not exist.
[関連オブジェクトの選択]リストには、theempテーブルにd_idカラムがない場合でも、dept関連オブジェクトの結合条件asemp.d_id=dept.d_idが表示されます。
- •[複数のオブジェクト]ソースタイプを選択する場合、テーブル名にピリオド(.)は使用できません。
関数のルールおよびガイドライン
Amazon Redshiftデータベースに関数をプッシュする際には、以下のルールおよびガイドラインを使用します。
- •TO_DATE()とTO_CHAR()をAmazon Redshiftにプッシュするには、文字列および形式引数を定義する必要があります。
- •ADD_TO_DATE()関数の一部としてNS形式を使用する場合、エージェントはこの関数をAmazon Redshiftにプッシュしません。
- •次の形式のいずれかをTO_CHAR()およびTO_DATE()関数の一部として使用する場合、エージェントはこれらの関数をAmazon Redshiftにプッシュしません。
- - - NS
- - - SSSS
- - - SSSSS
- - - RR
- •TRUNC(DATE)、GET_DATE_PART()、およびDATE_DIFF()をAmazon Redshiftにプッシュするには、次の形式を使用する必要があります。
- - - D
- - - DDD
- - - HH24
- - - MI
- - - MM
- - - MS
- - - SS
- - - US
- - - YYYY
- •単一の文字列値を新しい文字列値に置き換える場合にのみREPLACESTR()を使用できます。
構文
REPLACESTR (CaseFlag, InputString, OldString, NewString).
- •SUBSTR()をAmazon Redshiftに押し出すには、引数に整数の値を定義する必要があります。
- •MD5()をAmazon Redshiftにプッシュすると、Secure AgentはすべてのMD5フィールドを小文字で返します。ただし、SQL ELTの最適化を使用せずにマッピングを実行すると、Secure Agentは大文字のMD5フィールドを返します。
- •トランスフォーメーションでIS_NUMBER関数を使用し、入力データにdまたはDが含まれている場合(例えば、+3.45d+32または+3.45D-32などの形式の場合)、関数はFalseまたは0を返します。
- •式でIN関数を使用する場合、CaseFlag属性を含めることはできません。
- •IN関数を使用し、引数に日付とタイムスタンプの値が含まれている場合、式にはTO_DATE関数を含める必要があります。
- •式トランスフォーメーションでREG_REPLACE関数を使用する場合は、引数で使用される式がAWSでサポートされていることを確認してください。
- •式トランスフォーメーションでISNULL()関数を使用すると、マッピング内のソースとターゲットが同じクラスタ環境にある場合、または異なるクラスタ環境にまたがっている場合に応じて、データ統合では異なる方法でカラム値が解析されます。UNLOADおよびCOPYコマンドにより、ソースとターゲットが異なるクラスタにある場合、NULLと空の文字列値が異なる方法で解析されます。
ソースとターゲットが異なるクラスタにまたがるマッピングから関数をプッシュダウンするときにTempTableForRedshiftAPDOプロパティを有効にすることができます。プロパティを設定してマッピングを実行すると、マッピングではカラム内のNULLおよび空の文字列値がNULLのみと見なされます。ただし、ソースとターゲットが同じクラスタ内にある場合、データ統合ではカラム内のNULLがNULLと見なされ、空の文字列は空の文字列と見なされます。
SQL ELTの最適化を使用しないマッピングでは、ISNULL()関数は異なる方法で解析されます。[NULL値をNULLとして扱う]オプションを選択すると、マッピングではNULLおよび空の文字列値がNULLと見なされます。[NULL値をNULLとして扱う]オプションを選択しない場合、マッピングではNULL値と空の文字列値が空の文字列と見なされます。
集計関数のルールとガイドライン
Amazon Redshiftデータベースに集計関数をプッシュする際には、以下のルールおよびガイドラインを使用します。
- •集計式関数で条件句を使用することはできません。
- •集計式では非集計関数を使用できます。
- •ネストされた集計関数を直接使用することはできません。例えば、集計式関数カラムにSUM(AVG(col1))を指定することはできません。マッピングに複数の集計トランスフォーメーションを追加して、ネストされた集計を使用します。
- •マッピングタスクでGROUP BYフィールドと集計関数をパラメータ化できます。
- •単一の値で構成される式にSTDDEV関数またはVARIANCE関数を使用してマッピングを実行すると、関数の結果はNULLになります。マッピングをプッシュダウンせずに実行すると、関数の結果は0になります。
- •フィールドマッピング中に、GROUP BYポートに追加したフィールドのみをマッピングする必要があります。そうしない場合、マッピングは非PDOモードで実行され、エラーメッセージが表示されます。
- •集計関数のGROUP BY句でAmazon S3フラットファイルソースからのポートを指定せずにポートをRedshiftターゲットにマッピングすると、マッピングタスクはSQL ELTの最適化を使用せずに正常に実行され、次のメッセージが表示されます:
ソースに対するプッシュダウンの最適化はトランスフォーメーション[Aggregator]の前で停止します([f_varchar]がパススルーポートによりグループ化されておらず、許可されないため)。
Amazon S3 AvroまたはParquetソースを使用してマッピングをプッシュダウンすると、マッピングは失敗します。
- •REG_MATCH()関数に正規表現引数を持つテーブルカラムを含む完全またはソースSQL ELTの最適化に対して有効化されたマッピングは失敗します。ただし、SQL ELTの最適化が有効化されていない場合、マッピングは正常に実行されます。
- •REG_MATCH()式を設定する場合は、次のようにする必要があります。
- - 完全なSQL ELTの最適化で式を解析するには、ダブルスラッシュを使用します。例えば、REGMATCH(searchstring,'\\D W')を使用します。
- - 単一のスラッシュを使用して、SQL ELTの最適化を使用せずに式を解析します。例えば、REGMATCH(searchstring,'\D\W')を使用します。
- •ASCII()関数を使用してタイムスタンプおよび日付データ値を渡す場合、ASCII()関数は、SQL ELTの最適化を使用するか使用しないかに応じて、異なる方法で値を解析します。
SQL ELTの最適化を使用しないマッピングでは、ASCII()関数は日付の最初の桁を返しますが、完全およびソースSQL ELTの最適化では、この関数は年の最初の桁を返します。
例えば、セッションの日付時刻MM/DD/YYYY HH24:MI:SS.USの読み取りを行う際、SQL ELTの最適化を使用しない場合は、ASCII()値はMMの最初の文字を返し、SQL ELTの最適化を使用する場合は、YYYYの最初の文字を返します。
回避策として、SQL ELTの最適化を使用せずにマッピングを有効にするときに、[詳細セッションプロパティ]で日時フォーマット文字列のプロパティ値をyyyy-mm-ddに設定します。
ルータートランスフォーメーションのルールとガイドライン
ルータートランスフォーメーションについては、次のルールとガイドラインを考慮してください。
ルックアップトランスフォーメーションのルールとガイドライン
ルックアップトランスフォーメーションを設定する場合は、次のガイドラインに従ってください。
- •動的ルックアップキャッシュと永続キャッシュを設定することはできません。
- •接続されたルックアップと接続されていないルックアップの詳細ルックアッププロパティを設定することはできません。
- •ルックアップトランスフォーメーションに詳細ルックアッププロパティを選択した場合でも、Secure Agentは詳細プロパティを無視します。エラーメッセージはログに表示されません。
- •Amazon RedshiftルックアップのUnloadコマンドにADDQUOTEオプションを追加した場合は、Amazon RedshiftターゲットのCopyコマンドにQUOTE="というQUOTEオプションも追加する必要があります。
- •異なる領域にあるAmazon S3バケットをマッピング内のソースとターゲットが指している場合は、COPYコマンドでREGION属性を指定して、ソースのAmazon S3バケットと同じ領域のターゲットにAmazon S3バケットを設定します。
- •Amazon RedshiftソースまたはルックアップオブジェクトにCSE-SMK暗号化タイプを設定した場合は、ターゲットプロパティでマスタ対称キーを指定していることを確認してください。
- •=演算子は、完全にパラメータ化されたルックアップ条件でのみ指定できます。複合的な条件の中で<、<=、>>、>=、および! =などの演算子を指定した場合、マッピングは失敗します。
- •Amazon S3ソースのルックアップを設定した場合は、Amazon S3ソースとルックアップオブジェクトからFileNameフィールドを削除します。FileNameフィールドは使用できません。
接続されたルックアップ
接続されたルックアップトランスフォーメーションについては、次のルールとガイドラインを考慮してください。
- •SQL ELTの最適化が機能するようにするには、接続されたルックアッププロパティで[複数一致]プロパティ値に[すべての行を返す]を選択する必要があります。
- •Amazon S3の場所に同じプレフィックスを持つソースファイル(abc.txt.1とabc.txt.2など)が含まれている場合、COPYコマンドは両方のファイルをAmazon Redshiftターゲットにロードしようとして、マッピングが失敗する場合があります。
接続されていないルックアップ
接続されていないルックアップトランスフォーメーションについては、次のルールとガイドラインを考慮してください。
- •SQL ELTの最適化が機能するようにするには、接続されていないルックアップのプロパティで[複数一致]プロパティ値に[エラーを報告]を選択する必要があります。ただし、ルックアップテーブルで複数の一致が検出された場合、Secure Agentはエラーを報告しません。したがって、ルックアップテーブルでは複数の一致が検出されないようにする必要があります。
- •[任意の行を返す]プロパティを選択すると、マッピングタスクはSQL ELTの最適化を使用せずに実行されます。
- •ルックアップ式で接続されていないルックアップに演算子を使用することはできません。演算子を含めるには、追加の式トランスフォーメーションを使用します。
- •ソースルックアップテーブルと接続されていないルックアップテーブルで同じカラム名を使用して、完全なSQL ELTの最適化を有効にすると、マッピングはカラムの重複エラーで失敗します。マッピングを正常に実行するには、プレフィックスまたはポストフィックスを使用して受信フィールドの名前を変更し、ルックアップ式でそのフィールドを使用します。
SQLトランスフォーメーションのルールとガイドライン
SQLトランスフォーメーションについては、次のルールとガイドラインを考慮してください。
- •SQL ELTの最適化が有効なマッピングでSQLトランスフォーメーションを設定し、クエリでDATE_PART関数を使用すると、タスクは失敗します。設定できるのは、Redshiftでサポートされている任意のスカラ関数に対する、規定の形式の単純なSELECT文を使用したSQLトランスフォーメーションのみです。
- •date、decimal、またはsmallintのデータ型を持つユーザー定義関数を使用したマッピングでSQLトランスフォーメーションを設定すると、マッピングは失敗します。回避策として、Amazon Redshiftでサポートされている、対応するトランスフォーメーションのデータ型のみを使用して、Redshiftでユーザー定義関数を設定してください。
- •SQLトランスフォーメーションを使用してマッピングを実行し、Unicodeまたは特殊文字を使用してユーザー定義関数(UDF)を定義する場合は、スキーマとUDFを二重引用符で囲みます。
- •複数のSELECTクエリを持つSQLトランスフォーメーションを使用してマッピングを実行すると、マッピングが失敗します。Amazon Redshiftは、単一の単純なSELECTクエリを使用したSQLトランスフォーメーションのみをサポートしています。
- •ユーザー定義関数とスカラ関数を同じクエリで一緒に使用して、マッピングロジックを部分的にプッシュダウンする際に、ターゲットのデータ型がソースタイプと一致しない場合、マッピングは失敗します。回避策として、完全なSQL ELTの最適化を有効にするか、クエリでスカラ関数のみを定義します。