Lookerを使ってSnowflakeの使用状況を2分で可視化する

ルッスノ
2020.06.25

奈良県でリモートワーク中の玉井です。

クラウド型DWHのSnowflakeは従量課金なので、使用状況の把握が非常に重要です。SnowflakeのWebUIから確認することはできるのですが、人によっては「もっと色々な情報を見たい」とか「もっとわかりやすいグラフでみたい」といった要望が出てくると思います。また、その使用状況を関係者に定期的に周知したい的な要望もあるかと思います。

Snowflakeは使用状況データが格納されているDBが用意されており、それを用いてユーザーが好きなように分析することができます。そこで別途BIツールの出番というわけなのですが、それはそれで別途ダッシュボードを構築しないといけない…大変だ…って感じで途方に暮れると思います。

しかし!LookerのMarketplaceに用意されている「Snowflake Cost and Usage」を使えば、数分で高品質なSnowflake使用状況ダッシュボードを構築することができます。というわけで、実際にやってみました。

また、記事の最後の方で「LookerでSnowflakeの情報を可視化するメリット」についても書いているので、よかったらどうぞ

Looker Marketplaceとは?

下記を読んでみてください。

Snowflake Cost and Usageの導入

何はともあれ、まずはMarketplaceを開きます。そして、「Snowflake Cost and Usage」を探して選択します。

左側にあるInstallを選択します。

導入画面が展開されます。

必要な権限を教えてもらえるので、確認して次へ。

Snowflakeを指定しているConnectionと、DB名を指定します。これらを指定しなければいけないということは、すなわち、予めConnectionにSnowflakeを登録しておく必要があるということです。DB名はデフォルトでSNOWFLAKEが指定されていますが、Snowflakeをめっちゃイジってない限り、Snowflakeの使用状況データはこのDBに入っているので、そのままで大丈夫だと思います。

インストールが完了すると、BrowseメニューからダッシュボードやExploreを見に行けます。

ダッシュボードを見てみる

「Snowflake Cost and Usage」をインストールすると、2つのダッシュボードが構築されます。

Snowflake Usage

メインとなるダッシュボードです。指定したSnowflakeアカウントの使用状況が一目瞭然です。

※弊社の使用状況となるのでモザイクだらけになりました…。

  • 過去4週間における使用クレジットや発行クエリ数
  • 日時別×仮想ウェアハウス別の使用量グラフ
  • ユーザーのログイン失敗率
  • ストレージ使用率

…などなど、Snowflakeを使っていると気になる情報がひと目でわかるようになっています。上記で紹介しているのはダッシュボードの一部に過ぎず、実際はもっと色々あります。

Query Inspection

こちらはクエリを指定し、そのクエリに関する情報を確認できるダッシュボードです。

表示しただけでは、何も出ません。

クエリに関するダッシュボードなので、クエリを指定するフィルタの指定が必須になっています。

クエリを指定すると、フィルタ条件に合致したクエリに関する情報が表示されます。

Snowflake Usageダッシュボードでクレジット使用量が目立つユーザーや仮想ウェアハウス等があれば、そこから怪しいクエリを調査して、改善できそうです。

Exploreを見てみる

ダッシュボードだけでなく、ユーザーが自らデータ分析できるように、Exploreもいくつか用意されています。

今回はWarehouse Metering Historyを見てみます。仮想ウェアハウスについて色々と分析できるExploreです。

仮想ウェアハウス別の平均クレジットを出してみました。

このような形で、別途ユーザー独自のLookやダッシュボードを作っていくことも可能です。

LookMLがどうなってるかちょっとだけ見てみる

これに限らず、Looker Marketplaceで提供されているものの実体は、LookMLのかたまりです。当然ながら「Snowflake Cost and Usage」もLookMLです。というわけで、どういう風になっているか、少しだけ見てみましょう。

下記が「Snowflake Cost and Usage」のProjectになります。

