Snowflake

以下の手順で Looker を Snowflake に接続します。

  1. Snowflake で Looker ユーザーを作成し、アクセスをプロビジョニングします。
  2. 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 のユーザー属性を使用して、個別の Snowflake ウェアハウスを個々の Looker のユーザーまたはグループに割り当てることができます。これは、異なるレベルのコンピューティング能力を必要とするユーザーが存在する場合などに活用できます。大きなコンピューティング リソースを備えたウェアハウスを必要とするユーザーにのみ割り当てる一方で、それほど必要としないユーザーに対してはリソースが少ないウェアハウスを割り当てることができます。

グループまたはユーザー単位でウェアハウスを指定するには:

  1. Looker でグループまたはユーザーを追加します。
  2. Snowflake ウェアハウス名を保存する Looker のユーザー属性を定義します。この属性には任意の名前を付けることができます(例: snowflake_wh)。

  3. 先ほど定義したユーザー属性で、ウェアハウス名の値を [groups] または [users] に割り当てます。

  4. [接続設定] ページの [その他の JDBC パラメータ] フィールドに以下の内容を追加します。snowflake_warehouse は、定義したユーザー属性の名前に置き換えます。

      warehouse={{ _user_attributes['snowflake_warehouse'] }}
    

    例:

  5. 個々の接続の設定をテストするには、ウェアハウス名の値を割り当てたユーザーとして 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 をデータベースに接続するのドキュメント ページをご覧ください。

PDT は OAuth を使用する Snowflake 接続ではサポートされていません。

Snowflake 接続の場合、Looker は AUTOCOMMIT パラメータの値を TRUE(Snowflake のデフォルト値)に設定します。Looker が PDT 登録システムを維持するために実行する SQL コマンドには、AUTOCOMMIT が必須です。

Snowflake 接続用の OAuth の構成

Looker では Snowflake 接続に対して OAuth がサポートされています。つまり、各 Looker ユーザーは Snowflake で認証を行い、Looker が独自の Snowflake ユーザー アカウントを使用してデータベースでクエリを実行することを許可できます。

OAuthはデータベース管理者に以下を許可します。

  • データベースに対してどのLookerユーザーがクエリを実行しているかを監査する
  • Snowflake のアクセス権限を使用してロールベースのアクセス制御を行う
  • Snowflake にアクセスするすべてのプロセスとアクションのために、Snowflake ID とパスワードを複数の場所に埋め込む代わりに OAuth トークンを使用する
  • Snowflake で特定のユーザーの認可を取り消す

OAuth を使用する Snowflake 接続では、ユーザーは OAuth トークンの有効期限が切れたときに定期的に再ログインする必要があります。Snowflake OAuth トークンの有効期間は、Snowflake 自体によって設定されます。

OAuth での Snowflake については、次の点に注意してください。

  • Snowflake トークンの有効期限が切れると、ユーザーが所有しているスケジュールやアラートに影響します。これを防ぐために、Looker は、現在アクティブな Snowflake OAuth トークンが期限切れになる前に、各スケジュールと各アラートのオーナーに通知メールを送信します。Looker は、トークンの 14 日前、7 日前、1 日前にこれらの通知メールを送信します。ユーザーは Looker ユーザーページにアクセスして、データベースに対する Looker の再承認が可能となり、スケジュールやアラートの中断を回避できます。詳しくは、ユーザー アカウントの設定をカスタマイズするのドキュメント ページをご覧ください。
  • OAuth を使用する Snowflake 接続は「ユーザーごと」であり、キャッシュ ポリシーもまたクエリごとではなくユーザーごとです。つまり、Looker ではキャッシュ期間内に同じクエリが実行された場合、キャッシュされた結果を常に使用するのではなく、キャッシュ期間内に同一ユーザーが同じクエリを実行した場合にのみ、キャッシュされた結果が使用されます。キャッシュについて詳しくは、クエリのキャッシングのドキュメント ページをご覧ください。
  • OAuth を使用する場合は、Snowflake ユーザー アカウントで別のロールに切り替えることはできません。Snowflake のドキュメントで説明されているように、デフォルトのロールが ACCOUNTADMIN または SECURITYADMIN でない場合は、Snowflake ユーザーのアカウントにデフォルトのロールが使用されます。これらのロールは OAuth でブロックされているため、Snowflake では代わりに PUBLIC ロールを使用します。詳細については、Snowflake のドキュメントをご覧ください。
  • OAuth による Snowflake 接続では、永続的な派生テーブル(PDT)はサポートされていません。
  • 管理者は、別のユーザーとして sudo を実行する場合にそのユーザーの OAuth アクセス トークンを使用します。ユーザーのアクセストークンの有効期限が切れている場合、管理者は、sudoで使用されているユーザーに代わって新しいトークンを作成することはできません。そのユーザーが Snowflake にログインし、Looker を再認証する必要があります。sudo コマンドの使用方法については、ユーザーのドキュメント ページをご覧ください。

Looker による OAuth 用 Snowflake データベースの構成

