# Cvent Import Integration

Treasure Data Customer Data Platformを使用して、人気のあるイベント管理ソフトウェアであるCventからイベント情報を取り込みます。

# 前提条件

- Treasure コンソールおよびTD Toolbeltの基本知識
- Cventの基本知識


# Treasure コンソールの使用

## 新しい接続の作成

1. **Treasure コンソール**を開きます。
2. **Integrations Hub > Catalog**に移動します。
3. Catalog画面の右端にある検索アイコンをクリックし、**cvent**と入力します。
4. cventコネクタにカーソルを合わせ、**Create Authentication**を選択します。![](/assets/cvent.b6abade4fadb6d63f11a81ed18cd6b44fd1d377e4a724815f694dacc9e648bc8.5197f004.png)
5. 必要な認証情報を編集します。
API User NameとAPI Passwordは、Cventアプリケーションのユーザー名とパスワードとは異なりますので、API User NameとAPI Passwordの生成については、Cvent管理者に問い合わせてください。
[Cvent Sandbox](https://sandbox-app.cvent.com/)に対してテストAPIアカウントを使用している場合は、Sandboxにチェックを入れてください。
![](/assets/image-20191021-142118.fe0ab3154b27ca3a454ab88b4a883f7ab01931cf625f5c2bdde2287fc980c73d.5197f004.png)
6. **Continue**をクリックします。
7. 接続に名前を付けます。
8. **Done**をクリックします。


## 新しいSourceの作成

認証された接続から**New Source**を選択します。

![](/assets/image-20191021-142141.fb9dd4757fbd5b6f596f546b90755791bd27eee11abc6c92342e37718c3b95d9.5197f004.png)

この転送のデータタイプと取得時間範囲を選択します。

![](/assets/image-20191021-142517.189b959171d711ac782a3b043a71e868e92a3c363e8470bcfb30f0b907cdedea.5197f004.png)

**Data Type**: サポートされているタイプは、Registration、Invitee、Contact、Eventです。

**Start Date**: データ時間ウィンドウの開始時点です。上記の画像の例では、2018-08-01 00:00:00 UTCから変更されたすべてのRegistrationが取得されます。

**Duration**: 時間ウィンドウの長さです。上記の例では、時間の長さは2018-08-01 00:00:00 UTCから2018-09-01 00:00:00 UTCまでの取得に相当します。

**Incremental**: スケジュールで実行する場合、取得されるデータの時間ウィンドウは、各実行ごとに自動的に前方にシフトします。たとえば、初期設定が1月1日で期間が10日の場合、最初の実行では1月1日から1月10日までに変更されたデータが取得され、2回目の実行では1月11日から1月20日までに変更されたデータが取得されます。以降も同様です。

## プレビュー

![](/assets/image-20191021-142538.ae68514764e07a4f348d916facb4c6adba698ba372ae82408de413d297afe4ff.5197f004.png)

これは、指定されたデータ転送設定における実際のデータのプレビューを示しています。列はアルファベット順にソートされていますが、カスタムフィールド列（存在する場合）は末尾に配置されます。この順序は、ターゲットデータベースの最終結果にも適用されます。

## ターゲットデータベースとテーブルの選択

既存のデータベースとテーブルを選択するか、新しく作成します。

![](/assets/image-20191021-142550.b82c90f3b712bad3b721e551f443f980daf576e3dadbd469c6d45dd6f36f1d52.5197f004.png)

このコネクタは、Cvent APIから受信したリテラルの時刻値を挿入します。つまり、時刻値はCventサーバーの暗黙的なタイムゾーンに対して相対的であり、UTCであると*仮定*されます。また、Eventデータタイプの時刻関連フィールドは、そのイベント自体のタイムゾーンに対して相対的です。これは、Data Storage Timezoneがデータの実際のタイムゾーンを示していないことを意味します。

## スケジューリング

必要に応じてスケジュールを設定します。スケジュールされた時刻になるとインポートが開始されます。「Once now」を選択した場合は即座に開始されます。

![](/assets/image-20191021-142236.0b2d7b491adf7fdfc618f568aa3157d9deb307f69b94d9c87323c475fb1e2009.5197f004.png)

**START TRANSFER**を選択し、Jobsページで実行中のジョブを確認します。

# コマンドラインの使用

## 前提条件のインストール

Ruby gemを介して最新の`td`ツールをインストールします：


```
$ gem install td
$ td --version
0.15.8
```

他のインストール方法もあります。詳細については、[Treasure Data Toolbelt](https://toolbelt.treasuredata.com/)を確認してください。

## 設定ファイル（config.yml）の作成

設定ファイルを作成します：


```
in:
  type: cvent
  target: registration
  account_name: xxxxxxxxxxxxxxxx
  api_username: xxxxxxxxxxxxxxxx
  api_password: xxxxxxxxxxxxxxxx
  start_time: 2017-08-01
  fetch_days: 31
  parallel: true

  out:
  mode: append
```

## プレビュー


```
$ td connector:preview config.yml
  +---------------------------+---------------+-----------------+---+-----------------+-------------------+---------------------------------+
  | archive_date:timestamp    | capacity:long | category:string |...| currency:string | event_code:string | event_description:string        |
  +---------------------------+---------------+-----------------+---+-----------------+-------------------+---------------------------------+
  | "2018-12-29 21:59:00 UTC" | -1            | "Conference"    |...| "U.S. Dollar"   | "KGNH2JXF45K"     | ""                              |
  | "2019-01-26 21:59:00 UTC" | 500           | "Conference"    |...| "U.S. Dollar"   | "W4NKF4YWY4W"     | "Devcon for Cvent TD Engineers" |
  +---------------------------+---------------+-----------------+---+-----------------+-------------------+---------------------------------+
```

## ロードジョブの実行

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

Treasure Dataのストレージは時刻でパーティション化されているため、`--time-column`オプションを指定することをお勧めします。このオプションが指定されていない場合、データコネクタはパーティション化時刻として最初の`long`または`timestamp`列を選択します。`--time-column`で指定する列のタイプは、`long`または`timestamp`タイプのいずれかである必要があります（利用可能な列名とタイプを確認するには、プレビュー結果を使用してください。一般的に、ほとんどのデータタイプにはlast_modified_date列があります）。

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

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


```
$ td connector:issue config.yml \
  --database sample_db \
  --table sample_table
```

`connector:issue`コマンドは、*データベース（sample_db）*と*テーブル（sample_table）*が既に作成されていることを前提としています。データベースまたはテーブルがTDに存在しない場合、`connector:issue`コマンドは失敗します。したがって、データベースとテーブルを手動で作成するか、`td connector:issue`コマンドで`--auto-create-table`オプションを使用してデータベースとテーブルを自動的に作成する必要があります：


```
$ td connector:issue load.yml \
  --database sample_db \
  --table sample_table \
  --auto-create-table
```

# スケジュール実行

定期的な Cvent インポートのために、データコネクタの定期実行をスケジュールできます。この機能を使用することで、ローカルデータセンター上で `cron` デーモンを実行する必要がなくなります。

## スケジュールの作成

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


```
$ td connector:create \
  daily_cvent_import \
  "10 0 * * *" \
  sample_db \
  sample_table \
  config.yml
```

|  |
|  --- |
| `cron` パラメータは、`@hourly`、`@daily`、`@monthly` の3つの特別なオプションも受け付けます。詳細については、[Scheduled Jobs](/products/customer-data-platform/job-management/scheduling-jobs-using-td-console) を参照してください。 |


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

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

`td connector:list` を使用して、現在スケジュールされているエントリの一覧を表示できます。


```
$ td connector:list
  +--------------------+------------+----------+-------+-----------------+--------------+
  | Name               | Cron       | Timezone | Delay | Database        | Table        |
  +--------------------+------------+----------+-------+-----------------+--------------+
  | daily_cvent_import | 10 0 * * * | UTC      | 0     | sample_database | sample_table |
  +--------------------+------------+----------+-------+-----------------+--------------+
```

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

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


```
$ td connector:show daily_cvent_import
  Name     : daily_cvent_import
  Cron     : 10 0 * * *
  Timezone : UTC
  Delay    : 0
  Database : sample_db
  Table    : sample_table
```

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


```
$ td connector:history daily_cvent_import
  +--------+---------+---------+-----------+--------------+----------+---------------------------+----------+
  | JobID  | Status  | Records | Database  | Table        | Priority | Started                   | Duration |
  +--------+---------+---------+-----------+--------------+----------+---------------------------+----------+
  | 578066 | success | 20000   | sample_db | sample_table | 0        | 2015-04-18 00:10:05 +0000 | 160      |
  | 577968 | success | 20000   | sample_db | sample_table | 0        | 2015-04-17 00:10:07 +0000 | 161      |
  | 577914 | success | 20000   | sample_db | sample_table | 0        | 2015-04-16 00:10:03 +0000 | 152      |
  | 577872 | success | 20000   | sample_db | sample_table | 0        | 2015-04-15 00:10:04 +0000 | 163      |
  | 577810 | success | 20000   | sample_db | sample_table | 0        | 2015-04-14 00:10:04 +0000 | 164      |
  | 577766 | success | 20000   | sample_db | sample_table | 0        | 2015-04-13 00:10:04 +0000 | 155      |
  | 577710 | success | 20000   | sample_db | sample_table | 0        | 2015-04-12 00:10:05 +0000 | 156      |
  | 577610 | success | 20000   | sample_db | sample_table | 0        | 2015-04-11 00:10:04 +0000 | 157      |
  +--------+---------+---------+-----------+--------------+----------+---------------------------+----------+
```

## スケジュールの削除

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


```
$ td connector:delete daily_cvent_import
```

# 制限事項

Cvent Connector には、Cvent API と同じアップストリーム制限があります。これは以下を意味します:

- Contact、Invitee、Event は、同じ秒に変更された25,000件未満のレコードをデータが含む場合にのみ取得可能です。
- Registration は、同じ秒に変更された25,000件未満のレコードをデータが含む場合にのみ取得可能です。
- 1日あたり10,000リクエストの上限があり、これはおおよそ1日あたり200万レコードに相当します。


# 付録A: カラム名のマッピング方法

すべてのカラムは [snake case](https://en.wikipedia.org/wiki/Snake_case) です (例: first_name、last_name)。

Cvent API のアップストリームの問題により、「RSVP By Date」は異常なカラム名にマッピングされます: "rsv_pby_date"

カスタムフィールド名は、以下の手順で snake case にマッピングされます:

1. すべての非英数字をアンダースコア "_" に置き換える
2. ステップ1の後、先頭と末尾のすべてのアンダースコアを削除する
3. 最初の文字が数字の場合、名前の前に "col_" を付ける
4. 連続するすべてのアンダースコア "_" を削除する
5. 前述の手順の後に名前が空の場合、"custom_field" と名付ける (このカラムフィールド名は、Treasure コンソール のカラム名とは異なります)
6. すべての文字を小文字にする


例: "Hello @ World" は "hello_world" にマッピングされ、"" (空) は "custom_field" にマッピングされます。
命名の競合がある場合、競合するカスタムフィールド名にはフィールドの ID が追加されます。例えば、Contact タイプに「First Name」というカスタムフィールド名がある場合 (すでにその名前の事前定義フィールドが存在します)、カスタムフィールド名は "first_name_A3E3_ERQNIHOIU_324AE" のようなものにマッピングされます。

# 付録B: Event のタイムゾーン

![](/assets/image-20191021-142409.4944b67473ce3c61fe407a67d0d58d8987608c4a117099d887859b936cac890f.5197f004.png)

他の datetime フィールドとは異なり、上記の4つの event 関連の datetime フィールドはテキストとしてインポートされ、わずかに異なる形式でデータベースで認識できます (例: Start Date は "2018-10-09T17:59:00" としてインポートされ、Start Date がデフォルトの datetime 値の場合は "2018-10-09 17:59:00.000" になります)。Event 関連の datetime フィールドは、それぞれの event タイムゾーンに対して相対的です。したがって、これらの event 関連の datetime フィールドは、他のフィールドのような絶対時刻参照として扱われません。

Event 関連の datetime フィールドは、インポート後に以下のカラムに対応します:

| Target Type | Column |
|  --- | --- |
| Event | `event_start_date` |
| Event | `event_end_date` |
| Event | `archive_date` |
| Event | `rsv_pby_date` |
| Registration | `event_start_date` |
| Invitee | `event_start_date` |