上記で触ってみたWarehouse Metering HistoryというExploreがどうなっているのか見てみましょう。

そもそもこのExploreの基となっているのは、SnowflakeのSNOWFLAKEというDB内のACCOUNT_USAGEというスキーマにあるWAREHOUSE_METERING_HISTORYというビューです。

そのビューが使われているViewファイル(ややこしい)がwarehouse_metering_history_core.viewになります。

(略)

view: warehouse_metering_history_core {
  sql_table_name: @{DATABASE_NAME}.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY ;;

(略)

このViewがどこかにExploreとして定義されているはずです。というわけで探してみると、warehouse_metering_history.explore内で定義されていました。

explore: warehouse_metering_history_core {
  extension: required
}

extension: requiredとあるため、このExploreは別のExploreで継承しないと使えないようになっていました。さらに継承先を探すと、warehouse_metering_history.view内で継承されていました。

view: warehouse_metering_history_config {
  extends: [warehouse_metering_history_core]
  extension: required
}

なんと、こちらもさらに継承必須となっていました。というわけでさらに捜索すると、block_snowflake_usage.modelというModelファイルにExploreが定義されていました。

explore: warehouse_metering_history {
  extends: [warehouse_metering_history_config]
}

こちらが、先程触ったExploreとなっていました。

他のExploreの基本的に同様の構成でした。どのExploreも継承前提の構成になっているため、自分でこれらのLookMLをカスタマイズしたい時も、元々しっかり組まれているViewを継承しつつ、別途独自のExploreを作ることができるようになっています(他にもこういう構成になっている理由はあるかもしれませんが、考察はひとまずこんなところで…)。

LookerでSnowflakeの状況を可視化するメリット

「Snowflake Cost and Usage」の紹介を一通りしたところで、こいつを使うメリットも触れていきたいと思います。

…といっても、実は、Projectの中にREADMEファイルがあり、そこにメリットが書かれているので、そちらに沿って紹介します。

コストとパフォーマンスの最適化ができる

Snowflakeの使用状況を定期的にチェックすることで、効果的なコスト削減やパフォーマンスの向上につながる施策を検討・実施することができます。

また、時系列で追うこともできるので、施策実行前と実行後で、結果を比較することも容易です。

別のDWHとパフォーマンス比較ができる

実は、LookerのMarket Placeには、下記のようなものもあります。

上記を併用することで、Lookerが接続している複数のDWHの状態を一気通貫でモニタリングすることができます(Google BigQuery用もあるので、3大DWHの比較も可能)。また、同じ構成のデータをそれぞれに用意すれば、同一データモデルでのパフォーマンス比較も可能でしょう(モデリングはLookMLなので、一度書けば、Connection情報だけ書き換えて複製すれば、すぐにDWH分の数だけ用意できる)。

Lookerの機能(配信や埋め込みなど)をフル活用できる

Looker上にダッシュボードが作られるので、例えば「ダッシュボード画像をSlackへの定期投稿する」といったLookerアクションを設定することができます。当然ながら、Webサイトへの埋め込みも可能です。あるデータが閾値を超えたらアラートを飛ばすっていうこともできるので、Snowflakeクレジットの使いすぎ防止にも役立つはずです

Snowflakeへのアクセスエラーをチェックできる

ダッシュボードの中には、Snowflakeへのアクセス(ログイン)エラーについてわかるものも含まれています。これにより、Snowflake側の暗黙的なデータ変更等を検知できるようになります。

おわりに

実際に弊社でもこちらのダッシュボードをセットアップし、関係者が所属しているSlackチャンネルへ定期的に投稿するようにしています。これで、メンバーが能動的にSnowflakeのコストページを見ずとも、日常的に使用しているSlackを見ているだけで、Snowflakeの使用状況が定期的にわかるようになりました。

導入の手間に対する実務への効果が極めて高いので、ぜひ使ってみてください。