# Tableau Server Export Integration CLI

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

### JSON形式の設定

この方法を推奨します。

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


認証モード: Username/Password


```bash
$ td query -d mydb -r '{"type":"tableau","host":"my.tableauserver.com", "auth_method":"password", "username":"my_user", "password":"passw0rd", "ssl":true, "ssl_verify":false, "server_version":"10.0", "datasource":"my_ds", "site":"","project":"", "mode":"replace", "chunk_size_in_mb":50, "timezone":"PST"}' 'SELECT * FROM access'
```

認証モード: PAT


```bash
$  td query -d mydb -r '{"type":"tableau","host":"my.tableauserver.com", "auth_method":"pat", "pat_name":"pat_name", "pat_secret":"pat_secret", "ssl":true, "ssl_verify":false, "server_version":"10.0", "datasource":"my_ds", "site":"","project":"", "mode":"replace", "chunk_size_in_mb":50, "timezone":"PST"}' 'SELECT * FROM access'
```

各パラメータの説明:

| Parameter | Description |
|  --- | --- |
| auth_method | 認証方法。サポートされる値: 'password', 'pat' |
| username | Tableau ServerのUsername(auth_methodがpasswordの場合に必須) |
| password | Tableau ServerのPassword(auth_methodがpasswordの場合に必須) |
| pat_name | Personal Access Token Name(auth_methodがpatの場合に必須) |
| pat_secret | Personal Access Token Secret(auth_methodがpatの場合に必須) |
| host | Tableau ServerのHostname |
| datasource
 | サインインするサイトのURL(オプション)
`site`属性の値を確認するには、Tableau Serverにサインインし、URLの`/site/`の後に表示される値を確認してください。例えば、以下のURLの場合、`site`値は`MarketingTeam`です。
`https://MyServer/#/site/MarketingTeam/projects`
`site`属性が空文字列の場合、デフォルトサイトにサインインされます。サインイン時にサイトを指定しない場合でも、常に特定のサイトにサインインされます。
Tableau Serverの[REST APIリファレンス](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#Sign_In?TocPath=API%2520Reference%7C_____89)をご覧ください。
 |
| chunk_size_in_mb | 毎回アップロードするチャンクファイルサイズ(MB単位)、デフォルト: 200、最小: 100、最大: 1024 |
| read_timeout_millis | レスポンスを待機する時間(最大: 7200000)。ミリ秒単位の値 |
| error_when_timeout | TrueまたはFalse。trueの場合、データソース公開のタイムアウト時に実行中のジョブが失敗します |
| timezone | TimestampデータタイプからTableau DateTimeデータタイプへの変換に使用するTimezone、デフォルト: `UTC` |


### URL形式の設定

この方法は推奨されません。

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


```
$ td query -d mydb -r 'tableau://username:password@my.tableauserver.com/?mode=replace' 'SELECT * FROM access'
$ td query -d mydb -r 'tableau://username:password@my.tableauserver.com:8443/?mode=replace&ssl=true' 'SELECT * FROM access'
```

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

1. TD Consoleを開きます。
2. クエリエディタに移動します。
3. クエリを入力します。


以下のクエリ例では、アクセスログのサンプルデータセットを使用し、1日ごとのHTTPメソッドの分布を計算します。便宜上、DatetimeカラムをString型からTIMESTAMP型にキャストしてTableauで使用します。

HIVE:


```sql
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:

PRESToクエリでは、便宜上TD_TIME_STRINGの代わりにTD_TIME_FORMATを使用することを推奨します。


```sql
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
```

1. Tableau Serverを開きます。
2. 左上のバーで**Data Sources**を選択します。
TDEファイルを含むデータソースのリストが表示されます。
![](/assets/image-20191016-211351.4667974c17c9a7ad2b16ec3fa12ae3453e5576c4dfab1e36e504503afa74d386.94b6a600.png)
3. **New Workbook**を選択して、ブラウザからチャートとダッシュボードを作成します。
4. 左側のナビゲーションからディメンションとメジャーを右上のナビゲーションにドラッグアンドドロップしてグラフを作成します。
5. **Save**を選択して結果を保存します。


![](/assets/image-20191016-211405.b7e75000b994c7c8d8934d01ccfa61923fde5012ba00c349524743454b4bc781.94b6a600.png)

## TD Consoleを使用したクエリ更新のスケジュール設定

スケジュールジョブ機能を使用してデータセットを更新できます。この機能により、Treasure Dataでクエリを定期的に実行し、Tableau Server上のTDEファイルを更新できます。スケジュールはクエリエディタから指定できます。TD_SCHEDULED_TIME() UDFを`append`モードで使用すると便利です。

以下のクエリは、クエリ実行時から過去24時間以内のレコード数を計算します。このスケジュールクエリを継続的に実行することで、毎日データセット全体を処理することを回避できます。

HIVE:


```sql
SELECT
  CAST(
    TD_TIME_FORMAT(time,
      "yyyy-MM-dd 00:00:00") AS TIMESTAMP
  ) AS `Datetime`,
  method AS `Method`,
  COUNT(1) AS `Count`
FROM
  www_access
WHERE
  TD_TIME_RANGE(time,
    TD_TIME_ADD(TD_SCHEDULED_TIME(),
      '-1d'),
    TD_SCHEDULED_TIME())
GROUP BY
  TD_TIME_FORMAT(time,
    "yyyy-MM-dd 00:00:00"),
  method
```

PRESTO:

PRESToクエリでは、便宜上TD_TIME_STRINGの代わりにTD_TIME_FORMATを使用してください。


```sql
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
```

## オプション

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

### sslオプション

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


```
tableau://username:password@my.tableauserver.com/?ssl=true
tableau://username:password@my.tableauserver.com:443/?ssl=true
```

### ssl_verifyオプション

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


```
tableau://username:password@my.tableauserver.com/?ssl=true&ssl_verify=true
```

証明書検証の無効化は、TableauサーバーのSSL証明書が**自己署名**の場合に特に有用です。

### Timezone

timestamp値はタイムゾーンに依存しません。例えば、`1548979200`などです。Tableau DateTimeには日、時、分などが含まれます。timestamp値からTableau DateTimeに変換するには、コネクタはターゲットタイムゾーンを知る必要があります。クエリに`TIMESTAMP`カラムが含まれている場合、またはDateTimeカラムを`TIMESTAMP`にキャストする場合、値はDateTimeとしてTableauサーバーにエクスポートされます。つまり、変換が行われるため、ターゲットタイムゾーンを指定する必要があります。

Treasure DataはDateTime値をUTCタイムゾーンを使用して保存します。ほとんどの場合、特に値を別のタイムゾーンに変換したい場合を除き、Treasure Dataからの値を保持するために`timezone`をデフォルト(UTC)として設定したままにしてください。

デフォルトのUTC以外のタイムゾーンを設定する例:

CLIから:


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

TD Workflowの一部として:


```yaml
host: "tableau.company.com"
ssl: true
ssl_verify: false
username: "my_user"
password: "passw0rd"
datasource: "my_ds"
site: "MarketingTeam"
project: "Default"
server_version: "2018.1"
timezone: "America/Los_Angeles"
```