Tableau

Tableau Prepの「データ処理」をやらないほうがいい場所考察+高速化/検証

Tableau Prepつかってますか?
以前も書いたのですが、時たま納期が迫る中あきらかにバグ挙動が発生し右往左往することはあるにはありつつも、Prepを使う前の作業には戻りたくないと思えるぐらいにすばらしい良いツールだと思っています。

さて、本日はそんなTableau Prepのデータ接続の小技+動作/高速化の検証についてのTipsをお送りいたします。

「データ処理」をできるだけやらないほうがいい場所

クリーニングや整理で多々データ処理をPrepで行っていると思いますが、できるだけやらないほうが良い処理(場所)があると考えています。

  • データ接続内でのフィールド削除やタイプ変更
  • 結合/ピボット/ユニオン内での各種クリーニング処理

Tableauのデータ接続開くとまずペイン上に以下のような「不要なフィールド削除するといいよ」って書いてあるのでやっちゃいたい気持ちは山々なことはわかります……がちょっと聞いてください。

対応/処理は「クリーニングを作成してそこでやる」

これをやっていない場合、作業中のあなた、もしくは引き継いだ人、あるいは引き継いだベンダーが以下のようなダメージをくらう場合がありますのでそちらの説明から。

例1)データ接続内でのフィールド削除やタイプ変更していたが、後々「データ形式が差し替わった際(例えばXLSX→CSVや接続DBの変更など)」に何の処理していたか処理内容見て移植対応しないといけない……
※データカラムが多かったり変更内容が多いと地味につらい

これらの処理はデータ接続の直後にクリーニングをつくることで同等の対応はできる
※念のため上記対応変更時のパフォーマンス検証結果も後述しておきます

例2)結合/ピボット/ユニオン(集計もかもしれませんが)内でクリーニングを行うと(念のための)処理前後の数字チェックの際に数が合わないなどのポカミスを見つけにくい

簡単な例を上げると「データAには100名」「データBには別の100名」をID結合して出力は200名のはずだが、クリーニング(例えばフィルタで更に絞る)を結合の中で対応してしまうと結果が200名にならないので気づきにくく、チェックの際に問題の切り分けも難しくなる

要は「1つの処理内で色々なことやらない」という考え方です

一応パフォーマンス見ておきます

この方法に変更することでパフォーマンスが落ちると元も子もありません。
ダミーデータをXLSX型式で50万レコード作成してパフォーマンス検証してみました。
処理の内容は単純に「行IDのみに絞る」という処理です。

それぞれの処理は画面にあるように以下となります。

  • 【XLS処理1】はデータ接続後クリーニングを作成してフィールドの保持を利用して絞り込み
  • 【XLS処理2】は従来の行IDフィールドのみをチェック

結果「変わらず」です。
ファイル出力の処理時間は動作順番を入れ替えたりで数回試しましたが、プロファイルペインやデータグリッドの描画速度含め特に差は感じませんでした。これはPrepのデータ描画での際に表示されている、例の「フローを検証してスキーマを生成しています」でやっている内容が基本変わりないからなのかと思います。

この様にデータ処理に影響がなければデータ処理は「クリーニングを作成してそこでやる」のほうが良いのではないかと考えています。

※ちなみにこの機能を使うパターンとしては以下です。

  • データ接続の場合、データタイプ変更で発生する「読み込み間違いでタイプを変えないといけないパターン」、例えば文字列なのに数字に変換され文字列データが消える場合とか
    (気づかないと死ぬので勘弁してほしい)
  • 「ユニオンなどで自動で作られるフィールド名の削除」だけは道内での対応でも良いかなと考えてます
    (これオプションで作らないようにする設定がほしい)

※追加で検証してみた

以前、csvよりhyperのほうが早いという記事を書いたのですが、正直感覚値だったのでデータ検証ついでにやってみました。

Tableau Prepでの描画速度の高速化!?Tableau Prepつかってますか? 時たまバグなのか仕様なのかわからない動きがあり確認必須なお茶目な点がありますが、Tablea...

【XLS処理1】の同内容処理をデータ内容同じで接続データのファイル形式を変えただけです。

結果XLSでは46秒かかっていたのが、CSVは5秒、hyperは0秒という結果になりました。やはり「フローを検証してスキーマを生成しています」は抽出処理前の下準備で=下準備ができたから描画もできるということかと思います。

描画でもたついているものは、その点を改善することで出力のパフォーマンスも上げることに直結することになるのではと思いましたが、以前感じていたようにhyperにしておくと良いことあるって裏付けになったかと思います。
(csvでも早いのでそちらでも十分な場合も多々あると思いますが)

今回のTips、あくまでも自身の経験としてなのでもちろん個人の使い方やチェック方法などによってはこれらの方法は違うこともあるかもしれませんが何かの参考になれば幸いです。

hiroyoshi usui
ディレクター、Keep it simple, stupid.