Tableau Prep 2018.2.2 新機能:作成したフローをコマンドラインで実行してみた(ローカルファイル編) #tableau

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

DI部@大阪オフィスのtamaです。

Tableau Prepに求められている機能の1つに「フローの定期実行」というものがあると思います(筆者の肌感覚です)。データの前処理って、日に日に増えていくデータに対して、その都度実行したいという場面が多いからかな、と思っています。

定期実行する機能こそまだ存在しませんが、2018.2.2から、フローをコマンドで実行することが可能になりました。コマンドが使用できるとなれば、間接的ではありますが、フローを定期実行することも夢ではありません。

本エントリでは、接続元のデータにローカルのファイルを使用するパターンを検証してみたいと思います。

検証すること

  1. Tableau PrepでExcelデータを前処理し、Tableau Serverへ(データソースとして)パブリッシュする
  2. Excelデータの内容を更新する
  3. Tableau Prepは起動せずに、コマンドだけでフローを実行し、パブリッシュされたデータソースの内容が更新されているか確認する

環境

PC

  • Mac OS High Sierra 10.13.16
    • Tableau Prep 2018.2.2

パブリッシュ先

  • AWS EC2(c4.4xlarge)
    • Windows Server 2016
      • Tableau Server 2018.2

検証してみる

サンプルデータ

下記のExcelデータを用意しました。

Tableau Prepでフローを作成する

データ接続→処理

上記のExcelデータに接続し、適当な処理を加えます。今回はここはあまり重要ではないので、軽くいきます。

「Debut」というカラム名を「デビュー」に変更します。

パブリッシュ先のTableau Server設定

出力の設定をします。今回用意しているTableau Serverの情報を入力し、フローを実行しましょう。

一瞬でフローが完了しました。

このフローは後で使うので、わかりやすいところに保存しておきます。

パブリッシュされたデータソースを確認する

Tableau Serverにパブリッシュされたデータを確認します。Tableau Server上で、このデータを使ってビューを作成しようとすると、すぐに確認できました。

問題なくパブリッシュされていますね。

Excelデータを更新する

Excelデータに新しく1レコード追加します。

Prepのコマンドを実行する

さて、本番はここからです。果たして、Tableau Prepを立ち上げることなくフローを実行できるのでしょうか。

Tableau Prepのコマンドについて

コマンドの構文は下記のようになっています。

tableau-prep-cli [-c <arg>] [-d] [-h] [-t <arg>]
  • -c
    • 認証資格情報ファイルのパスを指定します
  • -d
    • デバッグ用のオプションです
  • -h
    • コマンドのヘルプが出ます。
    • (Tableauのドキュメントに記載されている以上のことは出ません)
  • -t
    • 実行するフローファイル(.tfl)のパスを指定します

認証資格情報ファイルとは

Prepのコマンドを使用するためには、フロー上、何らかのシステムに接続するための情報(アカウント情報など)が記載されたjsonファイルが必要となります。これが認証資格情報ファイルです。

以下が認証資格情報ファイルの例です。

{
	"inputConnections": [
	  {
		"username": "<username>",
		"hostname": "<servername>",
		"port": <ポート番号>,
		"password": "<password>"
	  }
	],
	"outputConnections": [
	  {
		"serverUrl": "<server to publish to URL>",
		"contentUrl":"<siteID>",
		"username": "<username>",
		"password": "password"
	  }
	]
	}
  • inputConnections
    • フローのデータ接続元がローカルファイルではなく、何らかのDB等だった場合、そのDBに接続するための情報を記載します。
  • outputConnections
    • こちらはフローで処理したファイルの出力先の情報を記載します。基本的にTableau Serverになるはずなので、Tableau Serverの情報を記載します。
    • 「contentUrl」はサイトの名前を入力します。複数サイトの設定をしていない場合は、省いても大丈夫です。
    • 「serverUrl」を「serverURL」と書いちゃうと、コマンドを実行時にエラーになるので気をつけましょう
      • 「contentUrl」も同様です
      • 私はここで超ハマりました

上記を踏まえて、今回用の認証資格情報ファイルを用意しました。下記になります。

{
	"inputConnections": [

	],
	"outputConnections": [
	  {
		"serverUrl": "http://xxxxxxxxxxxx",
		"username": "xxxxx",
		"password": "xxxxx"
	  }
	]
	}

気をつける部分はinputConnectionsです。今回の接続元データはローカルファイルなので、接続先はありませんが、inputConnectionsという項目自体は必要なので、中身は空の状態で用意する必要があります。

Tableau Prepのコマンドを実行する

認証資格情報ファイルとフローファイルの両方がそろったら、コマンドを実行しましょう。今回の場合、実行するコマンドは以下のようになります。

/Applications/Tableau\ Prep\ 2018.2.app/Contents/scripts/./tableau-prep-cli -c /Users/<ユーザー名>/Documents/<認証資格情報ファイル名>.json -t /Users/<ユーザー名>/Documents/<フローファイル名>.tfl

Prepのコマンドがある場所も記述する必要があることに注意です。では、実行しましょう。

Loading the flow.
Loaded the flow.
Updated the connections with supplied credentials.
Established input connections with remote data sources.
KeychainStore Ignored Exception: java.security.cert.CertificateParsingException: java.io.IOException: Duplicate extensions not allowed
Signed in successfully as admin to site Default()
Checking the flow document for errors.
Flow Document has no errors.
Preparing to execute the flow.
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Running
Flow Execution Status: Finished
Finished running the flow successfully.

successfullyしたということで、再度Tableau Serverでデータソースを確認したいと思います。

おおお、Excelで追加したデータがちゃんと更新されていますね。そして、Prep上の処理(カラム名変更)もちゃんとできていることから、コマンドだけでフローが実行されていることがわかります。

おわりに

Tableau Prepで作成したフローをコマンドで実行してみました。検証はMacで行いましたが、もちろんWindowsも対応しているので、下記の公式ドキュメントを見てみてください。(タスクスケジューラで定期実行することができますね。)

次は接続元のデータが何らかのデータベースだった場合のパターンも検証したいところです。

ではまた。

参考