# Intercom Import Integration IntercomからTreasure Dataへ直接データをインポートできます。 # 前提条件 - [TD Toolbelt](https://toolbelt.treasuredata.com/)を含むTreasure Dataの基礎知識 - Intercomの基礎知識 # TD Consoleを使用してConnectionを作成する ## 新しいConnectionを作成する Integrations Hub > Catalogに移動し、Intercomを検索して選択します。 ![](/assets/image-20191021-163206.227de535ba11d859b5f72ca39993368b027215d1731b56966a1f61fae0195574.5ce474d2.png) **Create**を選択します。認証済みConnectionを作成します。 次のダイアログが開きます。 ![](/assets/image-20191021-163213.a3fc44d8e4fdc2cec029167063f6d4fe801e2201ca2ddb84b327389428ee322e.5ce474d2.png) Intercomへのアクセスには、OAuth2認証が必要です。 **Click here**を選択して、Intercomアカウントに接続します。 認証情報を入力してIntercomにサインインします。 ![](/assets/image-20191021-163226.7bf8e404820f7180f50906343f51d0975c1cdab2ac3c1ac293ace4808e89c6be.5ce474d2.png) Treasure Dataへのアクセスを許可すると、TD Consoleにリダイレクトされます。再度Intercom connectorを選択し、OAuth Authenticateメソッドを選択します。ドロップダウンリストにアカウント名を持つOAuth接続が表示されます。使用するアカウントを選択し、接続の作成に進みます。 ![](/assets/image-20191021-163235.7be7aea3c68d676a1522ba30ec3a9044437329da72b90211304534929a4c4ebb.5ce474d2.png) ![](/assets/image-20191021-163244.5d4e9fb45ea3b663b3d1aa82393219c3e8b58ad988d22c150ea86bd560dcb556.5ce474d2.png) 新しいGoogle Drive Connectionに名前を付けます。**Done**を選択します。 以前、このdata connectorでは認証に`App id`と`API Key`が使用されていました。しかし、[IntercomはOAuthフローを開始](https://developers.intercom.com/blog/oauth-support)し、[Intercom APIキーは非推奨](https://developers.intercom.com/blog/announcement-upcoming-deprecation-of-api-keys)になりました。 Google Sign-Inを使用してIntercomにログインしている場合は、OAuthフローを開始する前に、すでにIntercomにログインしていることを確認してください。IntercomはOAuthフロー経由でGoogle Sign-Inではなく、パスワードログインを要求します。 #### 既存のAPIキーベースのConnectionをOAuthに更新する APIキーを使用している場合でも、以前と同じようにOAuthフローを開始してください。両方が指定されている場合、OAuthがAPIキーよりも優先されます。 ## Treasure Dataへデータを転送する 認証済みConnectionを作成すると、自動的にAuthenticationsタブに移動します。作成したConnectionを探して、**New Source**を選択します。 ### UsersとConversationsからインポート: Sourceからusersまたはconversationsを選択します。 ![](/assets/image-20191021-163319.73d1548449516a00ddb5fe3c93b2ec55e5d5387ad117d63f61e25d017dcf58cc.5ce474d2.png) ![](/assets/image-20191021-163327.738525ff2b84c207d192141fbb7774a6f23ab67899feb9cbba612d9c4e490d6b.5ce474d2.png) パラメータ: - **Incremental**: スケジュールに基づいてデータをインポートする場合に使用します。前回の実行以降に作成された最新のuserまたはconversationのみをインポートするために使用します。 ### TagsとSegmentsからインポート: Sourceからtagsまたはsegmentsを選択します ![](/assets/image-20191021-163335.e3abc2f92bae7da6366e17d05abdd8ec36628fd85e2cfabd83dc65eb7aea1002.5ce474d2.png) ![](/assets/image-20191021-163342.ba298752c9b7ab290168b0d743fb9931301c223806f3c4d527b2a81ff24444eb.5ce474d2.png) ### Data Preview インポートを実行する前に、Generate Preview を選択してデータの[プレビュー](/products/customer-data-platform/integration-hub/batch/import/previewing-your-source-data)を表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。 1. **Next** を選択します。Data Preview ページが開きます。 2. データをプレビューする場合は、**Generate Preview** を選択します。 3. データを確認します。 ### Data Placement データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。 1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。 2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。 3. オプションで、database 名を入力します。 4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。 5. オプションで、table 名を入力します。 6. データをインポートする方法を選択します。 - **Append** (デフォルト) - データインポートの結果は table に追加されます。 table が存在しない場合は作成されます。 - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。 - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。 7. **Timestamp-based Partition Key** 列を選択します。 デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。 8. データストレージの **Timezone** を選択します。 9. **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** を選択します。 5. **Create & Run Now** を選択します。 転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。 ## Details Transferに名前を付けて、**Done**を選択して開始します。 ![](/assets/image-20191021-163431.eb0a775efe14f22aa08cc9d933172ac06f1c5bfc04d45f03b66a17a1054affcb.5ce474d2.png) # コマンドラインの使用 ### 'td' コマンド v0.11.9 以降をインストール 最新の [TD Toolbelt](https://toolbelt.treasuredata.com/) をインストールできます。 ``` $ td --version 0.15.0 ``` ## 設定ファイルの作成 以下の例のように、Intercom アカウントのアクセス情報を含む設定ファイル(例: `load.yml`)を準備します: Users をインポートする場合 ``` in: type: intercom access_token: xxxxxxx target: users incremental: false out: mode: append ``` Conversations をインポートする場合 ``` in: type: intercom access_token: xxxxxxx target: conversations incremental: false out: mode: append ``` Segments をインポートする場合 ``` in: type: intercom access_token: xxxxxxx target: segments out: mode: append ``` Tags をインポートする場合 ``` in: type: intercom access_token: xxxxxxx target: tags out: mode: append ``` #### Access Token 上記の例では、Intercom の `users` オブジェクトをダンプします。ここで `access_token` は、Intercom から取得した有効なアクセストークンです。TD Console を通じた OAuth フローの使用が推奨されます。OAuth フローの代わりに、[Personal Access Token](https://developers.intercom.com/docs/personal-access-tokens) を `access_token` として使用することもできます。 #### Target `target` オプションで、ストアから取得するデータを選択できます。 ## データのプレビュー(オプション) `td connector:preview` コマンドを使用して、インポート予定のデータをプレビューできます。 ``` $ td connector:preview load.yml ``` +-----------+--------------+----------------------------+---- | id:string | user_id:string | email:string | ... +-----------+----------------+------------------------------- | "1" | "33" | "xxxx@xxx.com" | | "2" | "34" | "yyyy@yyy.com" | | "3" | "35" | "zzzz@zzz.com" | | "4" | "36" | "aaaa@aaa.com" | | "6" | "37" | "bbbb@bbb.com" | +-----------+----------------+--------------------------+---- ``` ## Load Jobの実行 Load Jobを送信します。データサイズによっては数時間かかる場合があります。ユーザーはデータが保存されているデータベースとテーブルを指定する必要があります。 Treasure Dataのストレージは時間でパーティション化されているため、`--time-column`オプションを指定することをお勧めします。オプションが指定されていない場合、Data Connectorは最初の`long`または`timestamp`カラムをパーティショニング時間として選択します。`--time-column`で指定されるカラムのタイプは、`long`または`timestamp`タイプのいずれかである必要があります。 データに時間カラムがない場合は、`add_time`フィルターオプションを使用して追加できます。詳細は[add\_time filter plugin](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 created_at ``` 上記のコマンドは、すでに*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`オプションを使用してデータベースとテーブルを自動作成してください。 ``` $ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table ``` Time Format カラムを「Partitioning Key」に割り当てるには、「--time-column」オプションを使用します。 # スケジュール実行 定期的なIntercomインポートのために、定期的なData Connector実行をスケジュールできます。当社は高可用性を確保するためにスケジューラーを慎重に構成しています。この機能を使用することで、ローカルデータセンターで`cron`デーモンを実行する必要がなくなります。 ## スケジュールの作成 新しいスケジュールは`td connector:create`コマンドを使用して作成できます。スケジュールの名前、cronスタイルのスケジュール、データが保存されるデータベースとテーブル、およびData Connector設定ファイルが必要です。 ``` $ td connector:create daily_intercom_import "10 0 * * *" td_sample_db td_sample_table load.yml ``` `cron`パラメータは、次の3つのオプションも受け入れます:`@hourly`、`@daily`、`@monthly`。| デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。`-t`または`--timezone`オプションを使用して、タイムゾーンでスケジュールを設定できます。`--timezone`オプションは、「Asia/Tokyo」、「America/Los\_Angeles」などの拡張タイムゾーン形式のみをサポートします。PST、CSTなどのタイムゾーンの略語は\*サポートされておらず\*、予期しないスケジュールにつながる可能性があります。 ## スケジュールのリスト表示 `td connector:list`でスケジュールされたエントリのリストを確認できます。 ``` $ td connector:list ``` ## スケジュールの設定と履歴の表示 `td connector:show`は、スケジュールエントリの実行設定を表示します。 ``` td connector:show daily_intercom_import ``` `td connector:history`は、スケジュールエントリの実行履歴を表示します。個々の実行の結果を調査するには、`td job jobid`を使用します。 ``` td connector:history daily_intercom_import ``` ## スケジュールの削除 `td connector:delete`はスケジュールを削除します。 ``` td connector:delete daily_intercom_import ``` ```