マッピングの書き込み操作を最適化するステージングプロパティ INFA_DTM_STAGING_ENABLED_CONNECTORS を少しだけ深掘りした話

# はじめに
弊社アドベントカレンダーの3日目の記事を書いた際に登場した書き込み操作用のステージングプロパティ**INFA_DTM_STAGING_ENABLED_CONNECTORS**で気になった点を追加で検証してみました。

https://qiita.com/HiromitsuMiura-Mitz/items/cb2abe0415791f4f7b78


オンラインマニュアルでは、[管理者向けヘルプのSecure Agentサービス](https://docs.informatica.com/ja_jp/cloud-common-services/administrator/current-version/_secure-agent-services_administrator_current-version_ditamap/GUID-9F96874A-25AA-4091-82F8-245B05B8F328/GUID-BE9748B1-8BE8-4F02-B472-A72249CAB909.html)でプロパティが紹介されており、詳細は各コネクタのマニュアルを参照するように記載されています。コネクタ毎に制約がありますので、必ず参照するようにしましょう。

- [Amazon Redshift V2 Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_amazon-redshift-connectors_cloud-data-integration-connectors_current-version_ditamap/GUID-E979D53C-EF89-4D25-B6A4-64A8C87FF533/GUID-0D4B0A44-B0A8-4582-928B-15938F3014BC/GUID-87B4A15A-7C8B-4C35-86D5-CB4C2D3BF503/GUID-26E414ED-1F7B-40A4-8971-1D7E5E2B0E52.html) (pulginId : 451600)
- [Databricks Connector](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/databricks-connector/mappings-for-databricks/targets-for-databricks/optimize-the-staging-performance-of-a-mapping.html) (pulginId : 606801)
- [Google BigQuery V2 Connector](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/google-bigquery-connectors/part-2--data-integration-with-google-bigquery-v2-connector/mappings-for-google-bigquery-v2/google-bigquery-v2-targets-in-mappings/write-modes/optimize-write-performance-in-staging-mode.html) (pulginId : 601601)
- [Hadoop Files V2 Connector](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/hadoop-files-v2-connector/mappings-and-tasks-with-hadoop-files-v2-connector/hadoop-files-formatting-options/read-and-write-flat-file-formats/enable-staging-to-use-flat-file-formats.html) (pulginId : 603701)
- [Snowflake Data Cloud Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_snowflake-data-cloud-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-16EE3796-E718-4F83-8A47-43B028021310/GUID-0961DD65-E45C-4231-B9DF-CDF1B9A35957.html) (pulginId : 605501)
- [Microsoft Azure Synapse SQL Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_microsoft-azure-synapse-sql-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-A8588112-FB94-4AD3-95BF-FC94CB7FC3F4/GUID-BB4DF039-8E47-4D24-BAA7-7E4184D728AD/GUID-2371F506-B2B4-4137-B33E-EB3F26A6C6D5.html) (pulginId : 453100)
- Oracle Autonomous Database Connector (pulginId : 648300)
:::note warn
Oracle Autonomous Database Connectorですが、2024年12月の時点では英語版のオンラインマニュアルにも記載がないためマニュアルへのリンクを省略しています。
:::
## 検証項目 その1 : Oracle Autonomous Database Connectorで、INFA_DTM_STAGING_ENABLED_CONNECTORSの設定は必須なのか？
Oracle Autonomous Database Connector以外のコネクタでは、ステージングでのパフォーマンスを最適化するためのオプションとして、INFA_DTM_STAGING_ENABLED_CONNECTORSがオンラインマニュアルで紹介されています。

先日検証したときは、ソースにフラットファイル接続を使用していたために、プロパティの設定が必須だったのかと思っていたのですが、**ソースで使用しているコネクタの種類に関わらず、Oracle Autonomous Database Connectorをターゲットに使用した場合、INFA_DTM_STAGING_ENABLED_CONNECTORSの設定は必須でした。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/d2edc494-b72c-a28d-72eb-f89cb238f33a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/909aa2a3-7e3b-614d-2979-8bec19cf799c.png)

**という事で、Oracle Autonomous Database Connectorを利用する場合には、事前にINFA_DTM_STAGING_ENABLED_CONNECTORSに648300の設定を仕込んでおきましょう**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/af2ca398-8fcf-1ebb-900b-89bd53c2693b.png)

## 検証項目 その2 : ステージングでのパフォーマンス最適化は複数のコネクタで同時利用可能なのか？
**安心してください、複数のコネクタで同時利用可能です。下記の通り、pulginIdをカンマで区切ってINFA_DTM_STAGING_ENABLED_CONNECTORSの値として設定すればOKです。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/020e37b3-3b8c-fce8-6f57-ac895221cf50.png)

先日検証で使用したマッピングを流用して、O型とAB型を持つデータをSnowflake上のテーブルに書き込むように変更してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/6e6ac132-559c-ad5b-93d3-b1a21157f165.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/9c9cbeb7-2bd2-a899-0922-6202caa145f7.png)

セッションログで/tmpにステージングファイルを作成している事が出力されますので、両方のコネクタでステージングでのパフォーマンス最適化が実行されたことが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/5c39fa34-a147-ef79-4e83-44ff1279db07.png)

