# SnowflakeとLooker Studioのデータ連携(公開用) ## Snowflakeとは クラウド上に構築されたSaaS型のデータウェアハウス(DWH)です。DWHとはデータを格納する倉庫のことです。他のクラウド型DWHとしてはAmazon RedshiftやGoogle BigQueryが有名です。 ### エディション・料金形態 Snowflakeには[以下の三つのリソースに対して](https://docs.snowflake.com/ja/user-guide/cost-understanding-overall.html#how-are-costs-incurred)料金が発生します。 - コンピューティングリソース - ストレージリソース - データ転送リソース #### コンピューティングリソース Snowflake内でコンピューティングリソースを使用すると、「クレジット」が消費されます。クレジットとはSnowflakeのリソース使用量の単位のことです。クレジットはウェアハウスの実行中、クラウドサービスレイヤーの作業中、サーバーレス機能の使用時に消費されます。 具体的な使用料金については[このページ](https://www.snowflake.com/pricing/?lang=ja)で調べることができます。 クラウドプラットフォーム、リージョンの選び方によってエディションごとの料金は変化しますが、例えばAWSでTokyoリージョンを選択した場合の料金形態は以下のようになります。 ![](https://i.imgur.com/PTN038q.jpg) また、コンピューティングリソースの中でも、一般には大部分をウェアハウスの実行による消費が占めることが多いようです。 一時間あたりのウェアハウスの消費クレジットが下表に記載されています。([参考](https://docs.snowflake.com/en/user-guide/cost-understanding-compute.html#virtual-warehouse-credit-usage)) ![](https://i.imgur.com/07MeuqY.png) #### ストレージリソース Snowflakeにデータを格納するための月額コストであり、上記同様[このページ](https://www.snowflake.com/pricing/?lang=ja)で調べることができます。AWSでTokyoリージョンを選択した場合の料金形態は以下のようになります。 ![](https://i.imgur.com/ybOUl1F.png) #### データ転送リソース Snowflakeから外向きへデータを出力する際にのみデータ転送料金が発生しますが、具体的な料金についてはクラウドプロバイダーに依存しますが、一般的には上記二つのリソースに比べると割合は小さいです。 ## Looker Studioとは [Looker Studio](https://cloud.google.com/looker-studio?hl=ja)とは、Google Cloudが提供するクラウドベースのBIツール(旧称データポータル)です。さまざまなデータソースへの接続が可能であり、SQLの知識がなくても高機能な分析を行えることが特徴です。 ### 料金形態 Looker Studioは基本的に無料で使用できます。Looker Studio Proにアップグレードした場合には料金が発生します。 ## SnowflakeとLooker Studioのデータ連携方法 Snowflake上のデータをLooker Studioに取り込むための具体的な手順を解説します。大まかな流れは以下の通りです。 1. Snowflake上にLooker Studio用のロールを作成し、そのロールに連携したいデータベースへのアクセス権限を与える。 2. Looker StudioのレポートからSnowflakeに連携するボタンを押し、必要な情報を入力する。 ### Snowflakeの接続設定 Snowflake側では、Looker Studio用のロール、ウェアハウスを作成する必要があります。(Looker StudioとLookerは異なるサービスですが、[Lookerとの接続用の公式ドキュメント](https://cloud.google.com/looker/docs/db-config-snowflake?hl=ja)が参考になります。) まず、Snowflakeでコマンドを実行するために、ワークシートを作成します。 ![](https://i.imgur.com/qhwaoH6.png) ワークシート内でコマンドを貼り付け、実行していきます。コマンドを実行するには、コマンドの行にカーソルが乗った状態で、右上の実行ボタンを押します。 ![](https://i.imgur.com/1nSdJok.png) まずは、以下のコマンドで自分をACCOUNTADMINロールに切り替えます。 ```SQL use role ACCOUNTADMIN; ``` 次に、下記のコマンドで、`looker_role`という名前のロールを作成し、`SYSADMIN`ロールに`looker_role`を[継承](https://docs.snowflake.com/ja/user-guide/security-access-control-overview.html#role-hierarchy-and-privilege-inheritance)させます。 ```SQL create role if not exists looker_role; grant role looker_role to role SYSADMIN; ``` `looker_user`という名前のユーザーを作成し、作成したユーザに`looker_role`を与えてから、[デフォルトロール](https://docs.snowflake.com/ja/sql-reference/sql/create-user.html#optional-object-properties-objectproperties)と[デフォルトウェアハウス](https://docs.snowflake.com/ja/user-guide/warehouses-overview.html#default-warehouse-for-users)の設定をします。コマンド実行前に、パスワードは任意のものに置き換えてください。 ```SQL create user if not exists looker_user password = '<enter password here>'; grant role looker_role to user looker_user; alter user looker_user set default_role = looker_role default_warehouse = 'looker_wh'; ``` 自分の権限を`SYSADMIN`に変更します。 ```SQL use role SYSADMIN; ``` Looker用のウェアハウス`looker_wh`を作成します。ウェアハウスのサイズやタイプ等は適宜変更しても問題ありません。 ```SQL create warehouse if not exists looker_wh warehouse_size = medium warehouse_type = standard auto_suspend = 1800 auto_resume = true initially_suspended = true; ``` `looker_role`に、`looker_wh`での全ての権限を与えます。 ```SQL grant all privileges on warehouse looker_wh to role looker_role; ``` `looker_role`に、接続したいデータベースとスキーマの使用権限を与えます。コマンドを実行する前にデータベース名とスキーマ名を適宜変更してください。 ```SQL grant usage on database <database> to role looker_role; grant usage on schema <database>.<schema> to role looker_role; ``` データベースの全てのテーブルへの`select` 権限を`looker_role`に与えます。 ```SQL grant select on all tables in schema <database>.<schema> to role looker_role; ``` もしくは、`select` 権限を特定のテーブルのみに与えたい場合は以下のようなコマンドを実行します。 ```SQL grant select on future tables in schema <database>.<schema> to role looker_role; ``` 最後に、Looker Studioが書き込むためのデータベースを作成したい場合は、以下のコマンドを実行します。 ```SQL use database <database>; create schema if not exists looker_scratch; use role ACCOUNTADMIN; grant ownership on schema looker_scratch to role SYSADMIN revoke current grants; grant all on schema looker_scratch to role looker_role; ``` 以上でSnowflake側の設定は終了です。 ### Lookerの接続設定 データ連携したいレポート上で「データを追加」ボタンを押します。 ![](https://i.imgur.com/DfUVaDE.png) データソースの一覧が表示されます。検索欄に「Snowflake」と入力すると、Snowflakeが一覧に表示されるので、クリックします。 ![](https://i.imgur.com/f3o5Ct6.png) Looker StudioからSnowflakeへデータをアクセスすることを許可するよう求められるので、「承認」に進みます。 ![](https://i.imgur.com/EAgxNRL.png) Snowflakeのユーザ名とパスワードの入力欄が表示されますので、ユーザ名とパスワードを入力し、送信します。 ![](https://i.imgur.com/VwNOERh.png) 次に、Snowflakeの画面上でアカウントURLをSnowflakeの以下のボタンからクリップボードにコピーします。 ![](https://i.imgur.com/P4Hx0XE.png) Looker Studioの画面に戻ります。ユーザ名とパスワードの入力が完了すると、以下のようにSnowflakeのアカウントURLを入力するよう求められます。この欄にクリップボードに貼り付けておいたアカウントURLを入力します。ただし先頭の「https://」は取り除いてください。 ![](https://i.imgur.com/xgfiz5B.png) 接続用のロールの選択欄が表示されるので、先ほど用意した「looker_role」を選択します。 ![](https://i.imgur.com/bpTZnwv.png) ウェアハウスの選択欄が表示されるので、先ほど用意した「looker_wh」を選択します。 ![](https://i.imgur.com/dAeYJJa.png) データ連携したいデータベースの選択欄が表示されるので、該当データベースを選択します。 ![](https://i.imgur.com/ODGfYMK.png) データ連携したいスキーマの選択欄が表示されるので、該当スキーマを選択します。 ![](https://i.imgur.com/YJh2Dvg.png) 実際に連携するデータを取得するためのSQLクエリの入力欄が表示されるので、クエリを入力します。今回の例では「MYTABLE」というテーブルから全ての行を取得しています。 ![](https://i.imgur.com/kZhIQnS.png) ここまで進むと、「追加」を押すことができるようになるので、ここをクリックして次に進みます。 ![](https://i.imgur.com/hC1uCz3.png) 以下のような確認画面が表示されるので、「レポートに追加」をクリックします。 ![](https://i.imgur.com/XKTpNIi.png) 以上でデータ連携の手続きは終了です。このようにデータを連携することができました。 ![](https://i.imgur.com/WKYVqdn.png) ## まとめ - Snowflake上にLooker Studio用にロール、ウェアハウスを作成します。 - Looker Studioからの連携は「データを追加」から手順に従って行えば連携が可能です。