接続情報 - Snowflake

Prev Next

概要

Snowflakeの接続情報を作成するためのDocsです。

なお、Snowflakeを利用する場合、必要な権限が付与されたロールを、あらかじめユーザーに付与しておく必要があります。
詳しくは、後述の権限とロールを参照ください。

入力項目

項目名 必須 内容
名前 Yes TROCCO内部で利用する接続情報の名前を入力します。
メモ No TROCCO内部で利用する接続情報のメモを入力できます。
ホスト Yes Snowflakeのホストを入力します。
詳しくは、ホスト名の入力形式を参照ください。
ユーザー Yes Snowflakeのユーザー名を入力します。
認証方式 Yes 認証方式を選択します。
※ユーザー・パスワード認証は2025年11月から利用できなくなります。キーペア認証をご利用ください。
パスワード Yes 認証方式でユーザー・パスワード認証を選択した場合に入力してください。
Snowflakeのパスワードを入力します。
秘密鍵 Yes 認証方式でキーペア認証を選択した場合に入力します。
Snowflakeの秘密鍵を入力してください。
詳しくは、キーペア認証についてを参照ください。
ロール No ユーザーに付与されているロール名を入力します。
未入力の場合、Snowflakeのデフォルトの設定が利用されます。デフォルトの設定がない場合は、入力する必要があります。
ロールについて、詳しくは権限とロールを参照ください。
JDBCドライバー No Snowflakeサーバーに接続するJDBCドライバーのバージョンを選択できます。
  • 3.14.2
  • 3.17.0
  • 3.24.2
JDBCドライバーのバージョンについて

JDBCドライバーが未指定の場合、それぞれ以下のバージョンが利用されます。

  • 転送元Snowflakeの場合:3.13.5
  • 転送先Snowflakeの場合:3.13.26

ただし、JDBCドライバーの3.13系は2023年10月31日をもってSnowflakeのサポート対象外となります。
そのため、3.14系以上のバージョンの利用を推奨しております。

ホスト名の入力形式

以下のいずれかの形式で入力できます。

  • <LOCATOR>.<REGION>.<CLOUD>.snowflakecomputing.com
    • 入力例:hm*****.ap-northeast-1.aws.snowflakecomputing.com
  • <ORGANIZATION>-<ACCOUNT_NAME>.snowflakecomputing.com
    • 入力例:*******-km*****.snowflakecomputing.com

上記各要素は、Snowflakeのコンソール画面左下より確認できます。
connection-configuration-snowflake_001

キーペア認証について

公開鍵・秘密鍵を生成し、公開鍵をSnowflake側に、秘密鍵をTROCCO側に、設定する必要があります。

公開鍵・秘密鍵の生成

ターミナルにて、以下のコマンドを順に実施してください。

  1. 秘密鍵を作成する
    生成した秘密鍵は、TROCCOのSnowflake接続情報の秘密鍵欄に入力してください。
$ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
秘密鍵の形式について

TROCCOでは、非暗号化された秘密鍵にのみ対応しています。
非暗号化された秘密鍵は上記のコマンドで生成できます。

  1. 公開鍵を生成する
$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
  1. 公開鍵を整形する(改行と不要な箇所の除去)
$ cat rsa_key.pub | \
tr -d "\n" | \
sed "s/-----BEGIN PUBLIC KEY-----//g" | \
sed "s/-----END PUBLIC KEY-----//g"

Snowflakeへの公開鍵の設定

先に作成・整形した公開鍵を踏まえて、Snowflake側で以下クエリを実行してください。

ALTER USER {USERNAME} SET RSA_PUBLIC_KEY='{PUBLIC_KEY}'

権限とロール

Snowflakeを利用するにあたり、ロールに必要な権限を付与し、ユーザーにロールを付与する必要があります。
なお、転送設定(転送元・転送先)とデータマート定義とで、ロールに付与する必要のある権限は異なります。

転送設定(転送元)を利用する場合

必要となる権限

項目 権限 内容
仮想ウェアハウス権限 OPERATE ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
仮想ウェアハウス権限 USAGE 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
データベース権限 USAGE データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
スキーマ権限 USAGE スキーマを使用できるようにします。
テーブル権限 SELECT テーブルでSELECTステートメントを実行できるようにします。

クエリサンプル

以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。

  • 作成するロール:TROCCO_INPUT_ROLE
  • ロールを付与するユーザー:TROCCO_USER
  • 対象ウェアハウス:TROCCO_WAREHOUSE
  • 対象データベース:TROCCO_DATABASE
  • 対象スキーマ:PUBLIC
  • 対象テーブル:TROCCO_TABLE

実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

  • ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    
  • ロールを新規作成する

    CREATE ROLE TROCCO_INPUT_ROLE;
    
  • 指定したユーザーにロールを使用可能にする

    GRANT ROLE TROCCO_INPUT_ROLE TO USER TROCCO_USER;
    
  • ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_INPUT_ROLE;
    
  • ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE;
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_INPUT_ROLE;
    
  • データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_INPUT_ROLE;
    
  • スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE;
    
  • スキーマの全テーブルに対してSELECTクエリを実行可能にする権限をロールに付与する場合

    GRANT SELECT ON ALL TABLES IN SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_INPUT_ROLE;
    
  • 個別のテーブルのみSELECTクエリを実行可能にする権限をロールに付与する場合

    GRANT SELECT on TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_INPUT_ROLE;
    

転送設定(転送先)を利用する場合

必要となる権限

