# Zuora Import Integration

Zuoraのデータソースオブジェクト(アカウントや請求書など)をTreasure Dataにインポートできます。インポートのモードは以下の通りです:

- base
- fetch-related


fetch-relatedインポートでは、事前に結合されたすべてのオブジェクトを含むFullオブジェクトのインポートを指定できます。

## 前提条件

- Treasure Dataの基本知識
- Zuoraの基本知識


## 制限事項

- Zuora Import IntegrationはZuora SOAP APIを内部的に使用しています。このAPIはZuora USデータセンターのお客様が利用可能です。
- Zuora EUデータセンターのお客様でこの統合機能を利用したい場合は、カスタマーサクセス担当者にお問い合わせください。


## Treasure コンソールを使用する

### 新しい接続を作成する

1. **Integrations Hub > Catalog**に移動し、Zuoraを検索します。
2. Zuoraを選択します。
![](/assets/image-20191022-134041.97acb8ec20146253a30e1d386dc86d613016642bf6751553e2f7176f20e4bd51.b7743126.png)
3. Zuoraのログイン情報を入力し、**Next**を選択して接続名を指定します:
![](/assets/image-20191022-134049.232cabf5285a99606bc9c375568b921235c99ef6e81efd5f3bf0f0df83614a32.b7743126.png)


### 新しい転送を作成する

接続を作成すると、自動的にAuthentications(認証)ページに移動します。作成した接続を探して**New Transfer**を選択します。

![](/assets/image-20191209-222740.9cc97d1340b767b01f487643a5785b34bc309b1aead0a48834382b3653756922.b7743126.png)

情報の詳細を入力し、**Next**を選択します。

![](/assets/image-20191022-134100.e555ee1bfa1b13050efd82aa73399ae5c1fd992f00464a2141302b6ded23ffb8.b7743126.png)

**Fetch related objects**: Zuoraのほとんどのデータソースは関連するビジネスオブジェクトを提供しており、ネストされたクエリを構築する必要がなくなり、パフォーマンスが向上します。関連するビジネスオブジェクトデータが必要な場合は、チェックボックスにチェックを入れてクエリしたいデータソースを選択します。

**API Version (default v85)**: Zuora SOAP APIバージョン。v85以降をサポートしています。

**Duration to import**: このオプションでは、インポートの'start_date'に基づいて'end_date'を選択できます。

- **Start date**が02/07/2017, 12:00 AMに設定され、**Number of Unit**が1 DAYの場合、データ転送には02/08/2017, 12:00 AMまでのすべてのデータが含まれます。


この例では、'end_date'は次のように計算されます:


```
'start_date' + 'number_of_unit' = 'end_date'
02/07/2017, 12:00AM + 1 DAY = 02/08/2017, 12:00AM
```

- 転送がスケジュールされている場合、'start_date'は前回のインポート以降の新しい'end_date'に基づいて常に変化します(前述のように計算されます)。
- incrementalが選択されていない場合、インポートは'start_date'から現在までとなります。
- ユーザーのタイムゾーンが保持されます。


'start_date'を変更したい場合は、転送を再作成することを強くお勧めします。既存の転送を編集しても'start_date'には影響しません。

データをプレビューします。何か変更したい場合は**Advanced Settings**を選択し、そうでなければ**Next**を選択します。

![](/assets/image-20191022-134115.782327cf5066ade2eb255a890e644c71418a397ae8f4507e0d022d0187fcfdb2.b7743126.png)

データを転送するデータベースとテーブルを選択します:

![](/assets/image-20191022-134127.570a6c23e21e341b7de52b942e6622f51aa9747cc2f2da5db1606cf078e054b1.b7743126.png)

データ転送のスケジュールを指定し、Start Transferをクリックします:

![](/assets/image-20191022-134134.39cd15fd204aef50837fe8d503e9b127101d4c412fb2113dfae4aad0eb41a006.b7743126.png)

My Input Transfersタブの下に、進行中の新しいデータ転送が表示され、対応するジョブがJobsセクションに表示されます。

## Command Lineを使用する

### 'td' command v0.11.9以降をインストールする

