# Apptopiaインポート連携

このData Connectorを使用すると、ApptopiaデータソースオブジェクトをTreasure Dataにインポートできます。

# 前提条件

- Treasure Dataの基本的な知識
- Apptopiaの基本的な知識


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

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

Treasure Dataでは、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証情報を提供します。

1. **Treasure コンソール**を開きます。
2. **Integrations Hub** > **Catalog**に移動します。
3. Catalog画面の右端にある検索アイコンをクリックし、**Apptopia**と入力します。
4. Apptopiaコネクターの上にマウスを置き、**Create Authentication**を選択します。
![](/assets/apptopia.9ddc7ce1ae77c85440d757040c84ab6e49a1a6fab32da251232a2a651058ed72.8388fc3e.png)
以下のダイアログが開きます。
![](/assets/apptopianewauth.f2b3ad10b2e353619c8cc1e8748a3e2d1640ac6c8b05ec6d549b67cf73a6e1d9.8388fc3e.png)


ApptopiaのClient IDとSecret Keyの情報を編集します。次に**Continue**をクリックします。接続に名前を付け、**Done**をクリックします。

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

**Create Connection**を選択すると、[Authentications](https://console.treasuredata.com/connections/list)タブに移動します。作成した接続を探し、**New Transfer**を選択します。

![](/assets/image-20191015-161639.bdda5cc998dc7db7ec75514a82f89e4c5d400ed58db231295e82c04db6131fc7.8388fc3e.png)

以下のダイアログが開きます。詳細を編集し、**Next**を選択します。

![](/assets/image-20191015-163659.2022b5f920cfbf4dac2ddcd1a0a56f6ab70c9410a95627d8a84e9634e0835749.8388fc3e.png)

データをプレビューします。何か変更したい場合は、**Advanced Settings**を選択するか、**Next**を選択します。

![](/assets/image-20191015-163743.30c6b77b3a6301ffd108ccc4fe15d634ed4d51eb860d1e8e38759e8ad54ee715.8388fc3e.png)

Advanced Settingsでは、レート制限などのオプションを変更できます：

![](/assets/image-20191015-163831.90d9866b4c0d6f38c1e413bf98534304a5e7cc4eb0e045e705034ce4bcc87b0b.8388fc3e.png)

以下のダイアログに示されているように、データを転送するデータベースとテーブルを選択します：

![](/assets/image-20191015-163913.64b2f05cd549712d069bd9e85644d603551cc71f7f6c99d7944a2d9af76def74.8388fc3e.png)

データ転送のスケジュールを指定し、**Start Transfer**を選択します：

![](/assets/image-20191015-163952.374901cc8f3d6e71865fed01e9a1fbe9dffb439e2c25819a2439054f075fbdf1.8388fc3e.png)

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

# コマンドライン

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

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


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

## 設定ファイルの作成

以下のように、Apptopiaアカウントのアクセス情報を含む設定ファイル(例: load.yml)を準備します:


```yaml
in:
  type: apptopia
  client: xxxxxxxx
  secret: xxxxxxxx
  target: publisher_performance (必須、付録Bを参照)
  store: itunes_connect (必須、付録Cを参照)
  start_date: 2017-01-01 (`category`および`country`以外のすべてのtargetに必須)
  end_date: 2017-02-01 (`category`および`country`以外のすべてのtargetに必須)
  requests_per_minute_limit: 300 (オプション、デフォルトは1000、付録Fを参照)
out:
  mode: replace
```

この例では、Apptopia Publisher Performanceデータソースを示しています:

- client: ApptopiaクライアントID。
- secret: Apptopiaシークレット。
- target: インポートするApptopiaエンティティオブジェクト。
  - 利用可能なtargetのリストについては、[付録](/ja/int/apptopia-import-integration#h1__1835053169)を参照してください。
- store: データを取得するモバイルマーケット
  - 利用可能なstoreのリストについては、[付録](/ja/int/apptopia-import-integration#h1__1835053169)を参照してください。
- start_date: どの日付(yyyy-MM-dd)からプロダクトデータをインポートするか。このフィールドは、プロダクト使用状況(targetがproduct_usage)またはプロダクト売上(targetがproduct_sales)をアプリ内課金の内訳(breakdownにiapを含む)とともに取得する場合に必須です。
- end_date: どの日付(yyyy-MM-dd)までプロダクトデータをインポートするか。このフィールドはオプションで、現在の日付によって制限されたstart_dateから最大60日間に自動調整されます。
- requests_per_minute_limit: 1分あたりのAPI呼び出し数を制限
  - これらのオプションの使用方法については、[付録](/ja/int/apptopia-import-integration#h1__1835053169)を参照してください


利用可能なoutモードの詳細については、付録を参照してください

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

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


```
$ td connector:preview load.yml
+------------+------------------+--------------------+----
| id:string  | store:string     | country_iso:string | ...
+------------+------------------+--------------------+----
| 420233213  | "itunes_connect" | US                 |
| jp.td.app  | "google_play"    | JP                 |
+------------+------------------+--------------------+----
```

## ロードジョブの実行

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

Treasure Dataのストレージは時間でパーティション化されているため([データパーティショニング](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)も参照)、--time-columnオプションを指定することをお勧めします。このオプションが指定されない場合、Data Connectorは最初のlongまたはtimestamp列をパーティショニング時間として選択します。--time-columnで指定される列の型は、longまたはtimestamp型のいずれかである必要があります。
データに時刻カラムがない場合は、add_timeフィルターオプションを使用して追加できます。詳細については、[add_time Filter Plugin for Integrations](https://docs.treasuredata.com/smart/project-product-documentation/add_time-filter-function)を参照してください。


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

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


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

「--time-column」オプションで、Time Formatカラムを「Partitioning Key」に割り当てることができます。

# スケジュール実行

定期的なApptopiaインポートのために、Data Connectorの定期実行をスケジュールできます。高可用性を確保するために、スケジューラーを慎重に設定しています。この機能を使用することで、ローカルデータセンターでcronデーモンを使用する必要がなくなります。

## スケジュールの作成

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


```bash
td connector:create \
daily_apptopia_import \
"10 0 * * *" \
td_sample_db \
td_sample_table \
load.yml
```

`cron`パラメータは、`@hourly`、`@daily`、`@monthly`のオプションも受け付けます。
デフォルトでは、スケジュールは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_apptopia_import | 10 0 * * *   | UTC      | 0     | td_sample_db | td_sample_table | {"type"=>"apptopia", ... }  |
+-----------------------+--------------+----------+-------+--------------+-----------------+-----------------------------+
```

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

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


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

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


```
% td connector:history daily_apptopia_import
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| JobID  | Status  | Records | Database     | Table           | Priority | Started                   | Duration |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| 578066 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-18 00:10:05 +0000 | 160      |
| 577968 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-17 00:10:07 +0000 | 161      |
| 577914 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-16 00:10:03 +0000 | 152      |
| 577872 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-15 00:10:04 +0000 | 163      |
| 577810 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-14 00:10:04 +0000 | 164      |
| 577766 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-13 00:10:04 +0000 | 155      |
| 577710 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-12 00:10:05 +0000 | 156      |
| 577610 | success | 10000   | td_sample_db | td_sample_table | 0        | 2015-04-11 00:10:04 +0000 | 157      |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
8 rows in set
```

## スケジュールの削除

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


```
$ td connector:delete daily_apptopia_import
```

# 付録

## Outプラグインのモード

load.ymlのoutセクションでファイルインポートモードを指定できます。

### append (デフォルト)

これはデフォルトモードで、レコードはターゲットテーブルに追加されます。


```
in:
  ...
out:
  mode: append
```

### replace (td 0.11.10以降)

このモードは、ターゲットテーブルのデータを置き換えます。ターゲットテーブルに対して手動で行われたスキーマ変更は、このモードでは保持されます。


```
in:
  ...
out:
  mode: replace
```

## 利用可能なターゲット

| Target | Description |
|  --- | --- |
| app_metadata | アプリケーションメタデータ |
| app_performance | アプリケーションパフォーマンス |
| app_ranks | アプリケーションランキング |
| app_sdks_metadata | アプリケーションSDKsメタデータ |
| category | カテゴリーのリスト |
| category_rank_lists | 各カテゴリーのトップチャートの生ランク |
| category_featured_lists | 各カテゴリーの注目アプリケーション |
| category_new_releases | 各カテゴリーの新しいアプリリリース |
| country | サポートされている国 |
| publisher_metadata | パブリッシャーメタデータ |
| publisher_performance | パブリッシャーパフォーマンス |
| sdk_metadata | SDKメタデータ |


## 利用可能なマーケット

| Store | Description |
|  --- | --- |
| itunes_connect | Apple Store |
| google_play | Google Play Market |


## レート制限

Apptopiaには、1分あたりのリクエスト数のレート制限があります。このレート制限は、一定の秒数後に自動的に更新されます。

同じApptopiaアカウントで複数の転送がある場合、アカウントの合計制限を超えない限り、詳細設定のrequests_per_minute_limitを使用して各転送のレート制限使用量を制御できます。例えば、アカウントに1000コール/分のクォータがある場合、app_performanceとpublisher_performanceターゲットの2つの転送を作成する場合、app_performance転送に600 rpmを使用し、残り(400 rpm)をpublisher_performance転送に使用できます。