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

Tableau Cloudへのエクスポートのサンプルワークフローについては、Treasure Boxesを参照してください。
- 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
セキュリティポリシーで IP ホワイトリストが必要な場合は、接続を成功させるために Treasure Data の IP アドレスを許可リストに追加する必要があります。
リージョンごとに整理された静的 IP アドレスの完全なリストは、次のリンクにあります: https://api-docs.treasuredata.com/en/overview/ip-addresses-integrations-result-workers/
クエリを実行する前に、Treasure Dataでデータ接続を作成および設定する必要があります。データ接続の一部として、統合にアクセスするための認証を提供します。
接続を作成するには2つの異なるプロセスがあります:
- Tableauのユーザー名とパスワードを使用する
- Personal Access Tokenを使用する
TD Consoleを開きます。
Integrations Hub > Catalogに移動します。
Tableauを検索して選択します。

Create Authenticationを選択します。

認証するために次の認証情報を入力します。
Parameter Description Host サイトが存在するTableau Cloudホスト
(例: 10az.online.tableau.com)Username Tableau Cloudのユーザー名 Password Tableau Cloudのパスワード Continueを選択します。
接続の名前を入力します。
Doneを選択します。
Tableau Cloudサーバーにログインし、My Account Settingsに移動します。

Settingsタブから Personal Access Token名を入力し、Create new tokenを選択します。

Personal Access Token名/Personal Access Tokenシークレットをコピーして保存します。
TD Consoleを開きます。
Integrations Hub > Catalogに移動します。
Tableauを検索して選択します。

Create Authenticationを選択します。

認証するために次の認証情報を入力します。
Parameter Description Host サイトが存在するTableau Cloudホスト
(例: 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シークレット Continueを選択します。
接続の名前を入力します。Doneを選択します。
- Data Workbench > Queriesに移動します。
- New Queryを選択します。
- クエリを実行して結果セットを検証します。
td queryコマンドの-r / —resultオプションを使用して、Tableauの結果出力先を追加します:
Password Authentication
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
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 |
次の例のように、Tableauの結果出力先をJSON形式からURL形式に変更します:
$ td query -d mydb -r 'tableau://username:password@host/datasource?mode=replace&site' 'SELECT * FROM access'TableauはHyperと呼ばれる技術でデータエンジンを更新しました。これを活用するには、既存のTreasure Data出力設定を更新する必要があります。新しいTreasure Data設定は自動的に最新バージョンを使用します。
- Queriesに移動し、スケジュールされたクエリを選択します。
- Query EditorでExport Resultsターゲットをクリックします。
- 保存されているTableau接続を選択します。
- Site IDの値を入力します。これはTableau Cloudで必須です。
- Data Source Typeに'hyper'を選択します。
- Doneをクリックして設定を保存します。
レガシーTableauから現在のTableauに移行する際、タイムゾーン設定を変更する必要はありません。デフォルト値(UTC)のままにすることができます。この記事のtimezoneも参照してください。
TD Consoleのクエリエディタに移動し、クエリを入力します。次のサンプルクエリは、アクセスログのサンプルデータセットを使用し、1日あたりのHTTPメソッドの分布を計算します。
-- 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
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'),
methodTreasure DataはDatetimeカラムをString型からTableauのTIMESTAMP型にキャストしています。
Tableauはタイムスタンプの小数秒をサポートしていません。クエリでTIMESTAMP型にキャストする前に、小数秒を削除してください(たとえば、subtr()関数を使用して)。

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

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

| 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://onlinehelp.tableau.com/current/pro/desktop/en-us/extracting_addfromfile.html
- すべてのフィールドを入力したら、クエリをSubmitします。システムはクエリを実行し、Tableau Data Extractファイル(
.tdeまたは.hyper)を作成し、extractファイルをTableau Cloudにアップロードします。 - Tableau Cloudに移動し、左上のバーのData Sourcesをクリックします。TDEファイルを含むデータソースのリストを表示できます。

- New Workbookを選択して、ブラウザからチャートとダッシュボードを作成します。左側のナビゲーションからディメンションとメジャーを右上のナビゲーションにドラッグアンドドロップしてグラフを作成します。Saveを選択して結果を保存します。

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

Auth methodをPasswordからPersonal Access Tokenに変更し、トークン名/シークレットを入力します。

この接続を使用して、Personal Access Token名/シークレットでTableauにデータをエクスポートできます。
保存されたクエリのコネクタをPassword AuthenticationからPersonal Access Token Authenticationに変更します。
Data Workbench > Queriesに移動します。
保存されたクエリを選択し、Cloneを選択します。クエリの新しい名前を入力します。

クエリエディタから、Export Resultを選択し、ステップ1で編集した接続を選択します。エクスポート設定を再度完了します。

TD consoleのクエリに移動し、古いクエリを削除します。

Tableauへの結果出力は様々なオプションをサポートしています。オプションは、CLIまたはREST API、またはサポートされている場合はConsoleでURLパラメータとして指定できます。オプションは通常互いに互換性があり、組み合わせることができます。該当する場合、デフォルトの動作が示されています。
sslオプションは、Tableauサーバーへの接続にSSLを使用するかどうかを決定します。'true'の場合、SSLが使用されます。このオプションが指定されていない場合、ssl=trueがデフォルトです。
tableau://username:password@host/?ssl=truessl_verifyオプションは、SSL通信に証明書検証を要求するかどうかを決定します。'true'の場合、証明書検証が必要です。このオプションが指定されていない場合、ssl_verify=trueがデフォルトです。
tableau://username:password@host/?ssl=true&ssl_verify=true証明書検証を無効にすることは、TableauサーバーのSSL証明書が自己署名の場合に便利です。
- タイムゾーンに依存しないタイムスタンプ値(例:1548979200)から、日、時、分などを含むTableau DateTimeに変換するには、コネクタはターゲットタイムゾーンを知る必要があります。
- クエリにTIMESTAMPカラムが含まれている場合、またはdatetimeカラムをTIMESTAMPにキャストする場合、値はDateTimeとしてTableauサーバーにエクスポートされます。変換があるため、必要なターゲットタイムゾーンを指定する必要があります。
- Treasure Dataはdatetime値をUTCタイムゾーンを使用して保存します。ほとんどの場合、値を別のタイムゾーンに変換したい場合を除き、Treasure Dataからの値を保持するために、タイムゾーン設定をデフォルト(UTC)のままにします。
デフォルトのUTC以外のタイムゾーンを設定する例は次のとおりです:
$ td query "..." -r '{ "type": "tableau", ..., "timezone": "America/Los_Angeles" }'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"Treasure Workflow内で、データをエクスポートするためにデータコネクタの使用を指定できます。
詳細については、Using Workflows to Export Data with the TD Toolbeltを参照してください。
_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"_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"