# Oracle Eloqua Import Integration

このOracle Eloqua用データコネクタを使用すると、コンタクトデータとアクティビティデータをTreasure Dataにインポートできます。

## 前提条件

Treasure Dataの基本的な知識。

## 要件と制限事項

- Treasure アカウント
- Oracle Eloquaアカウント


## Treasure Data Integration の静的 IP アドレス

セキュリティポリシーで IP ホワイトリストが必要な場合は、接続を成功させるために Treasure Data の IP アドレスを許可リストに追加する必要があります。

リージョンごとに整理された静的 IP アドレスの完全なリストは、次のリンクにあります:
[IP Addresses for Integrations](/apis/endpoints/ip-addresses-integrations-result-workers)

## Treasure コンソールからOracle Eloquaをインポート

### 認証の作成

最初のステップは、認証情報のセットを使用して新しい認証を作成することです。

1. **Integrations Hub**を選択します。
2. **Catalog**を選択します。


![](/assets/image2021-9-30_14-38-2.ca92fa4ab9277dca95973c6bd413fc662a3f0d04b57d58f7a8c952a29f28bbec.c68a7c88.png)

1. カタログで**Oracle Eloqua**を検索します。アイコンの上にマウスを置き、**Create Authentication**を選択します。


![](/assets/oracleeloqua.c70b013008f28b4d52b898e49719694ae28dbb3b69b3c2f77f1d588a51ab62fd.c68a7c88.png)

1. **Credentials**タブが選択されていることを確認し、統合のための認証情報を入力します。


**認証フィールド**

| Parameter | Description |
|  --- | --- |
| Authentication Method | Basic (デフォルト) |
| Eloqua Site Name | Oracle EloquaサイトのURL |
| Username | Oracle Eloquaアカウントのユーザー名 |
| Password | アカウントのパスワード |


1. **Continue**を選択します。
2. 認証の名前を入力し、**Done**を選択します。


### ソースの作成

1. Treasure コンソールを開きます。
2. **Integrations Hub** > **Authentications**に移動します。
3. 新しい認証を見つけて、**New Source**を選択します。


### 接続の作成

接続タブで、以下の情報を入力し、**Next**を選択します。

| Parameter | Description |
|  --- | --- |
| Data Transfer Name | 転送の名前を定義できます。 |
| Authentication | 転送に使用される認証名。 |


![](/assets/eloqua_createsource.157580f09145e469ddf19828f7b155751aac1c430452ede5c9ba67349722a285.c68a7c88.png)

### ソーステーブルの識別

Source Tableタブで以下の情報を入力し、**Next**を選択します。

| Parameter | Description |
|  --- | --- |
| Data Type | ContactまたはActivityを選択 |
| Import Fields | インポートするコンタクトフィールドを選択します。Data Type Contactの場合のみサポート。フィールド名はカンマで区切る必要があります。 |
| Start Time | この時刻以降のデータをインポート |
| End Time | この時刻までのデータをインポート |
| Incremental Loading | Incremental loadingオプションがチェックされている場合、新規および更新されたコンタクトを増分的にインポートします。 |
| Update End Time | 終了時刻が増分ジョブの実行時刻よりも大きく、Update End Timeオプションがチェックされている場合、終了時刻はジョブの実行時刻に設定されます。 |


![](/assets/screenshot-2024-06-18-at-16.09.31.c5f0e0d578807e1d343de018e629c5376751fea0d31e23c77c0b2e76594bd3dd.c68a7c88.png)

### データ設定の定義

Data Settingタブで以下の情報を入力し、**Next**を選択します。

| Parameter | Description |
|  --- | --- |
| Max retry count per API call | API呼び出しごとの最大リトライ回数 |
| Initial retry interval per API call | API呼び出しごとの初期リトライ間隔（ミリ秒） |
| Max retry interval per API call | API呼び出しごとの最大リトライ間隔（ミリ秒） |
| HTTP Connect Timeout | ミリ秒単位、デフォルト: 3分 |
| HTTP Read Timeout | ミリ秒単位、デフォルト: 3分 |


![](/assets/eloqua_datasettings.638804e3b0446e2f310105dd4b6e0aead2780db40d814c4c9543c854f2ac8760.c68a7c88.png)

### データのプレビュー

