# Tableau Cloud Export Integration

[Tableau Cloud](http://www.tableausoftware.com/products/online)（旧Tableau Online）とTreasure Dataを組み合わせることで、膨大なデータをインタラクティブに探索し、ビジネス組織全体でデータの発見を共有できます。

![](/assets/image2020-12-2_17-13-28.9f21e33486793fec12b0c06af624d4103809ab33fbcb2fcde46fdd58885e5763.2e27f6a2.png)

Tableau Cloudへのエクスポートのサンプルワークフローについては、[Treasure Boxes](https://github.com/treasure-data/treasure-boxes/tree/master/td/tableau)を参照してください。

## 前提条件

- Treasure Dataの基本的な知識
- Tableau Cloudのライセンスとそのインストール
- コネクタにはデータソースのパブリッシュ権限が必要です。クリエイターまたは管理者ユーザーロールが該当します。
- Personal Access Tokenで認証する場合は、Personal Access Token名とシークレット


## 制限事項

- 最大結果レコード数は250,000,000レコードです。
これを超えると、ログに次のメッセージが表示されます：Extract file records limit exceeded: 250000000.
- Timestampの最小値は1000-01-01 00:00:00です。
これを超えると、ログに次のメッセージが表示されます：invalid date value.
- 既存のData Sourceに大きなデータセットを追加すると、タイムアウトが発生する場合があります。
ジョブログに次のメッセージが表示されます：

```
2019-04-10 19:20:41.460 +0000 [WARN] (0001:transaction): !!! Data Source Publish is timed out. This is a known issue of Tableau when you append a large extract file to existing Data Source.
2019-04-10 19:20:41.460 +0000 [WARN] (0001:transaction): !!! Check Tableau Console for final result of the Publish.
```
- ジョブは成功しますが、Tableau Consoleで最終結果を確認する必要があります（Data Sourceの**レコード数**で確認できます）。
- Tableauのプロジェクト名は一意である必要があります。同じ名前のプロジェクトが複数ある場合、エクスポートは失敗します：**Project Name must be unique, but found n projects with name: '<project_name>'**。
- Personal Access Tokenを認証方法として選択した場合のトークンの有効期限。Personal Access Tokenは、15日間連続して使用されない場合に期限切れになります。15日ごとに頻繁に使用される場合、アクセストークンは1年後に期限切れになります。1年後、新しいトークンを作成する必要があります。期限切れのPersonal Access Tokenは、My Account Settingsページに表示されません。
- PATで認証する場合、そのPATを使用して一度に1つのプロセスしか実行できません（ユーザー名とパスワードで認証する場合とは異なります）。最初のジョブがまだ実行中のときに同じPATを使用して2番目の認証を実行すると、最初のジョブの認証/承認が削除され、エラーが発生します。
ジョブログに次のメッセージが表示されます：

```
2021-12-26 07:55:47.926 +0000 [WARN] (0001:transaction): Retrying 2/7 after 2 seconds. Message: javax.ws.rs.WebApplicationException: HTTP 401 Unauthorized
....
2021-12-26 07:57:53.523 +0000 [ERROR] (main): org.embulk.util.retryhelper.RetryGiveupException: java.lang.NullPointerException
```


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

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

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

## Treasure コンソールを使用して接続を作成する

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

接続を作成するには2つの異なるプロセスがあります：

- Tableauのユーザー名とパスワードを使用する
- Personal Access Tokenを使用する


### Tableauのユーザー名とパスワードで新しい認証を作成する

1. Treasure コンソールを開きます。
2. Integrations Hub > Catalogに移動します。
3. Tableauを検索して選択します。
![](/assets/image2021-11-15_10-18-21.f88bafbe3a46ab1771301f2d75e600113dadda99ca8e755256c90d3f58027b01.2e27f6a2.png)
4. **Create Authentication**を選択します。
![](/assets/image2021-11-15_10-20-51.39aa71003a00903d3950b1f646ea6c8b985ac428181c577a15e01c2aaa2f0dfc.2e27f6a2.png)
5. 認証するために次の認証情報を入力します。
| Parameter | Description |
|  --- | --- |
| Host | サイトが存在するTableau Cloudホスト  (例： [10az.online.tableau.com](http://10az.online.tableau.com)) |
| Username | Tableau Cloudのユーザー名 |
| Password | Tableau Cloudのパスワード |
6. Continueを選択します。
7. 接続の名前を入力します。
8. **Done**を選択します。


### Personal Access Tokenで新しい認証を作成する

1. Tableau Cloudサーバーにログインし、**My Account Settings**に移動します。
![](/assets/image2021-10-30_13-57-9.ff406ad211fcf30dece13d515988ff964b25c49503692be9939907d5858fdfcf.2e27f6a2.png)
2. Settingsタブから Personal Access Token名を入力し、**Create new** tokenを選択します。
![](/assets/image2021-10-30_14-0-40.5b2d1c36be94847069ae1bbf4ebdda449fcd06f35d3f68f857589545252eaf7f.2e27f6a2.png)
3. Personal Access Token名/Personal Access Tokenシークレットをコピーして保存します。


### Treasure コンソールにログインする

1. Treasure コンソールを開きます。
2. **Integrations Hub** > **Catalog**に移動します。
3. **Tableau**を検索して選択します。
![](/assets/image2021-11-15_10-18-21.f88bafbe3a46ab1771301f2d75e600113dadda99ca8e755256c90d3f58027b01.2e27f6a2.png)
4. **Create Authentication**を選択します。
![](/assets/image2021-11-15_10-36-0.3dbcdc3a78dbd6e87f23e273db19c5339dbe27e178e90a26c19ff734a6e86e17.2e27f6a2.png)
5. 認証するために次の認証情報を入力します。
| Parameter | Description |
|  --- | --- |
| Host | サイトが存在するTableau Cloudホスト  (例： [10az.online.tableau.com](http://10az.online.tableau.com)) |
| Auth method | Personal Access Token |
| Personal Access Token Name | Tableau CloudのPersonal Access Token名 |
| Personal Access Token Secret | Tableau CloudのPersonal Access Tokenシークレット |
6. **Continue**を選択します。
7. 接続の名前を入力します。**Done**を選択します。


### クエリを定義する

1. **Data Workbench** > **Queries**に移動します。
2. **New Query**を選択します。
3. クエリを実行して結果セットを検証します。


## ワンタイムクエリのCLI使用方法

#### JSON形式の設定（新しく、推奨）

`td query`コマンドの`-r` / `—result`オプションを使用して、Tableauの結果出力先を追加します：

Password Authentication


```bash
td query \
  -d mydb \
  -r '{
    "type": "tableau",
    "host": "company.online.tableau.com",
    "auth_method": "password",
    "username": "my_user",
    "password": "passw0rd",
    "ssl": true,
    "ssl_verify": false,
    "server_version": "online",
    "datasource": "my_ds",
    "site": "MarketingTeam",
    "project": "",
    "mode": "replace",
    "chunk_size_in_mb": 50,
    "timezone": "America/Los_Angeles"
  }' \
  'SELECT * FROM access'
```

Personal Access Token Authentication


```bash
td query \
  -d mydb \
  -r '{
    "type": "tableau",
    "host": "company.online.tableau.com",
    "auth_method": "pat",
    "pat_name": "pat_name",
    "pat_secret": "pat_secret",
    "ssl": true,
    "ssl_verify": false,
    "server_version": "online",
    "datasource": "my_ds",
    "site": "MarketingTeam",
    "project": "",
    "mode": "replace",
    "chunk_size_in_mb": 50,
    "timezone": "America/Los_Angeles"
  }' \
  'SELECT * FROM access'
```

| Parameter | Description |
|  --- | --- |
| auth_method | サポートする認証方法（[password, pat]、デフォルト：password） |
| username | Tableau Cloudのユーザー名（auth_methodがpasswordの場合は必須） |
| password | Tableau Cloudのパスワード（auth_methodがpasswordの場合は必須） |
| pat_name | Personal Access Token名（auth_methodがpatの場合は必須） |
| pat_secret | Personal Access Tokenシークレット（auth_methodがpatの場合は必須） |
| host | サイトが存在するTableau Cloudホスト（例：`10ay.online.tableau.com`） |
| datasource | ターゲットのTableau DataSource名 |
| site | サインインするサイトのURL。`site`属性に使用する値を決定するには、Tableau Cloudにサインインし、URLの`/site/`の後に表示される値を確認します。たとえば、次のURLでは、`site`の値は`MarketingTeam`です：`https://online.tableau.com/#/site/MarketingTeam/workbooks` Tableau Serverの[REST APIリファレンス](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#Sign_In?TocPath=API%2520Reference |
| Mode | `Replace-` 毎回Data Sourceを置き換える `Append-` 既存のData Sourceに追加する（デフォルトはAppend） |
| chunk_size_in_mb | 毎回アップロードされるチャンクファイルサイズ（MB）、デフォルト：100、最小：50、最大：512 |
| read_timeout_millis | レスポンスを待つ時間（最大：7200000）。ミリ秒単位の値 |
| timezone | TimestampデータタイプからTableau DateTimeデータタイプに変換するためのタイムゾーン、デフォルト：UTC |


## URL形式（非推奨、Personal Access Token認証では使用不可）

次の例のように、Tableauの結果出力先をJSON形式からURL形式に変更します：


```bash
$ td query -d mydb -r 'tableau://username:password@host/datasource?mode=replace&site' 'SELECT * FROM access'
```

## 既存の出力設定をTableau Hyperに移行する

TableauはHyperと呼ばれる技術でデータエンジンを更新しました。これを活用するには、既存のTreasure Data出力設定を更新する必要があります。新しいTreasure Data設定は自動的に最新バージョンを使用します。

### 既存の設定をアップグレードする

1. Queriesに移動し、スケジュールされたクエリを選択します。
2. Query Editorで**Export Results**ターゲットをクリックします。
3. 保存されているTableau接続を選択します。
4. **Site ID**の値を入力します。これはTableau Cloudで**必須**です。
5. **Data Source Type**に'hyper'を選択します。
6. **Done**をクリックして設定を保存します。


レガシーTableauから現在のTableauに移行する際、タイムゾーン設定を変更する必要はありません。デフォルト値（UTC）のままにすることができます。この記事の[timezone](/ja/int/tableau-cloud-export-integration)も参照してください。

### Treasure コンソールを使用したワンタイムクエリ

Treasure コンソールのクエリエディタに移動し、クエリを入力します。次のサンプルクエリは、アクセスログのサンプルデータセットを使用し、1日あたりのHTTPメソッドの分布を計算します。

#### HIVE


```sql
-- HiveQL
SELECT
  CAST(TD_TIME_FORMAT(time, "yyyy-MM-dd 00:00:00") AS TIMESTAMP) AS `dates`,
  method AS `Method`,
  COUNT(1) AS `Count`
FROM
  www_access
GROUP BY
  TD_TIME_FORMAT(time, "yyyy-MM-dd 00:00:00"),
  method
```

#### PRESTO


```sql
-- Presto
SELECT
  CAST(TD_TIME_FORMAT(time, 'yyyy-MM-dd 00:00:00') AS TIMESTAMP) AS "dates",
  method AS "Method",
  COUNT(1) AS "Count"
FROM
  www_access
GROUP BY
  TD_TIME_FORMAT(time, 'yyyy-MM-dd 00:00:00'),
  method
```

Treasure DataはDatetimeカラムをString型からTableauのTIMESTAMP型にキャストしています。

Tableauはタイムスタンプの小数秒をサポートしていません。クエリでTIMESTAMP型にキャストする前に、小数秒を削除してください（たとえば、subtr()関数を使用して）。

![](/assets/image-20191016-210119.d37229df361e6ae9f83b59c526553896524e37b48f95e23d0574bf94e9f555c1.2e27f6a2.png)

### 保存された接続を選択する

`Choose Integration`ダイアログが表示されます。既存のTableau Cloud接続を選択します。保存された統合がまだ設定されていない場合は、Sources Catalog内で新しい接続を作成する方法について次のステップに従ってください。

![](/assets/image-20191016-210136.885a90f1eb4a53ebaba682e06f7ee18784c3eb92e57b38ce3a2ea7e6968b2cd5.2e27f6a2.png)

### 追加設定

Tableau接続を作成するか既存の接続を選択すると、次のConfigurationポップアップが表示されます。

![](/assets/image-20191016-210205.3a1266b427218f641970bc24ccb4facf09d44fea47e49e558ba7f4c89ac5497a.2e27f6a2.png)

| **Parameters** | **Description** | **Default values** |
|  --- | --- | --- |
| Datasource Name | Tableau Cloud上の宛先Data Sourceの名前 |  |
| Site ID | サインインするサイトのURL。`site`属性に使用する値を決定するには、Tableau Cloudにサインインし、URLの`/site/`の後に表示される値を確認します。たとえば、次のURLでは、`site`の値は`MarketingTeam`です：`https://online.tableau.com/#/site/MarketingTeam/workbooks` これはTableau Cloudで**必須**です。 |  |
| Project Name | Tableau Cloudに移動してプロジェクトのリストを取得します。 | Default |
| Mode | `replace` 毎回Data Sourceを置き換える、`append` 既存のData Sourceに追加する | `append` |
| Chunk File Size In MB | アップロード前にextractファイルはチャンクに分割されます。このオプションは各チャンクのファイルサイズを定義します（最小：100、最大：1024）。 | 200 |
| HTTP read timeout in milliseconds | レスポンスを待つ時間（最大：7200000）。ミリ秒単位の値。 | 7200000 |
| Timezone | Timestamp（タイムゾーン非依存）からTableau DateTime（タイムゾーン依存）に変換する際に使用するタイムゾーンID。 | UTC |


Append Modeは、Tableauの仕様により、既存のデータソースに挿入されたデータをエクスポートする際に新しいカラムを無視します。[https://help.tableau.com/current/pro/desktop/en-us/extracting_addfromfile.htm](https://help.tableau.com/current/pro/desktop/en-us/extracting_addfromfile.htm)

1. すべてのフィールドを入力したら、クエリを**Submit**します。システムはクエリを実行し、Tableau Data Extractファイル（`.tde`または`.hyper`）を作成し、extractファイルをTableau Cloudにアップロードします。
2. Tableau Cloudに移動し、左上のバーの**Data Sources**をクリックします。TDEファイルを含むデータソースのリストを表示できます。![](/assets/image2021-11-15_11-9-49.ba68b45abc430e9d56cad8857d2934145a21de3d9f1cfd2f2df4e1d7657ed646.2e27f6a2.png)
3. New Workbookを選択して、ブラウザからチャートとダッシュボードを作成します。左側のナビゲーションからディメンションとメジャーを右上のナビゲーションにドラッグアンドドロップしてグラフを作成します。**Save**を選択して結果を保存します。


![](/assets/image2021-11-15_11-26-27.0b1d5c18af53267f7cbb59f47a977dcf7203c92e97941db85bf739b97bf357df.2e27f6a2.png)

## パスワードからPersonal Access Tokenへの認証の移行

Tableau CloudコンソールでMFAを有効にすると、ユーザー名/パスワードを使用して認証できなくなります。TableauにはPersonal Access Token認証が必要です。Password Authentication方式を使用していたすべての接続をPersonal Access Token Authentication方式に移行する必要があります。

### Personal Access Token認証方式への接続変更

1. Treasure コンソールにログインし、Authenticationに移動します。
![](/assets/image2021-10-30_14-56-55.84f5d6c7f59fb7b721ed0e44ba26068c9678899842b97ff2d3a31553f9dca4f3.2e27f6a2.png)
2. **Auth method**をPasswordからPersonal Access Tokenに変更し、トークン名/シークレットを入力します。
![](/assets/image2021-10-30_15-0-47.6b767f8ec9d81920161239ddbd138ec0c41c20f70158e1c3b911ff5fa5bc829d.2e27f6a2.png)
3. この接続を使用して、Personal Access Token名/シークレットでTableauにデータをエクスポートできます。


## 保存されたクエリをPersonal Access Token認証方式に更新する

1. 保存されたクエリのコネクタをPassword AuthenticationからPersonal Access Token Authenticationに変更します。
2. **Data Workbench** > **Queries**に移動します。
3. 保存されたクエリを選択し、**Clone**を選択します。クエリの新しい名前を入力します。
![](/assets/image2021-10-30_15-11-58.0a369a89d5a208149688071aed5e6938ff5cc5b1fa06beff44bbaa718e2500d6.2e27f6a2.png)
4. クエリエディタから、Export Resultを選択し、ステップ1で編集した接続を選択します。エクスポート設定を再度完了します。
![](/assets/image2021-10-30_15-15-55.e420aded5b218151fd090504c65e074bd75947682be54528201a3ef75c0b594c.2e27f6a2.png)
5. Treasure コンソールのクエリに移動し、古いクエリを削除します。
![](/assets/image2021-10-30_15-19-22.4af54171e9721f91616db2486cd4919e6a9e4767bd08b3f1f575e5c7b3ae04e5.2e27f6a2.png)


## オプション

Tableauへの結果出力は様々なオプションをサポートしています。オプションは、CLIまたはREST API、またはサポートされている場合はConsoleでURLパラメータとして指定できます。オプションは通常互いに互換性があり、組み合わせることができます。該当する場合、デフォルトの動作が示されています。

### sslオプション

**ssl**オプションは、Tableauサーバーへの接続にSSLを使用するかどうかを決定します。'true'の場合、SSLが使用されます。このオプションが指定されていない場合、`ssl=true`がデフォルトです。


```
tableau://username:password@host/?ssl=true
```

### ssl_verifyオプション

**ssl_verify**オプションは、SSL通信に証明書検証を要求するかどうかを決定します。'true'の場合、証明書検証が必要です。このオプションが指定されていない場合、`ssl_verify=true`がデフォルトです。


```
tableau://username:password@host/?ssl=true&ssl_verify=true
```

証明書検証を無効にすることは、TableauサーバーのSSL証明書が**自己署名**の場合に便利です。

### Timezone

1. タイムゾーンに依存しないタイムスタンプ値（例：1548979200）から、日、時、分などを含むTableau DateTimeに変換するには、コネクタはターゲットタイムゾーンを知る必要があります。
2. クエリにTIMESTAMPカラムが含まれている場合、またはdatetimeカラムをTIMESTAMPにキャストする場合、値はDateTimeとしてTableauサーバーにエクスポートされます。変換があるため、必要なターゲットタイムゾーンを指定する必要があります。
3. Treasure Dataはdatetime値をUTCタイムゾーンを使用して保存します。ほとんどの場合、値を別のタイムゾーンに変換したい場合を除き、Treasure Dataからの値を保持するために、タイムゾーン設定をデフォルト（UTC）のままにします。


デフォルトのUTC以外のタイムゾーンを設定する例は次のとおりです：

### CLIから


```bash
$ td query "..." -r '{ "type": "tableau", ..., "timezone": "America/Los_Angeles" }'
```

### Treasure ワークフローの一部として


```
host: "company.online.tableau.com"ssl: truessl_verify: trueusername: "my_user"password: "passw0rd"
datasource: "my_ds"site: "my_company"project: "Default" server_version: "online"
timezone: "America/Los_Angeles"
```

## （オプション）Workflowでエクスポート結果を設定する

Treasure ワークフロー内で、データをエクスポートするためにデータコネクタの使用を指定できます。

詳細については、[Using Workflows to Export Data with the TD Toolbelt](/products/customer-data-platform/integration-hub/batch/export/exporting-results-using-export-integration)を参照してください。

### Password Authentication方式のワークフロー例


```yaml
_export:
  td:
    database: tableau_db

+tableau_export_task:
  td>: export_tableau.sql
  database: ${td.database}
  result_connection: new_created_tableau_auth
  result_settings:
    datasource: "datasource"
    site: "site"
    project: "project"
    targetType: "hyper"
    chunkSizeInMb: 100
    timezone: "UTC"
```

### Personal Access Token Authentication方式のワークフロー例


```yaml
_export:
  td:
    database: tableau_db

+tableau_export_task:
  td>: export_tableau.sql
  database: ${td.database}
  result_connection: new_created_tableau_auth
  result_settings:
    datasource: "datasource"
    site: "site"
    project: "project"
    targetType: "hyper"
    chunkSizeInMb: 100
    timezone: "UTC"
```