メタデータを同期する(Snowflake)

SnowflakeからMashuへメタデータを同期するための設定手順と、必要なSnowflake側の権限について説明します

1. メタデータソースの作成

Snowflakeのメタデータを同期するために、タイプとして「Snowflake」を選択してデータソースを作成します。

2. Snowflake側の設定

MashuがSnowflakeからメタデータを同期したり、データをプレビューするためには、接続に使用するロールに対して、適切な権限が付与されている必要があります。以下の手順でSnowflakeに必要な権限を設定ます。

2.1. 秘密鍵と公開鍵のペアを生成する

まず、Snowflakeへの接続認証に使用するキーペアを作成します。

1. 秘密鍵の生成
秘密鍵は、2048ビット以上のRSA暗号かつPEM形式、非暗号化バージョンである必要があります。以下のコマンドで生成します。。

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt

2. 公開鍵の生成
次に、作成した秘密鍵から公開鍵を生成します。

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

2.2. Snowflakeユーザーに公開鍵を割り当てる

ALTER USERコマンドを実行して、生成した公開鍵をSnowflakeユーザーに割り当てます。 公開鍵ファイル(rsa_key.pub)の内容から、-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----の行を除いた、文字列を貼り付けてください。

ALTER USER <ユーザー名> SET RSA_PUBLIC_KEY='<公開鍵>';

2.3. ロールの作成とユーザーへの付与

Mashuが使用する専用のロールを作成し、ユーザーに付与します。

--- 1. ロールを作成

CREATE ROLE IF NOT EXISTS <ロール名>;

-- 2. 作成したロールをユーザーに付与

GRANT ROLE <ロール名> TO USER <ユーザー名>;

2.4. 基本的な利用権限の付与

作成したロールに対して、各オブジェクトを利用するための基本的なUSAGE権限を付与します。

-- データウェアハウスの利用権限

GRANT USAGE ON WAREHOUSE <ウェアハウス名> TO ROLE <ロール名>;

-- データベースの利用権限

GRANT USAGE ON DATABASE <データベース名> TO ROLE <ロール名>;

-- スキーマの利用権限

GRANT USAGE ON SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

2.5. 各オブジェクトへのSELECT権限の付与

メタデータの同期やプレビューのために、テーブルやビューなどのオブジェクトに対するSELECT権限を付与します。

【重要】 権限付与は、既存のオブジェクト (ALL)将来作成されるオブジェクト (FUTURE) の両方に対して行う必要があります。

 

テーブル (TABLE) へのSELECT権限(ハイブリッドテーブルも含みます)

データベースレベルでの権限付与

-- 既存の全テーブルに権限を付与

GRANT SELECT ON ALL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

-- 将来作成される全テーブルに権限を付与

GRANT SELECT ON FUTURE TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

スキーマレベルでの権限付与

-- 既存の全テーブルに権限を付与

GRANT SELECT ON ALL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

-- 将来作成される全テーブルに権限を付与

GRANT SELECT ON FUTURE TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

 

動的テーブル (DYNAMIC TABLE) へのSELECT権限

データベースレベルでの権限付与

-- 既存の全動的テーブルに権限を付与

GRANT SELECT ON ALL DYNAMIC TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

-- 将来作成される全動的テーブルに権限を付与

GRANT SELECT ON FUTURE DYNAMIC TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

スキーマレベルでの権限付与

-- 既存の全動的テーブルに権限を付与

GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

-- 将来作成される全動的テーブルに権限を付与

GRANT SELECT ON FUTURE DYNAMIC TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

 

Icebergテーブル (ICEBERG TABLE) へのSELECT権限

データベースレベルでの権限付与

-- 既存の全外部テーブルに権限を付与

GRANT SELECT ON ALL EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

-- 将来作成される全外部テーブルに権限を付与

GRANT SELECT ON FUTURE EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

スキーマレベルでの権限付与

-- 既存の全外部テーブルに権限を付与

GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

-- 将来作成される全外部テーブルに権限を付与

GRANT SELECT ON FUTURE EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

 

外部テーブル (EXTERNAL TABLE) へのSELECT権限

データベースレベルでの権限付与

-- 既存の全外部テーブルに権限を付与

GRANT SELECT ON ALL EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

-- 将来作成される全外部テーブルに権限を付与

GRANT SELECT ON FUTURE EXTERNAL TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

スキーマレベルでの権限付与

-- 既存の全外部テーブルに権限を付与

GRANT SELECT ON ALL EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

-- 将来作成される全外部テーブルに権限を付与

GRANT SELECT ON FUTURE EXTERNAL TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

 

イベントテーブル (EVENT TABLE) へのSELECT権限

データベースレベルでの権限付与

-- 既存の全イベントテーブルに権限を付与

GRANT SELECT ON ALL EVENT TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

-- 将来作成される全イベントテーブルに権限を付与

GRANT SELECT ON FUTURE EVENT TABLES IN DATABASE <データベース名> TO ROLE <ロール名>;

スキーマレベルでの権限付与

-- 既存の全イベントテーブルに権限を付与

GRANT SELECT ON ALL EVENT TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

-- 将来作成される全イベントテーブルに権限を付与

GRANT SELECT ON FUTURE EVENT TABLES IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

ビュー (VIEW) への権限