インポートを実行する前に、**Generate Preview**を選択してデータの[プレビュー](https://docs.treasuredata.com/smart/project-product-documentation/previewing-your-source-data)を確認できます。

![](/assets/eloqua_preview.0d058174a44456ec606152d8807dbe774aa6697620a26f01a3db1aa91f2bd7d1.c68a7c88.png)

### データ配置の定義

データ配置では、データを配置するターゲットのデータベースとテーブルを選択し、インポートの実行頻度を指定します。

1. **Database** > **Select** **an existing** または **Create New Database** を選択します。
2. オプションで、データベース名を入力します。
3. **Table** > **Select an existing** または **Create New Table** を選択します。
4. オプションで、テーブル名を入力します。
5. データをインポートする方法を選択します。
  - **Append** (デフォルト) - データインポートの結果がテーブルに追加されます。
テーブルが存在しない場合は、作成されます。
  - **Always Replace** - 既存のテーブルの全コンテンツをクエリの結果出力で置き換えます。テーブルが存在しない場合は、新しいテーブルが作成されます。
  - **Replace on New Data**: 新しいデータが存在する場合のみ、既存のテーブルの全コンテンツを結果出力で置き換えます。
6. **Timestamp-based Partition Key** カラムを選択します。
デフォルトキーとは異なるパーティションキーシードを設定する場合は、パーティション時間として long または timestamp カラムを指定できます。デフォルトの時間カラムとして、add_time フィルターを使用した upload_time が使用されます。
7. データストレージの **Data Storage Timezone** を選択します。
8. **Schedule** では、このクエリをいつ、どのくらいの頻度で実行するかを選択できます。
  - 一度だけ実行:
    1. **Off** を選択します。
    2. **Scheduling Timezone** を選択します。
    3. **Create & Run Now** を選択します。
  - クエリを繰り返し実行:
    1. **On** を選択します。
    2. **Schedule** を選択します。UIには、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の4つのオプションがあります。
    3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。
    4. **Scheduling Timezone** を選択します。
9. **Create & Run Now** を選択します。


転送の実行後、**Data Workbench** > **Databases** で転送の結果を確認できます。

![](/assets/eloqua_dataplacement.ae863c8687a19d99313193ab6ad1a74f2bf0faf9f03e8d6b591a3e41f63bd599.c68a7c88.png)

## CLI (Toolbelt) 経由での Oracle Eloqua からのインポート

コネクターをセットアップする前に、最新の [TD Toolbelt](https://toolbelt.treasuredata.com/) をインストールしてください。バージョン 0.11.9 以降が必要です。

バージョンを確認するには:


```
$ td --version
0.16.10
```

### シード設定ファイルの作成 (seed.yml)


```
in:
  type: eloqua
  site_name: "YOUR_ELOQUA_SITE_NAME"
  username: "YOUR_USERNAME"
  password: "YOURPASSWORD"
  target: activity
  data_type: EmailOpen
  start_time: "2018-05-07T00:00:00Z"
  end_time: "2018-05-08T00:00:00Z"
out:
  mode: replace
```

| **オプション名** | **説明** | **型** | **必須?** | **デフォルト値** |
|  --- | --- | --- | --- | --- |
| type |  |  |  |  |
| site_name | Eloqua サイト名 |  |  |  |
| username | ユーザー名 | string | yes | N/A |
| password | パスワード | string | yes | N/A |
| target | contact または activity | string | yes | contact |
| data_type | `EmailOpen, Bounceback, Unsubscribe, EmailSend, Subscribe, EmailClickthrough,WebVisit, PageView, FormSubmit, External Activity` |  | yes, activity target の場合 | EmailOpen |
| import_fields | データタイプ contact に対してインポートされるフィールド名。この値が設定されておらず、contact データタイプが 250 個以上のフィールドを持つ場合、最初の 250 個のフィールドがインポートされます。その他のフィールドはスキップされます。 | string | no |  |
| start_time | レコードの取得を開始する日時を指定します。フォーマット `yyyy-MM-dd'T'hh:mm:ss.SSS'Z'` (例: '2018-05-07T00:00:00Z')。排他的 | string | yes | N/A |
| end_time | レコードを取得する許容期間を指定します。フォーマット `yyyy-MM-dd'T'hh:mm:ss.SSS'Z'` (例: '2018-05-08T00:00:00Z')。包括的 | string | yes | N/A |
| incremental | "mode: append" の場合は `true`、"mode: replace" の場合は `false`。 | bool | no | true |
| incremental_field | このフィールドに基づいて増分処理を行います。サポートされる値: ActivityDate、LinkedToContactDate、CampaignResponseCreatedAt | string | yes, activity データタイプ WebVisit、PageView の場合 | ActivityDate |
| update_end_time | 終了時間がジョブの実行時間より大きい場合、クエリの終了時間を更新します。増分ジョブのみサポートされます。 | bool | no | false |
| mode | ターゲットテーブルのレコードを append または replace します。replace モードでは、ターゲットテーブルに手動で加えられたスキーマ変更はそのまま保持されます。 | string | yes | Append |


### contact フィールド名のリストの取得

Eloqua コンソールでフィールドのリストを読み取ったり取得したりすることができないため、これらは API 経由でのみサポートされています。そのため、インポートジョブでは、import_fields 設定の選択と再利用をサポートするために、すべての contact フィールド名をログ出力しています。

例:

Eloqua インポートジョブコンソールには次のように表示されます


```
2024-06-14 11:29:21.271 +0000 [INFO] (0001:transaction): All contact fields: C_EmailAddress,C_FirstName,C_LastName,C_Company............
```

contact オブジェクトが 250 個以上のフィールドを持ち、Import Fields が空の場合は、次のログが表示されます。


```
Import contact fields: C_EmailAddress,C_FirstName,C_LastName,C_Company...........Skipped contact fields: C_Country1,C_Province1,C_City1
```

インポートフィールドを指定する場合は、すべての contact フィールドログからフィールド名をコピーして、Import Fields に入力できます。

### データのプレビュー (オプション)

データをプレビューするには、*td connector:preview* コマンドを使用します。


```
$ td connector:preview load.yml
+-------------------+00--------------------+--------------------------+----
| activity_id:long  | activity_type:string | activity_date:timestamp  | ...
+---------------------+--------------------+--------------------------+----
| 12345678          | "__"                 | "2018-04-17 13:39:06 UTC"| ...
+-------------------+----------------------+--------------------------+----
```

### ロードジョブの実行

ロードジョブを送信します。データサイズによっては、数時間かかる場合があります。


```
$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column activity_date
```

データが保存されるデータベースとテーブルを指定する必要があります。

Treasure Dataのストレージは時間でパーティション分割されているため、`-time-column`オプションの使用を推奨します。（[データパーティショニング](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)を参照してください。）オプションが指定されていない場合、データコネクタは最初の`long`または`timestamp`カラムをパーティショニング時間として選択します。`-time-column`で指定するカラムのタイプは、`long`型または`timestamp`型である必要があります。

データに時間カラムがない場合は、`add_time`フィルタオプションを使用して追加できます。詳細については、[add_time フィルタ関数](https://docs.treasuredata.com/smart/project-product-documentation/add_time-filter-function)を参照してください。

`td connector:issue`コマンドは、*データベース(td_sample_db)*と*テーブル(td_sample_table)*がすでに作成されていることを前提としています。データベースまたはテーブルがTDに存在しない場合、このコマンドは成功しません。`td connector:issue`コマンドで`-auto-create-table`オプションを使用して、データベースとテーブルを手動で作成できます：


```
$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column activity_date --auto-create-table
```

### スケジュール実行

Eloqua Importコネクタの定期的なデータコネクタ実行をスケジュールすることができます。この機能を使用することで、`cron`デーモンを使用する必要がなくなります。ただし、高可用性を確保するために、スケジューラを慎重に設定することを推奨します。

`td connector:create`コマンドを使用して新しいスケジュールを作成できます。以下を指定する必要があります：

- スケジュールの名前
- cron形式のスケジュール
- データが保存されるデータベースとテーブル
- データコネクタ設定ファイル



```
$ td connector:create     daily_eloqua_import     "9 0 * * *"     td_sample_db     td_sample_table     load.yml
```

`cron`パラメータは、`@hourly`、`@daily`、`@monthly`の3つのオプションも受け入れます。

デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。`—t`または`—-timezone`オプションを使用して、別のタイムゾーンでスケジュールを設定できます。`--timezone`オプションは、'Asia/Tokyo'、'America/Los_Angeles'などの拡張タイムゾーン形式のみをサポートします。PSTやCSTなどのタイムゾーン略語はサポートされておらず、予期しないスケジュールにつながる可能性があります。

### スケジュールの一覧表示

`td connector:list`コマンドを使用して、スケジュールされたエントリのリストを表示できます。


```
$ td connector:list
+-------------------------+-------------+----------+-------+--------------+-----------------+------------------------------+
| Name                    | Cron        | Timezone | Delay | Database     | Table           | Config                       |
+-------------------------+-------------+----------+-------+--------------+-----------------+------------------------------+
| daily_eloqua_import | 9 0 * * *   | UTC      | 0     | td_sample_db | td_sample_table | {"type"=>"eloqua", ... } |
+-------------------------+-------------+----------+-------+--------------+-----------------+------------------------------+
```

### スケジュールの設定と履歴の表示

`td connector:show`は、スケジュールエントリの実行設定を表示します。


```
% td connector:show daily_eloqua_import
Name     : daily_eloqua_import
Cron     : 9 0 * * *
Timezone : UTC
Delay    : 0
Database : td_sample_db
Table    : td_sample_table
```

`td connector:history`は、スケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、`td job jobid`を使用します。


```
% td connector:history daily_eloqua_import
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| JobID  | Status  | Records | Database     | Table           | Priority | Started                   | Duration |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| 678066 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-28 00:09:05 +0000 | 160      |
| 677968 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-27 00:09:07 +0000 | 161      |
| 677914 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-26 00:09:03 +0000 | 152      |
| 677872 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-25 00:09:04 +0000 | 163      |
| 677810 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-24 00:09:04 +0000 | 164      |
| 677766 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-23 00:09:04 +0000 | 155      |
| 677710 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-22 00:09:05 +0000 | 156      |
| 677610 | success | 10000   | td_sample_db | td_sample_table | 0        | 2017-07-21 00:09:04 +0000 | 157      |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
8 rows in set
```

### スケジュールの削除

`td connector:delete`は、スケジュールを削除します。


```
$ td connector:delete daily_eloqua_import
```