『Amazon Redshift & Tableau パフォーマンスチューニング』に関するホワイトペーパーの改訂版を読んでみた(Tableauの最適化編)

2018.02.27

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

はじめに

Tableau Software社が公開しているホワイトペーパーの改訂版『Tuning your Amazon Redshift and Tableau Software Deployment for Better Performance v2』が公開されていますので、数回に分けてそのポイントについて紹介します。今回はテーマは、「Tableauの最適化」です。

ドキュメントのダウンロードは、以下のリンクをクリックして、ログインした後ダウンロードできます。

Optimizing your Amazon Redshift and Tableau Software Deployment for Better Performance v2

Tableauの最適化

サマリーフィルタから始める

すべてのデータを表示するのではなく、ダッシュボードを少数のアイテムのみにフィルタリングしたり、関連するデータを理解し易いサマリデータを表示します。Tableauに返されるデータの行数が少なくなるだけでなく、パフォーマンスが向上するという利点があります。

値による集計

値は数十億行のデータではなく集約してより少ない行をTableauに返るようにすることで、可視化するクエリの実行時間とTableauが実際にレンダリング時間を短縮できます。

日時による集計

ウェブサイトのデータのような日時データは、1時間または1日に集計すると質問に答える時間が大幅に短縮されます。さらにAmazon Redshiftで別の集計テーブルにデータを事前集計する新しいテーブルを作成するとさらに効果的です。

ダッシュボード

ダッシュボード内の各シートは少なくとも1つのクエリを実行することがよくありますので、Redshiftデータソースに接続するときは、ダッシュボード上の項目数を制限します。また、シートに設定するクイックフィルタは、「関連値のみ」を取得するクエリを頻繁に行います。

フィルター

フィルターは計画的にご使用ください。Amazon Redshiftでサポートされているソートキーを使用してTableauでフィルタを作成すると、Amazon Redshiftがスキャンする必要があるデータの量を減らすことができます。フィルタによってできるだけ絞り込んだデータを表示した後、フィルタを緩めることによって意味のある有用なデータを見つけるようにします。

全てフィルタは同じではない

フィルタは処理負荷が全て同じとは限りませんので、コストの小さいフィルタを選択します。また「セット」を用いることで、柔軟性が低くなりますが、クエリの読み込み時間が短縮されます。

フィルタもまた設計が必要

クイックフィルターは、クエリー実行時間を短縮できるさまざまなオプションでカスタマイズできます。 「関連値のみ」は、関連性があるリストを取得するクエリが必要なので、この機能は控えめに使用してください。また、チェックボックス付きの「複数選択」フィルターは、フィルタをカスタマイズして[適用]ボタンを表示すると、[適用]ボタンがクリックされるまでクエリを再実行するまで待機することができます。

クイックフィルタの[カスタマイズ]-[適用ボタンを表示]を選択すると

クイックフィルタの下に、[適用]ボタンが表示されます。

Amazon RedshiftのTableauと結合

カラムベースのデータベースでは、ジョイン数が少ないほどパフォーマンスが向上します。結合する関連テーブルがある場合は、データベースのPRIMARY KEYとFOREIGN KEYとの関係を定義します。 Tableauはこの情報を使用してjoin cullingを実装することができます。join cullingについては、REFERENTIAL INTEGRITY, JOIN CULLING, AND PERFORMANCEを御覧ください。

データソースの結合が主キーと外部キーを使用してバックアップされていることを「ふり」するようにTableauに指示できます。これを行うには、単にTableauデータソースの「参照整合性を仮定」をオンにします。参照整合性の仮定については、参照整合性の仮定を御覧ください。

最後に、結合を作成するときに、結合している列がAmazon Redshiftテーブル定義でNOT NULLと定義されていることを確認します。 Tableauは、JOINで使用されているフィールドにNULLが含まれている可能性があると判断すると、JOIN中にTableauはデータのNULL値をチェックします。これにより、Tableauは必要以上に複雑なクエリを発行することになり、完了に時間がかかる可能性があります。

詳細表現/計算のレベルについて

LOD表現は、クロスジョインが生成されることがあり、処理コストが大きく再分散が発生するので、Amazon Redshiftはパフォーマンス大幅に低下させることがあります。計算されたフィールドで使用されているディメンションにソートキーを作成して、パフォーマンスを改善させます。

最後に

今回の内容を把握することで、Redshiftとの組み合わせにおいて、Tableau利用者ができるパフォーマンスチューニングと、できない部分が解り、できない部分はRedshiftの担当者に依頼すれば良い部分といった、責任分界点や担当範囲が明確になるはずです。次回のテーマは、「Amazon Redshiftの最適化」です。

関連ブログ