項目 権限 内容 備考
仮想ウェアハウス権限 OPERATE ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
仮想ウェアハウス権限 USAGE 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
データベース権限 USAGE データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
スキーマ権限 USAGE スキーマを使用できるようにします。
スキーマ権限 CREATE TABLE テーブルの複製など、スキーマで新しいテーブルを作成できるようにします。
スキーマ権限 CREATE STAGE ステージの複製など、スキーマで新しいステージを作成できるようにします。
テーブル権限 OWNERSHIP テーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。 転送モードがreplaceの場合、
DROP TABLE クエリを実行するために必要となります。
DROP TABLEクエリを使用するにはテーブルの所有権を持つロールを使用する必要があります。
Snowflake ドキュメント - 使用上の注意
※ すでに存在するテーブルに対して実行する場合のみ必要になります。

クエリサンプル

以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。

  • 作成するロール:TROCCO_OUTPUT_ROLE
  • ロールを付与するユーザー:TROCCO_USER
  • 対象ウェアハウス:TROCCO_WAREHOUSE
  • 対象データベース:TROCCO_DATABASE
  • 対象スキーマ:PUBLIC
  • 対象テーブル:TROCCO_TABLE

実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

  • ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    
  • ロールを新規作成する

    CREATE ROLE TROCCO_OUTPUT_ROLE;
    
  • 指定したユーザーにロールが使えるようにする

    GRANT ROLE TROCCO_OUTPUT_ROLE TO USER TROCCO_USER;
    
  • ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_OUTPUT_ROLE;
    
  • ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE;
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_OUTPUT_ROLE;
    
  • データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_OUTPUT_ROLE;
    
  • スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE;
    
  • テーブル作成の権限をロールに付与する\

    GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_OUTPUT_ROLE;
    
  • ステージの操作の権限をロールに付与する

    GRANT CREATE STAGE on SCHEMA TROCCO_DATABASE.PUBLIC to ROLE TROCCO_OUTPUT_ROLE;
    
  • テーブルの所有権をロールに移行させる

    ※ すでに存在するテーブルに対して実行する場合に必要になります。

    GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_OUTPUT_ROLE;
    

データマート定義を利用する場合

必要となる権限

項目 権限 内容 備考
仮想ウェアハウス権限 OPERATE ウェアハウスの状態(停止、開始、一時停止、再開)を変更し、実行中のクエリを中止できるようにします。
仮想ウェアハウス権限 USAGE 仮想ウェアハウスを使用し、その結果として、ウェアハウスでクエリを実行します。
データベース権限 USAGE データベースを使用できるようにします。データベース内のオブジェクトを表示またはアクションを実行するには、追加の権限が必要です。
スキーマ権限 USAGE スキーマを使用できるようにします。
スキーマ権限 CREATE TABLE テーブルの複製など、スキーマで新しいテーブルを作成できるようにします。
テーブル権限 SELECT テーブルでSELECTステートメントを実行できるようにします。
テーブル権限 INSERT テーブルでINSERTステートメントを実行できるようにします。 書き込みモードが追記の場合、出力先テーブルへデータを登録するために必要となります。
テーブル権限 OWNERSHIP テーブルの所有権を譲渡します。これにより、テーブルに対するフル制御が付与されます。 書き込みモードが全件洗い替えの場合、出力先テーブルの削除を実行するために必要となります。
※ すでに存在するテーブルに対して実行する場合のみ必要になります。

クエリサンプル

以下の条件を例に、ロールに権限を付与するクエリサンプルをご紹介します。

  • 作成するロール:TROCCO_DATAMART_ROLE
  • ロールを付与するユーザー:TROCCO_USER
  • 対象ウェアハウス:TROCCO_WAREHOUSE
  • 対象データベース:TROCCO_DATABASE
  • 対象スキーマ:PUBLIC
  • 対象テーブル:TROCCO_TABLE

実際にロールに権限を付与する場合は、適宜内容を読み替えてください。

  • ロールを作成可能なロールに切り替える

    USE ROLE ACCOUNTADMIN;
    
  • ロールを新規作成する

    CREATE ROLE TROCCO_DATAMART_ROLE;
    
  • 指定したユーザーにロールが使えるようにする

    GRANT ROLE TROCCO_DATAMART_ROLE TO USER TROCCO_USER;
    
  • ユーザーに対し、作成したロールをデフォルトで使用するロールにする

    ALTER USER TROCCO_USER SET DEFAULT_ROLE = TROCCO_DATAMART_ROLE;
    
  • ウェアハウスの利用権限をロールに付与する

    GRANT USAGE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE;
    
    GRANT OPERATE ON WAREHOUSE TROCCO_WAREHOUSE TO ROLE TROCCO_DATAMART_ROLE;
    
  • データベースの利用権限をロールに付与する

    GRANT USAGE ON DATABASE TROCCO_DATABASE TO ROLE TROCCO_DATAMART_ROLE;
    
  • スキーマの利用権限をロールに付与する

    GRANT USAGE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE;
    
  • テーブル作成の権限をロールに付与する

    GRANT CREATE TABLE ON SCHEMA TROCCO_DATABASE.PUBLIC TO ROLE TROCCO_DATAMART_ROLE;
    
  • テーブルへINSERTクエリを実行可能にする権限をロールに付与する

    GRANT INSERT ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE;
    
  • テーブルの所有権をロールに移行させる

    ※ すでに存在するテーブルに対して実行する場合に必要になります。

    GRANT OWNERSHIP ON TABLE TROCCO_DATABASE.PUBLIC.TROCCO_TABLE TO ROLE TROCCO_DATAMART_ROLE;