Snowflakeの新UI「Snowsight」の「カスタムフィルタ」を試してみました

2020.06.26

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

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

先日Snowflakeのオンラインイベント「Say Hello To The Data Cloud」にて、様々な新機能、実装予定の機能が紹介されました。

この中の既にPreview Featuresとして公開されているSnowsightのカスタムフィルタを試してみたいと思います。

なお、Snowsightの簡単な利用方法などについてはこちらの記事にも記載しています。

カスタムフィルタについて

Snowsightではクエリの中で、システムで用意されている「システムフィルタ」とユーザ自身が定義できる「カスタムフィルタ」を利用できるようになりました。

システムフィルタについては下記の記事で紹介しています。

カスタムフィルタについては、こちらのドキュメントに記載されているのでドキュメントに沿って作成していってみたいと思います。

今回のゴール

下記のようなCOVID-19の東京の感染者数を状態別(Active, Confirmed, Deaths, Recoverd)に集約したクエリがあります。また、日付についてもシステムフィルタ:datebucketを利用して集約しています。

SELECT
    :datebucket(DATE) AS DATE
  , CASE_TYPE
  , SUM(CASES) AS CASES
FROM
  JHU_COVID_19
WHERE
  COUNTRY_REGION = 'Japan'
  AND PROVINCE_STATE = 'Tokyo'
  AND DATE = :daterange
GROUP BY
    :datebucket(DATE)
  , CASE_TYPE
;

このクエリのCASE_TYPEに対して更にカスタムフィルタをかける、というのを今回のゴールとします。

カスタムフィルタ作成権限を付与する

まずは、アカウント管理者(ACCOUNTADMINロールを持つユーザ)が、ACCOUNTADMINロールを含め、各ロールへカスタムフィルタを作成する権限を付与する必要があるとのことなので、権限を付与していきます。

「Settings」メニューの「Privacy」を開き「Add roles」から各ロールに権限を付与します。

今回はACCOUNTADMINロールを含め、すべてのロールに権限を付与しました。

カスタムフィルタを作成する

権限が付与できたら、今度は「Settings」メニューの「Filters」を開き「+ Filter」をクリックしてカスタムフィルタを作成していきます。

クリックすると以下のようにフィルタの設定画面が開きます。

Display nameSQL KeywordDescriptionについては任意で指定すれば問題ないですね。RoleWarehouseの設定がありますが、これは画面に記載の通りクエリを利用する場合にクエリを発行する際のRoleWarehouseを指定します。

フィルタにクエリを利用するパターン

カスタムフィルタを利用する場合、その「選択値」が必要となりますが、クエリで取得するというパターンです。「Query」を選択し「Write query」をクリックするとクエリ編集画面が開きます。

クエリは下記のようにしました。

SELECT
  CASE_TYPE
FROM
  JHU_COVID_19
GROUP BY
  CASE_TYPE
ORDER BY
  CASE_TYPE
;

これで想定される値(Active, Confirmed, Deaths, Recoverd)が取得できているので「Done」をクリックして終了します。

クエリを利用する場合、いくつかのオプションがあります。まずは更新の頻度です。更新しないか、1時間毎、日次から選択できますね。

また、値の型、複数選択の可否、「All」と「Other」についてのオプションがありますが「All」と「Other」はちょっとややこしいです。

画面に記載されている通り「All」の意味としては以下の2つの意味があります。今回は「すべての値」としました。

  • リストに出ている値のすべての値(リストに出ていない値は除外される)
  • すべての値(リストに出ていなくてもOK)

また「Other」は「リストに出ていない値」を意味します。

フィルタにリストを利用するパターン

こちらのパターンは、明示的にリストの値を個別設定するというパターンです。「List」を選択し「Edit list」をクリックするとリスト編集画面が開きます。

リストに出す名前と値を指定できますね。

カスタムフィルタを利用してみる

以上でカスタムフィルタを利用する準備が整いました。フィルタの一覧にも先程作成したフィルタが表示されています。

では早速このフィルタを利用してみます。再度今回のゴールの確認ですが、下記のようなCOVID-19の東京の感染者数を状態(CASE_TYPE)別に集約したクエリに対して、カスタムフィルタをかけるのがゴールとしています。

SELECT
    :datebucket(DATE) AS DATE
  , CASE_TYPE
  , SUM(CASES) AS CASES
FROM
  JHU_COVID_19
WHERE
  COUNTRY_REGION = 'Japan'
  AND PROVINCE_STATE = 'Tokyo'
  AND DATE = :daterange
GROUP BY
    :datebucket(DATE)
  , CASE_TYPE
;

CASE_TYPEに対して更にカスタムフィルタをかけたいので、作成したフィルタ:casetypeを利用した以下のようなクエリとします。

SELECT
    :datebucket(DATE) AS DATE
  , CASE_TYPE
  , SUM(CASES) AS CASES
FROM
  JHU_COVID_19
WHERE
  COUNTRY_REGION = 'Japan'
  AND PROVINCE_STATE = 'Tokyo'
  AND DATE = :daterange
  AND CASE_TYPE = :casetype
GROUP BY
    :datebucket(DATE)
  , CASE_TYPE
;

なお、クエリを書くと自動的に以下のように補完してくれます。

ではクエリを実行し、更に分かり易いようにチャート化してみます。

「All」を選択する

まずは「All」です。フィルタ作成時に「すべての値」にしたので4つの状態(Active, Confirmed, Deaths, Recoverd)のすべてが出ています。

複数選択をする(Confirmed と Recoverd)

次に「Confirmed」と「Recoverd」の2つを選択してみます。ちゃんと2つだけでフィルタされていますね。

「Other」を選択する

最後に「Other」です。「Other」は「リストに出ていない値」を意味するので、リストに出ている「Active」、「Confirmed」、「Deaths」、「Recoverd」以外の値、すなわち0件になります。

まとめ

以上、Snowsightの「カスタムフィルタ」を試してみました。システムフィルタと同様に、チャートと組み合わせて使ってみると分析に非常に便利ですし、フィルタをクエリベースで自由に作成できるのが良いと感じました。

どなたかのお役に立てば幸いです。それでは!