OAuth を使用して Looker への Snowflake 接続を作成するには、Snowflake で OAuth 統合を設定する必要があります。これには、ACCOUNTADMIN 権限を持つ Snowflake ユーザー アカウントが必要です。

  1. Snowflake で次のコマンドを実行します。ここで、<looker_hostname> は Looker インスタンスのホスト名です。

      CREATE SECURITY INTEGRATION LOOKER
        TYPE = OAUTH
        ENABLED = TRUE
        OAUTH_CLIENT = LOOKER
        OAUTH_REDIRECT_URI = 'https://<looker_hostname>/external_oauth/redirect';
    
  2. 次のコマンドを実行して、OAuth クライアント ID とシークレットを取得します。

      SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('LOOKER');
    

    この手順の後の部分で必要になる OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET がレスポンスに含まれます。

  3. Looker で、Looker をデータベースに接続するのドキュメント ページの説明に沿って、Snowflake ウェアハウスへの新しい接続を作成します。新しい接続の作成時に、認証フィールドの OAuth オプションを選択します。 [OAuth] オプションを選択すると、Looker に [OAuth Client ID] と [OAuth Client Secret] フィールドが表示されます。

  4. この手順の前半でデータベースから取得した OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET の値を貼り付けます。

  5. Looker をデータベースに接続するの残りの手順を完了します。

データベースへの Looker の接続を構成したら、次のいずれかの方法で接続自体をテストできます。

  • データベースへの Looker の接続のドキュメント ページで説明されているように、[接続設定] ページの下部にある [テスト] ボタンを選択します。
  • 接続のドキュメント ページの説明に従って、[接続] 管理ページの接続リストの横にある [Test] ボタンを選択します。

次に、以下の手順で接続をテストし、モデルにデプロイできます。

  1. Looker で Development Mode に移行します。
  2. Snowflake 接続を使用する Looker プロジェクトのプロジェクト ファイルに移動します。
  3. モデルファイルを開き、モデルの connection 値を新しい Snowflake 接続の名前に置き換えて、モデルファイルを保存します。
  4. モデルの Explore またはダッシュボードの一つを開き、クエリを実行します。クエリを実行しようとすると、Looker から Snowflake にログインするように求められます。
  5. Snowflake のログイン プロンプトに従って、Snowflake の認証情報を入力します。

Snowflake に正常にログインすると、Looker からクエリに戻ります。クエリが正しく実行されると、新しい接続値を commit し、変更を本番環境にデプロイできます。

Snowflake にログインしてクエリを実行する

OAuth 用に Snowflake 接続を設定すると、クエリを実行する前にユーザーに対して Snowflake にログインするよう求めるプロンプトが表示されます。これには Explore、ダッシュボード、Look、SQL Runner からのクエリが含まれます。

[アカウント] ページの [OAuth 接続認証情報] セクションから Snowflake にログインすることもできます。

Looker を使用して Snowflake アカウントにログインするには:

  1. Looker ユーザー メニューをクリックします。
  2. アカウントを選択します。
  3. [アカウント] ページで、[OAuth 接続認証情報] セクションまで下にスクロールし、目的の Snowflake データベースの [ログイン] ボタンを選択します。

Snowflake のログイン ポップアップ ウィンドウが表示されます。Snowflake の認証情報を入力して [ログイン] を選択し、[許可] を選択して Looker に Snowflake アカウントへのアクセスを許可します。

Looker を通じて Snowflake にログインした後は、[アカウント] ページでいつでも認証情報からログアウトまたは再認証できます。詳しくは、ユーザー アカウントのカスタマイズ ドキュメント ページをご覧ください。

機能のサポート

一部の機能については、Looker でサポートするには、データベース言語が同じ機能に対応している必要があります。

Snowflake では、Looker 24.8 の時点で、次の機能がサポートされています。

特徴 サポート対象
サポート レベル
サポート対象
Looker(Google Cloud コア)
はい
対称集計
あり
派生テーブル
あり
永続的な SQL 派生テーブル
あり
永続的なネイティブ派生テーブル
あり
安定したビュー
あり
クエリの強制終了
あり
SQL ベースのピボット
あり
タイムゾーン
あり
SSL
あり
Subtotals
あり
JDBC の追加パラメータ
あり
Case Sensitive
あり
ロケーション タイプ
あり
リストのタイプ
あり
パーセンタイル
あり
個別のパーセンタイル
いいえ
SQL Runner の表示プロセス
いいえ
SQL Runner の説明テーブル
あり
SQL Runner 表示インデックス
いいえ
SQL Runner Select 10
あり
SQL ランナーの数
あり
SQL の説明
あり
Oauth 認証情報
あり
コンテキスト コメント
あり
接続プーリング
あり
HLL スケッチ
あり
集計認識
あり
増分PDT
あり
ミリ秒
あり
マイクロ秒
あり
マテリアライズド ビュー
いいえ
Approximate Count Distinct
いいえ

次のステップ

データベースを Looker に接続した後、ユーザーのログイン オプションを構成します