最新の[TD Toolbelt](https://toolbelt.treasuredata.com/)をインストールできます。


```
$ td --version
0.15.0
```

### 設定ファイルを作成する

Zuoraアカウントのアクセス情報を使用して、次の例のように設定ファイル(例: `load.yml`)を準備します。


```yaml
in:
  type: zuora
  username: xxxxxxxx
  password: xxxxxxxx
  base_object: Account #(required if fetch_related = false, see Appendix B)
  data_source: Account #(required if fetch_related = true, see Appendix C)
  fetch_related: true #(optional, default: false)
  from_timestamp: 12-05-2016T11:00:00.000Z
  incremental: true #(optional, default: true)
  duration: { unit: DAY, num: 1 } #(required if `incremental: true`)
out:
  mode: replace
```

この例では、Zuora Accountデータソースをダンプしています:

- username と password: ログイン情報
- describe_api_verion: Zuora Describe APIバージョン。[Zuora Describe API](https://knowledgecenter.zuora.com/DC_Developers/M_Export_ZOQL/Changes_to_the_Describe_API)を参照してください
- base_object: インポートしたいZuora SOAP(Base)オブジェクトの名前。fetch_related: falseの場合は必須です
  - 利用可能なbaseオブジェクトのリストについては、[Appendix](/ja/int/zuora-import-integration#h1__1835053169)を参照してください。
- data_source: インポートしたいZuoraデータソースの名前。fetch_related: trueの場合は必須です
  - 利用可能なデータソースのリストについては、[Appendix](/ja/int/zuora-import-integration#h1__1835053169)を参照してください。
- fetch_related: **base**または**full**オブジェクト(すべての事前結合されたオブジェクトを含む)のインポートを選択できます。デフォルトはfalseです
- from_timestamp: データがインポートされる開始時刻。フォーマットは: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
- incremental: データインポートを継続的に行うか1回のみ行うか。デフォルトはtrueです。trueの場合、durationが必須です
- duration: データがインポートされる期間。対象オブジェクトのUpdatedDateフィールドによって決定されます。unitには3つのオプションがあります: DAY、HOUR、MIN。デフォルトはDAYです。


ZuoraのいくつかのLimited Availabilityオブジェクトには、追加の設定が必要です。以下はBilling Preview Runの追加設定のリストです:

- from_timestamp : Billing Preview Runで使用する場合、これはプレビュー実行のTarget Dateです。
- include_evergreen_sub : エバーグリーンサブスクリプションを含めるかどうかを示します。デフォルトは'false'です
- batch : このプレビュー実行に含める顧客バッチを指定します
- assume_renewal : アカウントの更新を想定するかどうか。有効な値はAll、None、またはAutorenewです。デフォルトは'None'です。
- charge_type_to_exclude : 予測実行から除外する課金タイプ。可能な値: OneTime、Recurring、Usage、およびこれらの値のカンマ区切りの組み合わせ。


利用可能なoutモードの詳細については、[Appendix](/ja/int/zuora-import-integration#h1__1835053169)を参照してください。

### インポートするデータをプレビューする

td connector:previewコマンドを使用して、インポートされるデータをプレビューできます。


```bash
td connector:preview load.yml
```

### ロードジョブを実行する

ロードジョブを送信します。データサイズによっては数時間かかる場合があります。ユーザーはデータが保存されるデータベースとテーブルを指定する必要があります。

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

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


```bash
td connector:issue load.yml \
--database td_sample_db --table td_sample_table \
--time-column updated_date
```

connector:issueコマンドは、*database(td_sample_db)* と *table(td_sample_table)* がすでに作成されていることを前提としています。TD内にデータベースまたはテーブルが存在しない場合、コマンドは失敗します。そのため、データベースとテーブルを[手動で](https://docs.treasuredata.com/smart/project-product-documentation/data-management)作成するか、td connector:issueコマンドで--auto-create-tableオプションを使用してデータベースとテーブルを自動作成してください。


```bash
td connector:issue load.yml \
--database td_sample_db --table td_sample_table \
--time-column updated_date --auto-create-table
```

「Partitioning Key」に時刻フォーマット列を割り当てるには、「--time-column」オプションを使用します。

### Scheduled execution

定期的なZuoraインポートのために、定期的なData Connector実行をスケジュールできます。Treasure Dataのスケジューラーの負荷分散と操作は、高可用性を実現するために最適化されています。Treasure Dataのスケジューラーを使用することで、ローカルデータセンターにcronデーモンを配置する必要がなくなります。

### Create the schedule

td connector:createコマンドを使用して新しいスケジュールを作成できます。スケジュールの名前、cron形式のスケジュール、データが保存されるデータベースとテーブル、Data Connector設定ファイルを指定します。これらの値は必須です。


```bash
td connector:create \
daily_zuora_import \
"10 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などのタイムゾーン略語は*サポートされておらず*、予期しないスケジュールにつながる可能性があります。

### List the Schedules

`td connector:list`でスケジュールエントリのリストを確認できます。


```
$ td connector:list
```

### Show the Setting and History of Schedules

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


```
td connector:show daily_zuora_import
```

### Delete the Schedule

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


```
$ td connector:delete daily_zuora_import
```

## Available Base Object

| **Base Object** | **Base Object** | **Base Object** |
|  --- | --- | --- |
| Account | InvoiceItem. | ProductRatePlanChargeTier |
| AccountingCode | InvoiceItemAdjustment | RatePlan |
| AccountingPeriod | InvoicePayment | RatePlanCharge |
| BillingRun | Payment | RatePlanChargeTier |
| BillingPreviewRun | PaymentMethod | Refund |
| ChargeMetrics | PaymentMethodTransactionLog | RefundInvoicePayment |
| Contact | PaymentTransactionLog | RefundTransactionLog |
| CreditBalanceAdjustment | Product | Subscription |
| Feature | ProductFeature | SubscriptionProductFeature |
| Invoice | ProductRatePlan | TaxationItem |
| InvoiceAdjustment | ProductRatePlanCharge | Usage |


## Available Data Source

| **Data Source** | **Data Source** | **Data Source** |
|  --- | --- | --- |
| Account | Payment | RatePlanChargeTier |
| AccountingCode | PaymentGatewayReconciliationEventLog | RevenueChargeSummaryItem |
| BillingRun | PaymentMethod | RevenueEventItem |
| Contact | PaymentMethodTransactionLog | RevenueEventItemCreditMemoItem |
| ChargeMetrics | PaymentPart | RevenueEventItemDebitMemoItem |
| CreditBalanceAdjustment | PaymentPartItem | RevenueEventItemInvoiceItem |
| Invoice | PaymentReconciliationLog | RevenueEventItemInvoiceItemAdjustment |
| InvoiceAdjustment | PaymentTransactionLog | RevenueScheduleItem |
| InvoiceItemAdjustment | ProcessedUsage | RevenueScheduleItemInvoiceItem |
| InvoicePayment | Product | RevenueScheduleItemInvoiceItemAdjustment |
| JournalEntryItem | ProductRatePlanChargeTier | RevenueScheduleItemCreditMemoItem |
| Order | RatePlan | RevenueScheduleItemDebitMemoItem |
| OrderAction | RatePlanCharge | Subscription |
| OrderQuantity | RatePlanChargeTier | SubscriptionProductFeature |
| OrderMrr | Refund | UpdaterDetail (PaymentMethodUpdate) |
| OrderTcb | RefundInvoicePayment | Usage |
| OrderTcv | RefundTransactionLog |  |


## Configure excluded fields for Base Object

Base Objectのデータをインポートする場合、一部の特殊なフィールドはデフォルトで除外されます。これは、Zuoraによって各Base Objectに適用される制限または制約によるものです。

例：RatePlanCharge DiscountAmountは、次のフィールドと一緒にクエリできません：Price、IncludedUnits、DiscountPercentage、OveragePrice。プラグインはデフォルトでこれらのフィールドを除外します。Advanced Configuration UIで除外フィールドのリストを変更できます。Advanced ConfigurationはBase Objectの除外フィールドのリストを自動的に入力します。

除外フィールドを変更する手順：

1. Base Objectプレビュー画面で、**Advanced Settings**を選択します。
2. **Advanced Settings**には、事前定義された除外フィールドのリストが含まれています（存在する場合）。フィールドを置き換えたり変更したりすることもできます。ただし、一部のフィールドは一緒に含めることができないことに注意してください。


![](/assets/image-20191022-134606.3570724ecc39b98a70aa6127bcdbc1adec43bd890f6fa0ac9dba6c813f61f1c0.b7743126.png)

![](/assets/image-20191022-134616.fb4954cffe0b4a7596f74a21eadb15fcf2c3cd1d365f1c58070932ffd79d99a6.b7743126.png)

除外フィールド設定はBase Objectターゲットでのみ機能し、Data Sourceターゲットでは無視されます

## Customize timestamp column

### Timestamp column

Timestamp列は、データコネクタが時間範囲フィルタを適用するために使用するZuoraオブジェクト列です。列はデフォルトでUpdatedDateまたはプラグイン内部設定で事前設定された列になります。

| Zuora Object | Incremental Column |
|  --- | --- |
| PaymentGatewayReconciliationEventLog | CreatedDate |
| PaymentMethodTransactionLog | TransactionDate |
| PaymentReconciliationLog | CreatedDate |
| PaymentTransactionLog | TransactionDate |
| RefundTransactionLog | TransactionDate |


前の表にリストされていない、サポートされているその他すべてのZuoraオブジェクトは、デフォルトの列*UpdatedDate*を使用します。

### Customize timestamp column

異なる列をtimestamp列として使用したい場合があります。**Advanced Configuration**画面のTimestamp列設定を通じて列を指定できます。

![](/assets/image-20191022-134643.6a0401ccf542a5ec558824040b0f8eb174bab2f2288355f4321bc387a245b242.b7743126.png)

パラメータ値は、Zuora ZOQLフィルタと同じ形式で、*ObjectName.ColumnName*の形式になります。例：RatePlanCharge.UpdatedAt、RatePlan.UpdatedAt、RatePlanChargeTier.UpdatedAt。

timestamp列として使用される列は、ZuoraでDateTime型データタイプを持つ必要があります。