ビューに対する権限は、「ビューの定義(元となるSQL)を同期する必要があるか」と「ビューの定義を同期する必要がないか」で、付与すべき権限が大きく異なります。

1. ビューの定義(SQL)を参照する権限 ビューの元となるSQLを参照するには、そのビューの所有者(OWNER)である必要があります。最も安全な方法は、ビューを所有しているロールを継承することです。ビューの所有者を変更する方法もありますが推奨されません。

-- ビュー所有者ロールの権限を、ロールに付与する(推奨)

GRANT ROLE <ビュー所有者のロール名> TO ROLE <ロール名>

2. ビューの結果データを参照する権限 (SELECT) ビューの定義は不要でそれ以外のメタデータを同期したい場合は、SELECT権限のみを付与します。

-- データベースレベル

GRANT SELECT ON ALL VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;

GRANT SELECT ON FUTURE VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;

-- スキーマレベル

GRANT SELECT ON ALL VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

GRANT SELECT ON FUTURE VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

マテリアライズドビュー (MATERIARIZED VIEW) への権限

マテリアライズドビューに対する権限は、「マテリアライズドビューの定義(元となるSQL)を同期する必要があるか」と「マテリアライズドビューの定義を同期する必要がないか」で、付与すべき権限が大きく異なります。

1. マテリアライズドビューの定義(SQL)を参照する権限 ビューの元となるSQLを参照するには、そのマテリアライズドビューの所有者(OWNER)である必要があります。最も安全な方法は、マテリアライズドビューを所有しているロールを継承することです。マテリアライズドビューの所有者を変更する方法もありますが推奨されません。

-- マテリアライズドビュー所有者ロールの権限を、ロールに付与する(推奨)

GRANT ROLE <マテリアライズドビュー所有者のロール名> TO ROLE <ロール名>

2. マテリアライズドビューの結果データを参照する権限 (SELECT) マテリアライズドビューの定義は不要でそれ以外のメタデータを同期したい場合は、SELECT権限のみを付与します。

-- データベースレベル

GRANT SELECT ON ALL MATERIALIZED VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;

GRANT SELECT ON FUTURE MATERIALIZED VIEWS IN DATABASE <データベース名> TO ROLE <ロール名>;

-- スキーマレベル

GRANT SELECT ON ALL MATERIALIZED VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

GRANT SELECT ON FUTURE MATERIALIZED VIEWS IN SCHEMA <データベース名>.<スキーマ名> TO ROLE <ロール名>;

3. 接続情報設定

データソース画面の「接続設定」タブで、Snowflakeへの接続情報を設定します。

  • 組織名: Snowflakeの組織名を指定します。

  • アカウント名: Snowflakeのアカウント名を指定します。

    • 組織名とアカウント名は、Snowsightの左下ユーザーメニュー → 「アカウントを切り替える」のホバーで表示されるURLなどから確認できます。

      タイトルなし-1

  • ユーザー名:  手順2.2 で公開鍵を割り当てたユーザー名を指定します。

  • データベース名: 接続するSnowflakeデータベース名を指定します。

  • ウェアハウス名: メタデータ同期クエリを実行するウェアハウス名を指定します。

  • ロール名: 手順2.3で作成したロール名を指定します。指定しない場合、ユーザーの既定ロールが使用され、それもなければPUBLICロールが使用されます。
  • 秘密鍵: 手順2.1で作成した秘密鍵ファイル(rsa_key.p8)の内容を、-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----の行も含めて、そのまま貼り付けてください。

「保存する」ボタンを押下して接続情報を保存します。

4. スキーマ選択

正しい接続設定の保存に成功すると、指定したデータベース内のスキーマ一覧が表示されます。メタデータ同期したいスキーマを選択してください。

5. データソース設定(メタデータ同期オプション)

「データソース設定」タブでは、メタデータの同期に関する3つのオプション(マッピング、マージ、同期対象)を設定します。

1. マッピング設定
SnowflakeのDBコメントを、Mashuのメタデータのどの項目にマッピングするかを選択します。

  • エイリアス: DBコメントを「エイリアス」にマッピングします。
  • 説明: DBコメントを「説明」にマッピングします。
  • エイリアスと説明: DBコメントを「エイリアス」と「説明」の両方にマッピングします。

 

2. メタデータマージ設定
2回目以降の同期時に、SnowflakeのDBコメントでMashu上の「エイリアス」と「説明」を上書きする際のルールを設定します。
  • チェックがONの場合(デフォルト): DBコメントに値が存在すれば、Mashu側の既存の値を常にその値で上書きします。

  • チェックがOFFの場合: Mashu側の「エイリアス」や「説明」が空の場合にのみ、DBコメントで補完します。既に値が入力されている場合は変更されません。

 

3. 同期対象設定
Snowflakeから同期するオブジェクトの種類を選択します。チェックを外した種類のオブジェクトは同期されません。

  • テーブル: 標準テーブル、外部テーブル、Icebergテーブル、動的テーブルなどが含まれます。
  • ビュー: 標準のビューです。
  • マテリアライズドビュー: マテリアライズドビューです。

6. メタデータの同期実行

「メタデータ」タブに移動し、「メタデータ同期」ボタンをクリックすることで、Snowflakeからのメタデータ同期が開始されます。