Looker を Snowflake に接続する手順は次のとおりです。
- Snowflake で Looker ユーザーを作成し、アクセスをプロビジョニングします。
- Looker でデータベース接続を設定します。
ネットワークトラフィックの暗号化
Looker アプリケーションとデータベース間のネットワーク トラフィックを暗号化することをおすすめします。セキュアなデータベースアクセスを可能にするドキュメント ページに記載されているオプションのいずれかを検討してください。
Snowflake で Looker ユーザーを作成する
Looker ユーザーの作成には、次のコマンドを使用することをおすすめします。各行を個別に実行してください。
必要に応じて、
ON FUTURE
キーワードを追加して、新しく作成されたオブジェクトにGRANT
ステートメントを保持します。Looker が使用するすべてのスキーマでテーブルに対して実行することをおすすめします。これにより、新しいテーブルを作成するときにGRANT
ステートメントを再実行する必要がなくなります。
-- change role to ACCOUNTADMIN
use role ACCOUNTADMIN;
-- create role for looker
create role if not exists looker_role;
grant role looker_role to role SYSADMIN;
-- Note that we are not making the looker_role a SYSADMIN,
-- but rather granting users with the SYSADMIN role to modify the looker_role
-- create a user for looker
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;
-- change role
use role SYSADMIN;
-- create a warehouse for looker (optional)
create warehouse if not exists looker_wh
-- set the size based on your dataset
warehouse_size = medium
warehouse_type = standard
auto_suspend = 1800
auto_resume = true
initially_suspended = true;
grant all privileges
on warehouse looker_wh
to role looker_role;
-- grant read only database access (repeat for all database/schemas)
grant usage on database <database> to role looker_role;
grant usage on schema <database>.<schema> to role looker_role;
-- rerun the following any time a table is added to the schema
grant select on all tables in schema <database>.<schema> to role looker_role;
-- or
grant select on future tables in schema <database>.<schema> to role looker_role;
-- create schema for looker to write back to
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 接続パネルにバッチとして貼り付ける場合は、[すべてのクエリ] チェックボックスをオンにして、すべての行が実行されるようにします。デフォルトでは、Snowflake は選択された行のみを実行します。
データベースへの Looker 接続の作成
Looker の [管理者] セクションで [接続] を選択し、[新しい接続] をクリックします。
接続の詳細を入力します。設定の大部分は、ほとんどのデータベース言語に共通するものです。詳細については、Looker をデータベースに接続するのドキュメント ページをご覧ください。設定の一部を次に説明します。
- 名前: 接続に名前を付けます。これによって LookML モデルが接続を参照する方法を示します。
- 言語: [Snowflake] を選択します。
- ホスト: Snowflake のホスト名を入力します。
<account_name>.snowflakecomputing.com
のようになります。リージョン別の Snowflake アカウント名の例で、デプロイに適切な値を使用していることを確認します。 - ポート: デフォルトは 443 です。
- データベース: 使用するデフォルト データベースを入力します。この項目では大文字と小文字が区別されます。
- スキーマ: デフォルトのスキーマを入力します。
- 認証: [データベース アカウント] または [OAuth] を選択します。
- [データベース アカウント] を使用して、Looker への接続に使用する Snowflake ユーザー アカウントのユーザー名とパスワードを指定します。
- 接続用に OAuth を構成する場合は、OAuth を使用します。
PDT を有効にする: 永続的な派生テーブル(PDT)を有効にするには、この切り替えボタンを使用します。PDT を有効にすると、追加の PDT フィールドと、接続用の [PDT オーバーライド] セクションが表示されます。
一時データベース: PDT が有効になっている場合は、このフィールドを作成して、ユーザーがテーブルを作成、ドロップ、名前変更、変更するための完全な権限を持つスキーマを設定します。
ノードあたりの最大接続数: この設定は、デフォルト値のままで問題ありません。この設定の詳細については、Looker をデータベースに接続するドキュメント ページのノードごとの最大接続数セクションをご覧ください。
費用の見積もり: 接続での Explore クエリの費用の見積もり、SQL Runner クエリの費用の見積もり、集計認識クエリの計算量削減見積もりが有効になります。
データベースのタイムゾーン: Snowflake データベースが日時を保存するために使用するタイムゾーン。デフォルトは UTC です。PIN の作成は省略することもできます。
クエリのタイムゾーン: クエリを表示するタイムゾーン。米国東部(アメリカ – ニューヨーク)などです。PIN の作成は省略することもできます。
その他の JDBC パラメータ: Snowflake JDBC ドライバから JDBC パラメータを追加します。
warehouse=<YOUR WAREHOUSE NAME>
個追加します。さらに、デフォルトでは、Looker ではセッションごとに次の Snowflake パラメータが設定されます。
TIMESTAMP_TYPE_MAPPING=TIMESTAMP_LTZ
JDBC_TREAT_DECIMAL_AS_INT=FALSE
TIMESTAMP_INPUT_FORMAT=AUTO
AUTOCOMMIT=TRUE
これらのパラメータをオーバーライドするには、[その他の JDBC パラメータ] フィールドに別の値を設定します(例:
&AUTOCOMMIT=FALSE
)。
接続が成功したことを確認するには、[テスト] をクリックします。トラブルシューティング情報については、データベース接続のテストのドキュメント ページをご覧ください。
これらの設定を保存するには、[接続] をクリックします。
Snowflake ウェアハウスをグループ単位またはユーザー単位で指定する
Looker のユーザー属性を使用して、個々の Looker ユーザーまたはグループに個別の Snowflake ウェアハウスを割り当てることができます。これは、異なるレベルのコンピューティング能力を必要とするユーザーが存在する場合などに活用できます。大きなコンピューティング リソースを備えたウェアハウスを必要とするユーザーにのみ割り当てる一方で、それほど必要としないユーザーに対してはリソースが少ないウェアハウスを割り当てることができます。
グループ単位またはユーザー単位でウェアハウスを指定するには、次の操作を行います。
- Looker でグループまたはユーザーを追加します。
Snowflake ウェアハウス名を保存する Looker のユーザー属性を定義します。この属性には任意の名前を付けることができます(例:
snowflake_wh
)。[接続設定] ページの [その他の JDBC パラメータ] フィールドに以下の内容を追加します。
snowflake_warehouse
は、定義したユーザー属性の名前に置き換えます。warehouse={{ _user_attributes['snowflake_warehouse'] }}
次に例を示します。
個々の接続の設定をテストするには、ウェアハウス名の値を割り当てたユーザーとして sudo を実行します。
この手順の詳細については、Red Pill Analytics のブログをご覧ください。
Snowflake の自動一時停止機能
Snowflake ウェアハウスは、自動一時停止機能を備えており、この機能はデフォルトで有効になっています。指定した期間が経過すると、ウェアハウスは自動的に一時停止します。ウェアハウスが一時停止されている場合は、すべてのクエリでエラーが発生します。このエラーはダッシュボードには表示されません(通常、データは表示されません)が、Explore ページでクエリを実行すると表示されます。
Snowflake には、クエリが実行されたときにウェアハウスを再開する自動再開機能もあります。しかし、ウェアハウスの再開には最大で 5 分を要し、結果を返す前にクエリが 5 分間応答を停止する場合があります。これらの機能は Looker で構成できません。これらの機能は、Snowflake UI の [ウェアハウス] タブで有効にします。
PDT のサポート
永続的な派生テーブルをサポートするには、データベースおよび Looker が PDT の作成に使用する一時スキーマへの書き込みアクセス権がある PDT 用の Snowflake ユーザー アカウントを作成します。Looker の [接続設定] ページの [永続的な派生テーブル(PDT)] セクションで、[PDT を有効にする] 切り替えボタンをオンにします。次に、[一時データベース] フィールドに、Looker で PDT の作成に使用される一時スキーマの名前を入力します。次に、[PDT オーバーライド] セクションで PDT ユーザーのユーザー名とパスワードを入力します。詳細については、Looker をデータベースに接続するのドキュメント ページをご覧ください。
OAuth を使用する Snowflake 接続では PDT はサポートされていません。
Snowflake 接続の場合、Looker は AUTOCOMMIT
パラメータの値を TRUE
(Snowflake のデフォルト値)に設定します。Looker が PDT 登録システムを維持するために実行する SQL コマンドには、AUTOCOMMIT が必須です。
Snowflake 接続用の OAuth の構成
Looker は Snowflake 接続用の OAuth をサポートしています。つまり、各 Looker ユーザーはデータベースに対して認証を行い、Looker がユーザー独自の OAuth ユーザー アカウントを使用してデータベースでクエリを実行することを認可します。
OAuth により、データベース管理者は次のタスクが行えるようになります。
- データベースに対してどのLookerユーザーがクエリを実行しているかを監査する
- データベースレベルの権限を使用してロールベースのアクセス制御を実施する
- データベースにアクセスするすべてのプロセスとアクションに、データベース ID とパスワードを複数の場所に埋め込む代わりに OAuth トークンを使用する
- データベースを介して特定のユーザーの認証を取り消す
OAuth を使用する Snowflake 接続では、ユーザーは OAuth トークンの有効期限が切れたときに定期的に再ログインする必要があります。Snowflake OAuth トークンの有効期間は、Snowflake 自体で設定します。
データベース レベルの OAuth 接続について、次の点に注意してください。
- OAuth トークンの有効期限が切れると、そのユーザーが所有する Looker のスケジュールやアラートが影響を受けます。これを防ぐため、Looker では、現在の有効な OAuth トークンの有効期限が切れる前に、各スケジュールと各アラートのオーナーに通知メールが送信されます。トークンの有効期限が切れる 14 日前、7 日前、1 日前に、Looker から通知メールが送信されます。ユーザーは、Looker ユーザーページに移動して Looker をデータベースに再認可し、スケジュールやアラートの中断を回避できます。詳しくは、ユーザー アカウントの設定をカスタマイズするのドキュメント ページをご覧ください。
OAuth を使用するデータベース接続は「ユーザーごと」であり、キャッシュ ポリシーもまたクエリごとではなくユーザーごとです。つまり、Looker ではキャッシュ期間内に同じクエリが実行された場合、キャッシュに保存された結果を常に使用するのではなく、キャッシュ期間内に同一ユーザーが同じクエリを実行した場合にのみ、キャッシュ保存された結果が使用されます。キャッシュについて詳しくは、クエリのキャッシングのドキュメント ページをご覧ください。
OAuth を使用する場合、Snowflake ユーザー アカウントで別のロールに切り替えることはできません。Snowflake のドキュメントに記載されているように、デフォルトのロールが ACCOUNTADMIN または SECURITYADMIN でない限り、Snowflake は Snowflake ユーザーのアカウントのデフォルト ロールを使用します。これらのロールは OAuth でブロックされているため、代わりに PUBLIC ロールが使用されます。詳細については、Snowflake のドキュメントをご覧ください。
永続的な派生テーブル(PDT)は、OAuth を使用した Snowflake 接続ではサポートされていません。
Looker 管理者が別のユーザーとして sudo を実行する場合、そのユーザーの OAuth アクセス トークンを使用します。ユーザーのアクセストークンの有効期限が切れている場合、管理者は sudo されているユーザーに代わって新しいトークンを作成することはできません。
sudo
コマンドの使用方法については、ユーザーのドキュメント ページをご覧ください。
Looker で OAuth 用に Snowflake データベースを構成する
OAuth を使用して Looker への Snowflake 接続を作成するには、Snowflake で OAuth インテグレーションを設定する必要があります。これには、ACCOUNTADMIN 権限を持つ Snowflake ユーザー アカウントが必要です。
Snowflake で次のコマンドを実行します。ここで、
<looker_hostname>
は Looker インスタンスのホスト名です。CREATE SECURITY INTEGRATION LOOKER TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = LOOKER OAUTH_REDIRECT_URI = 'https://<looker_hostname>/external_oauth/redirect';
次のコマンドを実行して、OAuth クライアント ID とシークレットを取得します。
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');
この手順の後の部分で必要になる
OAUTH_CLIENT_ID
とOAUTH_CLIENT_SECRET
がレスポンスに含まれます。Looker で、このページのデータベースへの Looker 接続の作成セクションの説明に沿って、Snowflake ウェアハウスへの新しい接続を作成します。新しい接続を作成するときに、[認証] フィールドで [OAuth] オプションを選択します。[OAuth] オプションを選択すると、Looker に [OAuth Client ID] と [OAuth Client Secret] フィールドが表示されます。
この手順の前半でデータベースから取得した
OAUTH_CLIENT_ID
とOAUTH_CLIENT_SECRET
の値を貼り付けます。Looker をデータベースに接続するの残りの手順を完了します。
データベースへの Looker の接続を構成したら、次のいずれかの方法で接続自体をテストできます。
- データベースへの Looker の接続のドキュメント ページで説明されているように、[接続設定] ページの下部にある [テスト] ボタンを選択します。
- 接続のドキュメント ページの説明に従って、[接続] 管理ページの接続リストの横にある [Test] ボタンを選択します。
次に、以下の手順で接続をテストし、モデルにデプロイできます。
- Looker で Development Mode に移行します。
- Snowflake 接続を使用する Looker プロジェクトのプロジェクト ファイルに移動します。
- モデルファイルを開き、モデルの
connection
値を新しい Snowflake 接続の名前に置き換えて、モデルファイルを保存します。 - モデルの Explore またはダッシュボードの一つを開き、クエリを実行します。クエリを実行しようとすると、Snowflake にログインするよう求められます。
- Snowflake のログイン プロンプトに沿って、Snowflake の認証情報を入力します。
Snowflake へのログインが成功すると、Looker はクエリに戻ります。クエリが正しく実行されたら、新しい接続値を commit し、変更を本番環境にデプロイできます。
Snowflake にログインしてクエリを実行する
OAuth 用に Snowflake 接続を設定すると、クエリを実行する前にユーザーに対して Snowflake にログインするよう求めるプロンプトが表示されます。これには Explore、ダッシュボード、Look、SQL Runner からのクエリが含まれます。
[アカウント] ページの [OAuth 接続認証情報] セクションから Snowflake にログインすることもできます。
Looker を使用して Snowflake アカウントにログインする手順は次のとおりです。
- Looker ユーザー メニューをクリックします。
- [アカウント] を選択します。
- [アカウント] ページで、[OAuth 接続認証情報] セクションに移動し、適切な Snowflake データベースの [ログイン] ボタンを選択します。
[ログイン] を選択すると、Snowflake のログイン ダイアログが表示されます。Snowflake の認証情報を入力して [ログイン] を選択し、[許可] を選択して Looker に Snowflake アカウントへのアクセスを許可します。
Looker を通じて Snowflake にログインした後は、[アカウント] ページでいつでも認証情報からログアウトまたは再認証できます。詳しくは、ユーザー アカウントのカスタマイズ ドキュメント ページをご覧ください。
機能のサポート
一部の機能については、Looker でサポートするには、データベース言語が同じ機能に対応している必要があります。
Snowflake では、Looker 24.20 の時点で、次の機能がサポートされています。
特徴 | サポート対象 |
---|---|
サポート レベル | サポート対象 |
Looker(Google Cloud コア) | ○ |
対称集計 | ○ |
派生テーブル | ○ |
永続的な SQL 派生テーブル | ○ |
永続的なネイティブ派生テーブル | ○ |
安定したビュー | ○ |
クエリの強制終了 | ○ |
SQL ベースのピボット | ○ |
タイムゾーン | ○ |
SSL | ○ |
Subtotals | ○ |
JDBC の追加パラメータ | ○ |
大文字と小文字を区別 | ○ |
ロケーション タイプ | ○ |
リストのタイプ | ○ |
パーセンタイル | ○ |
個別のパーセンタイル | × |
SQL Runner の表示プロセス | × |
SQL Runner の説明テーブル | ○ |
SQL Runner 表示インデックス | × |
SQL Runner Select 10 | ○ |
SQL ランナーの数 | ○ |
SQL の説明 | ○ |
Oauth 認証情報 | ○ |
コンテキスト コメント | ○ |
接続プーリング | はい |
HLL スケッチ | ○ |
集計認識 | ○ |
増分PDT | はい |
ミリ秒 | ○ |
マイクロ秒 | ○ |
マテリアライズド ビュー | × |
Approximate Count Distinct | いいえ |
次のステップ
データベースを Looker に接続した後、ユーザーのログイン オプションを構成します。