Tableau 10.5新機能:新データエンジン「Hyper」〜パフォーマンスを検証してみた編 #tableau

2018.01.18

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

はじめに

こんにちは。DI部のtamaです。

遅くなりましたが、今回もHyperに関するエントリを投下します!
今までのエントリではHyper自身の説明や、HyperがTableauでどう使われているのか、といった点について見てきましたが、今回はいよいよ実際にHyperを検証してみたいと思います。

前回までのHyperエントリ

今回の検証の概要

検証項目

以下について、.tdeファイルと.hyperファイルそれぞれで実施し、パフォーマンスを比較します。

  • Tableau Desktopによる抽出ファイルの作成
  • Tableau Desktopによる抽出ファイルを使ったVizに対する操作(クエリのパフォーマンス)

検証の観点

tdeファイルのパフォーマンスと比べて、Hyperがどの程度のものかを見ます。
今回、tdeファイル自体のパフォーマンスには着目しません。(検証環境等の他要因の影響もあるため)

検証パターン

  • パターン1
    • ローカルのCSVファイルを抽出
    • 300万レコード
  • パターン2
    • Amazon Redshiftに接続し、そこから抽出
    • 1億レコード

ローカルのファイルから抽出するパターンと、別途DBへ接続し、そこから抽出するパターンの2つを試したいと思います。
Hyperはデータ量が多いほど効果を発揮する…という特徴がありますが、その辺りも見てみたいため、2種類のデータを用意しました。

検証環境

作業環境

  • MacOS High Sierra 10.13.2
  • Tableau 10.4.2
    • tde作成用
  • Tableau 10.5
    • hyper作成用
  • Amazon Redshift
    • クラスタ:dc1.large
    • ノード:2
    • リージョン:バージニア(us-east-1)

使用データ

ステップ 1: テストデータセットを作成する - Amazon Redshift

AWSが提供しているサンプルデータを使用します。
(s3://awssampledbapnortheast1/ssbgz)

  • パターン1用データ(ローカルCSV) サンプルデータのcustomerを使用します。
`tama$ wc customer0002_part_00.csv`
` 3000000 7294613 286529327 customer0002_part_00.csv`
  • パターン2用データ サンプルデータのlineorderから1億件分使用します。
cmawsteamdb=# \d lineorder_tama
                        Table "public.lineorder_tama"
       Column       |         Type          | Collation | Nullable | Default
--------------------+-----------------------+-----------+----------+---------
 lo_orderkey        | integer               |           | not null |
 lo_linenumber      | integer               |           | not null |
 lo_custkey         | integer               |           | not null |
 lo_partkey         | integer               |           | not null |
 lo_suppkey         | integer               |           | not null |
 lo_orderdate       | integer               |           | not null |
 lo_orderpriority   | character varying(15) |           | not null |
 lo_shippriority    | character varying(1)  |           | not null |
 lo_quantity        | integer               |           | not null |
 lo_extendedprice   | integer               |           | not null |
 lo_ordertotalprice | integer               |           | not null |
 lo_discount        | integer               |           | not null |
 lo_revenue         | integer               |           | not null |
 lo_supplycost      | integer               |           | not null |
 lo_tax             | integer               |           | not null |
 lo_commitdate      | integer               |           | not null |
 lo_shipmode        | character varying(10) |           | not null |

cmawsteamdb=# select count(*) from lineorder_tama;
   count
-----------
 100000000
(1 row)

検証〜パターン1(ローカルCSVファイル:300万レコード)

抽出ファイルの作成

抽出にかかった時間は以下の通り。

ファイル種別 所要時間
.tde 84秒
.hyper 34秒

明らかにhyperの方が早いです。tdeの半分以下の時間で作成できました。

Vizに対する操作

以下のようなVizを作成し、検索フィルタ(c_addresという項目に1文字入力して検索する)を使用した場合、処理にかかる時間を計測します。

処理にかかった時間は以下の通り

ファイル種別 所要時間
.tde 6.02秒
.hyper 2.87秒

こちらも、hyperがtdeの半分以下の時間で処理完了。

検証〜パターン2(Amazon Redshift:1億レコード)

抽出ファイルの作成

抽出にかかった時間は以下の通り。

ファイル種別 所要時間
.tde 102分
.hyper 95分

…あれ、そんなに差がない…?

所要時間だけ見ると、そのように思いますが、DBに対するデータ接続から抽出する場合、まずデータをTableau側にインポートする処理が走ります。これに関しては、DBやネットワーク環境の影響こそありますが、tdeやhyperは関係ありません。(抽出する前の話なので)

当検証のデータインポートにかかった時間は約94分でした。(ダイアログをずっと注視していないと正確な時間がわからないため、大体の測定且つエビデンスが無いことをご了承ください)
そこから考えると、tdeは1億件の抽出ファイル作成に10分弱かかっていますが、hyperは1分弱で作成できていることになります。

Hyperはデータ量が多いほど効果を発揮する…どうやら本当のようですね…

Vizに対する操作

以下のようなVizを作成し、検索フィルタ(lo_custkeyという項目に1文字入力して検索する)を使用した場合、処理にかかる時間を計測します。

処理にかかった時間は以下の通り

ファイル種別 所要時間
.tde 60.92秒
.hyper 8.55秒

早い!Hyperめちゃくちゃ早いです。(実際、この検証以外にも、適当にVizをいじっていたのですが、明らかにHyperの方が全体的に早かったです)
Hyperはデータ量が多いほど効果を発揮する…どうやら(ry

おわりに(まとめ)

Hyperの方がパフォーマンスが良いということは予想通りでしたが、今回の検証で一番注目したいのは、抽出ファイル自体の作成ではないでしょうか。
Tableauを使用している人のよくある悩みの一つに「ビューのパフォーマンスが遅い」というものがあります。その改善策の一つに「データ接続を、ライブから抽出に変更する」という方策がありますが、そもそも抽出作成に時間がかかるためこの策がとれない…ということがよくあります。
10.5から登場したhyperは、この課題を解決するにあたり、十分な可能性を秘めていると思います。ぜひ検討してみてください。

10.5新機能hyperについて、エントリ3連発として、一旦ここで締めますが、今後もTableau Serverの抽出タスク等、適宜やってみた系記事を更新していきたいと思います!

参考

Hyper検証動画