[アップデート] Amazon QuickSight のダイレクトクエリモード + カスタム SQL での柔軟性が向上するデータセットパラメータ機能が追加されました

2023.05.06

いわさです。

今朝の QuickSight アップデートでデータセット自体にパラメータという概念が追加されました。

QuickSight はデータセットを経由してデータソース(データベースや Athena、外部 SaaS など)へアクセスします。
データセットでは QuickSight のインメモリデータベースである SPICE に定期的にデータをロードしておき分析からは都度 SPICE へアクセスする SPICE モードと、分析がデータを取得するタイミングで都度データソースにクエリを発行するダイレクトクエリモードがあります。

従来はダイレクトクエリモードでフィルターなどを使うとデータセットで設定したカスタム SQL などをサブクエリとして、自動で WHERE 句が追加されていました。
今回のアップデートではダイレクトクエリ時にフィルター構成やカスタム SQL 内でデータセットパラメータを埋め込むことで、ダイレクトクエリをコントロールしやすくなりました。

また、SPICE モードでも一部機能は利用可能です。

従来

テストデータとダイレクトクエリ

今回の検証環境は次のような Athena データソースを QuickSight の分析で表示して、フィルター機能を使おうと思います。

この内容であればカスタム SQL を使わずに直接データソースをマッピング出来るのですが、データセットパラメータが一番役立つユースケースはおそらくカスタム SQL なので、カスタム SQL で構成しておきます。

まずは、データセットパラメータを使わずに作成したデータセットを使って分析のフィルター機能を使ってみます。

分析フィルターでは次のようにコントロールを使ってリーダーが自由にフィルター設定を変更出来るようにしたいと思います。
この時点ではコントロールで入力した内容は分析上のパラメータにマッピングされており、分析のフィルター機能では city フィールドのフィルター対象にこの分析パラメータを指定しています。
分析上のパラメータと、データセット上のパラメータと 2 つの概念が登場することに注意してください。

上記のようにコントロールを選択したタイミングで絞り込まれたデータを分析上で表示します。
このタイミングでフィルター条件が追加されたカスタム SQL が Athena に対して都度発行されているということです。

次の記事のように Athena では最近発行されたクエリの履歴を確認することが出来ますので、QuickSight から発行されるクエリを確認してみます。

次のようにデータセット作成時に指定したサブクエリを対象に分析フィルターで指定したフィールドが WHERE 句に追加されています。

自動でうまいことやってくれるのですが、例えばカスタム SQL が必要な別の BI ツールからクエリを移行したい場合にそのまま利用することは出来なかったり、あるいは自動生成される部分はクエリチューニングが難しかったのでパフォーマンス上の問題の改善がしにくい場合がありました。

データセットパラメータを構成する

ではデータセットパラメータを使ってみましょう。
データセットパラメータはデータセットの編集画面で設定することが出来ます。

サイドメニューを確認してみると、従来はなかった「パラメータ」メニューが追加されていますね。

ここでパラメータの追加を行うと、分析のパラメータと同様にパラメータの基本情報を入力することが出来ます。
後ほど制限事項について少し紹介しますが、データセットパラメータはデフォルト値が必須となっています。分析パラメータでは使用しなければ発行クエリにフィルター条件が追加されませんが、データセットパラメータだとそのあたりの注意が必要です。

続いてカスタム SQL でパラメータを使う方法ですが、次のように <<$パラメータ名>> でクエリ内に埋め込むことが出来ます。

なお、ダイレクトクエリであればカスタム SQL ではなくデータセットのフィルター機能でデータセットパラメータを使うことも出来ます。

これはおもしろいですね。
データセットパラメータを使ってカスタム SQL 上で関数と組み合わせたり、単一のパラメータを複数箇所で使いまわしたりなど、より柔軟なカスタム SQL を構築することが出来るようになりました。

データセットパラメータを分析で使う

続いて、データセットパラメータを分析で使う方法を紹介します。

まず、パラメータが構成されているデータセットを分析に追加すると、次のようにマッピングされていないデータセットパラメータが存在しているという警告が表示されます。
データセットパラメータは既定値が必須なので、分析側で使用しなくてもクエリの発行は成功します。

分析のパラメータメニューを確認すると次のようにデータセットパラメータが表示されるようになっています。
全てあるいはマッピングされていないデータセットパラメータを確認することが出来ます。

View parameter details を押すと、データセットパラメータの基本情報を確認することが出来ます。

実際に分析で使用する際には分析パラメータを作成し、「Mapped Dataset Parameters」からマッピング設定します。

ここでは分析の piyocity パラメータを、データセットの fugacity パラメータにマッピングさせました。

この状態で先程と同様にコントロールを経由して piyocity のパラメータ値を入力すると、fugacity に値が設定され、その値を使ってダイレクトクエリが発行されます。
直接パラメータ間でマッピングされてカスタム SQL が生成されるので、分析側で追加のフィルターの作成は不要です。

Athena のクエリ履歴を確認してみると、次のようにパラメータ値が埋め込まれたカスタム SQL が発行されていることがわかります。

計算フィールドでデータセットパラメータを使う

カスタム SQL やフィルターで使う以外に、データセットの計算フィールドでデータセットパラメータを使うことも出来ます。
次は単純に文字列結合しただけの計算フィールドです。

分析ではなくデータセット側でもパラメータを使った計算フィールドを作成することが出来るようになったので、複数の分析で共通のデータセットを使いたい場合などにもパラメータに依存した計算をデータセット側のみで定義出来ます。

絞り込みへの利用はダイレクトクエリ以外では不可

データセットパラメータは SPICE モードのデータセットでは使用出来ないケースがあります。
ダイレクトクエリ内への埋め込みあるいはフィルターに使用していると次のようにデータセットの作成・変更に失敗します。

なお、計算フィールドでの使用のみであれば SPICE モードでも使用することが出来ます。

さいごに

本日は Amazon QuickSight にデータセットパラメータ機能が追加されたので使ってみました。

アップデート情報によると、複雑なカスタム SQL が使われている BI ツールを移行する場合などに要望が多かったようです。
ダイレクトクエリで自動生成される部分に少し介入出来るようになったのでカスタマイズの方法のひとつとして覚えておきたいです。

次のように好きな位置にパラメータを設定出来るのでかなり柔軟になりました。

なお、メールレポートには対応していないなど、いくつか制限事項がありますので以下も確認してください。