## 検証項目 その3 : 制約の都合上ステージングでのパフォーマンス最適化を一部の処理で未適用にする事は可能なのか？
**安心してください、一部のコネクタではマッピングタスク単位で、ステージングでのパフォーマンス最適化の設定が利用可能です。**

下記の通り、マッピングタスクのランタイムオプションの編集画面で、詳細セッションプロパティに対してカスタムプロパティとして**DTMStagingMode=yes**を追加すればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/578c1ab0-1693-64d7-cc3c-244cc6850e6e.png)

**カスタムプロパティ DTMStagingMode=yes**ですが、サポートされているコネクタが限定されています。サポート対象のコネクタのpluginIdが<セキュエージェントのインストールディレクトリ>/apps/Data_Integration_Server/<現在のDISバージョン>/ICS/main/bin/rdtm/dtmstaging.iniに記載されており、今のところ4つのコネクタのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/c117c21e-f674-d341-b333-f5faec47d925.png)

つまり、
- [Google BigQuery V2 Connector](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/google-bigquery-connectors/part-2--data-integration-with-google-bigquery-v2-connector/mappings-for-google-bigquery-v2/google-bigquery-v2-targets-in-mappings/write-modes/optimize-write-performance-in-staging-mode.html) (pulginId : 601601)
- [Microsoft Azure Synapse SQL Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_microsoft-azure-synapse-sql-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-A8588112-FB94-4AD3-95BF-FC94CB7FC3F4/GUID-BB4DF039-8E47-4D24-BAA7-7E4184D728AD/GUID-2371F506-B2B4-4137-B33E-EB3F26A6C6D5.html) (pulginId : 453100)
- [Snowflake Data Cloud Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_snowflake-data-cloud-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-16EE3796-E718-4F83-8A47-43B028021310/GUID-0961DD65-E45C-4231-B9DF-CDF1B9A35957.html) (pulginId : 605501)
- [Amazon Redshift V2 Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_amazon-redshift-connectors_cloud-data-integration-connectors_current-version_ditamap/GUID-E979D53C-EF89-4D25-B6A4-64A8C87FF533/GUID-0D4B0A44-B0A8-4582-928B-15938F3014BC/GUID-87B4A15A-7C8B-4C35-86D5-CB4C2D3BF503/GUID-26E414ED-1F7B-40A4-8971-1D7E5E2B0E52.html) (pulginId : 451600)

ということですね。

早速、INFA_DTM_STAGING_ENABLED_CONNECTORSにはOracle Autonomous Database ConnectorのpluginId 648300のみを設定し、マッピングタスクにカスタムプロパティ DTMStagingMode=yesを設定して、Oracle Autonomous Database ConnectorとSnowflake Data Cloud Connectorの両方で、ステージングの最適化が実行されているかどうかを先ほどのマッピングタスクを使用して確認してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/53507f8c-3e56-9ead-ab54-254ff09fa80f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/931aa1de-fba0-45bb-dc7a-5ce2a254cb65.png)

セッションログでdtmstaging.iniが読み込まれてサポート対象のpulginIdをチェックしている事が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/8f906c55-1003-2ba4-9903-9df45f9c6c6f.png)

さらに、両方のコネクタで/tmpにステージングファイルを作成している事が確認できましたので、設定に応じてステージングでのパフォーマンス最適化が実行されている事が検証できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/568b76f1-7ff2-473d-a19c-7301d3338fac.png)

## おわりに
カスタムプロパティ DTMStagingMode にYESを設定すると、下記4つのコネクタでは、ターゲットに対する「ステージングを利用した書込み操作の最適化」とソースでの「ステージングを利用した読み込み操作を最適化」の両方が有効になります。
- [Google BigQuery V2 Connector](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/google-bigquery-connectors/part-2--data-integration-with-google-bigquery-v2-connector/mappings-for-google-bigquery-v2/google-bigquery-v2-targets-in-mappings/write-modes/optimize-write-performance-in-staging-mode.html) (pulginId : 601601)
- [Microsoft Azure Synapse SQL Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_microsoft-azure-synapse-sql-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-A8588112-FB94-4AD3-95BF-FC94CB7FC3F4/GUID-BB4DF039-8E47-4D24-BAA7-7E4184D728AD/GUID-2371F506-B2B4-4137-B33E-EB3F26A6C6D5.html) (pulginId : 453100)
- [Snowflake Data Cloud Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_snowflake-data-cloud-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-16EE3796-E718-4F83-8A47-43B028021310/GUID-0961DD65-E45C-4231-B9DF-CDF1B9A35957.html) (pulginId : 605501)
- [Amazon Redshift V2 Connector](https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_amazon-redshift-connectors_cloud-data-integration-connectors_current-version_ditamap/GUID-E979D53C-EF89-4D25-B6A4-64A8C87FF533/GUID-0D4B0A44-B0A8-4582-928B-15938F3014BC/GUID-87B4A15A-7C8B-4C35-86D5-CB4C2D3BF503/GUID-26E414ED-1F7B-40A4-8971-1D7E5E2B0E52.html) (pulginId : 451600)

つまり
- INFA_DTM_STAGING_ENABLED_CONNECTORS（書き込み操作用）
- INFA_DTM_RDR_STAGING_ENABLED_CONNECTORS（読み取り操作用）

の両方にpulginIdが設定されて動作するイメージです。このプロパティでターゲットのみ無効、ソースのみ無効にすることは出来ませんのでご注意ください。