Snowflake Horizon からメタデータをインポートする

Knowledge Catalog(旧称 Dataplex Universal Catalog)コネクタを使用して、Snowflake Horizon から Google Cloudにメタデータを直接インポートすることで、データサイロを解消し、ツール間の切り替えを回避します。

このコネクタは、Google Cloud、Microsoft Azure、またはアマゾン ウェブ サービス(AWS)でホストされている Snowflake Horizon インスタンスをサポートしています。

次の表に、Snowflake Horizon コネクタがキャプチャするメタデータを示します。

カテゴリ メタデータのキャプチャ
技術
  • メタストア(Snowflake アカウント)
  • カタログ(データベース)
  • スキーマ
  • テーブル(一時テーブル、外部テーブル、動的テーブル、インタラクティブ テーブル、ハイブリッド テーブル、Apache Iceberg テーブルを含む)と列
  • ビュー(標準、マテリアライズド、セキュア)
  • ステージ(内部および外部)。ファイルセットとしてインポートされます。
  • ユーザー定義関数(UDF)とストアド プロシージャ
運用
  • 使用状況の指標(30 日間と 90 日間のビュー、読み取り、書き込み、30 日間の頻繁なユーザーと頻繁に結合されたテーブル)
  • 主キーと外部キー
ビジネス
  • タグ(オブジェクト、列、セマンティック ビュー メンバーのタグ)
  • データ品質(データ指標関数の期待値、異常検出、自動データ品質モニタリングの結果)
  • データ プロファイリング(データ指標関数の測定値とデータ分類の結果)
  • 結合と関係(クエリ履歴から推論、セマンティック ビューで宣言、ビューからテーブルへの依存関係)
  • オーナー(所有ロール)、作成日時、最終変更日時
Semantic
  • セマンティック ビュー(論理テーブル、ディメンション、ファクト、指標、関係、類義語、サンプル値、カスタム指示)
  • セマンティック ビューのオーナー
  • セマンティック ビューの使用状況(30 日間と 90 日間のビューと読み取り、30 日間の頻繁なユーザーと頻繁に結合されたテーブル)

制限事項

Snowflake Horizon コネクタには次の制限があります。

  • リネージはサポートされていません。
  • コネクタは Iceberg テーブルのメタデータをインポートしますが、このメタデータを Iceberg REST Catalog(IRC)の基盤となる物理テーブルに自動的にリンクすることはありません。
  • タグ、データ品質とプロファイリングの結果、分類結果、クエリ履歴の結合、ACCESS_HISTORY を読み取る使用状況の分析情報(頻繁に利用するユーザーと頻繁に結合されるテーブル)には、Snowflake Enterprise Edition 以降が必要です。

始める前に

Snowflake Horizon からメタデータをインポートする前に、次のタスクを完了します。

  1. 必要なロールと権限を付与します。
  2. Dataplex API と BigQuery Data Transfer Service API を有効にします。
  3. Snowflake Horizon の前提条件を満たします。
  4. ネットワークの前提条件を満たします。

IAM のロールと権限

Knowledge Catalog コネクタジョブを作成して管理するには、Knowledge Catalog と BigQuery Data Transfer Service の権限を付与する Identity and Access Management(IAM)ロールが必要です。

Snowflake Horizon コネクタの構成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

また、BigQuery Data Transfer Service サービス エージェント(service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com)に次の両方のロールを付与する必要があります。

  • 宛先エントリ グループまたはそれを含むプロジェクトに対する Dataplex エントリ グループ インポータ(roles/dataplex.entryGroupImporter)。このロールにより、サービス エージェントはメタデータをエントリ グループ(dataplex.entryGroups.import)にインポートできます。
  • 宛先エントリ グループを含むプロジェクトに対する Dataplex エントリ / エントリリンク オーナー(roles/dataplex.entryOwner)。このロールにより、サービス エージェントは使用状況、ビジネス、データ品質のメタデータとエントリリンクをインポートできます。このロールに含まれる権限は以下のとおりです。

    • dataplex.entryGroups.useDataProfileAspect
    • dataplex.entryGroups.useDataQualityScorecardAspect
    • dataplex.entryGroups.useManagedConnectorTypes
    • dataplex.entryGroups.useReferenceEntryLink
    • dataplex.entryGroups.useSchemaAspect
    • dataplex.entryGroups.useSchemaJoinAspect
    • dataplex.entryGroups.useSchemaJoinEntryLink
    • dataplex.entryGroups.useUsageAspect
    • dataplex.entryLinks.reference

    インポートではプロジェクトの dataplex.entryLinks.reference 権限がチェックされるため、エントリ グループだけでなく、プロジェクトでもこのロールを付与します。サービス エージェントにプロジェクトに対するこの権限がない場合、転送実行は Permission 'dataplex.entryLinks.reference' denied などのエラーで失敗し、メタデータはインポートされません。

これらのロールを両方付与する代わりに、宛先エントリ グループを含むプロジェクトに Dataplex エントリ グループ オーナー(roles/dataplex.entryGroupOwner)ロールを付与することもできます。このロールには、両方のロールの権限が含まれています。また、サービス エージェントは、プロジェクト内のすべてのエントリ グループを作成、削除、管理できます。

ロールの付与の詳細については、アクセスの管理をご覧ください。

API を有効にする

Dataplex API と BigQuery Data Transfer Service API を有効にします。

API を有効にする

Snowflake Horizon の前提条件

リモート Snowflake カタログに対して SQL クエリまたは Spark ジョブを実行する場合は、Snowflake Horizon カタログのクロスクラウド接続を設定するをご覧ください。

コネクタは、鍵ペア認証を使用して Snowflake ユーザーとして Snowflake にログインし、SNOWFLAKE.ACCOUNT_USAGE スキーマからメタデータを読み取ります。パスワード認証はサポートされていません。Snowflake 管理者(ACCOUNTADMIN ロールを持つユーザーなど)は、次の手順を完了する必要があります。

  1. コネクタのロールを作成し、ACCOUNT_USAGE とメタデータ クエリを実行するウェアハウスへのアクセス権を付与します。

    CREATE ROLE IF NOT EXISTS DATAPLEX_CATALOG_READER;
    GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE
      TO ROLE DATAPLEX_CATALOG_READER;
    GRANT USAGE ON WAREHOUSE WAREHOUSE_NAME
      TO ROLE DATAPLEX_CATALOG_READER;
    

    WAREHOUSE_NAME は、メタデータ クエリを実行する Snowflake ウェアハウスの名前に置き換えます。

  2. コネクタのサービス ユーザーを作成するか、既存のユーザーを使用して、ロールを付与します。

    CREATE USER IF NOT EXISTS USERNAME
      TYPE = SERVICE
      DEFAULT_ROLE = DATAPLEX_CATALOG_READER
      DEFAULT_WAREHOUSE = WAREHOUSE_NAME;
    GRANT ROLE DATAPLEX_CATALOG_READER TO USER USERNAME;
    

    USERNAME は、コネクタの Snowflake ユーザーの名前に置き換えます。

  3. PKCS#8 形式の秘密鍵を使用して RSA 鍵ペアを生成します。

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
    

    秘密鍵を暗号化するには、-nocrypt を -v2 aes-256-cbc に置き換え、コネクタの構成時にパスフレーズを指定します。秘密鍵ファイル(rsa_key.p8)は、コネクタの構成時に指定するため、安全に保管してください。

  4. 公開鍵を Snowflake ユーザーに割り当てます。

    ALTER USER USERNAME SET RSA_PUBLIC_KEY='PUBLIC_KEY';
    

    PUBLIC_KEY は、rsa_key.pub の内容に置き換えます。ただし、-----BEGIN PUBLIC KEY----- 行と -----END PUBLIC KEY----- 行は除きます。

  5. 省略可: 追加のメタデータをインポートするには、コネクタロールに次の権限を付与します。

    • データ プロファイルとデータ品質の結果: SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER アプリケーション ロールを付与します。

      GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER
        TO ROLE DATAPLEX_CATALOG_READER;
      

      データ品質の結果は、ロールが表示できるチェックに対してのみインポートされます。これには、データベースとスキーマに対する USAGE、テーブルに対する SELECT、カスタムデータ指標関数に対する USAGE が必要です。

    • 主キーと外部キー: データベースとスキーマに対する USAGE、テーブルに対する SELECT または REFERENCES を付与します。

    • セマンティック ビューのサンプル値とカスタム指示: セマンティック ビューに対する REFERENCES。

コネクタの構成時に入力するアカウント ID を確認するには、Snowflake で次のクエリを実行します。

SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();

ネットワーキングの前提事項

BigQuery Data Transfer Service がプライベート ネットワーク内のプライベート IP アドレスを使用して外部データベースまたはサードパーティのクラウド データソースに安全に接続できるようにするには、Private Service Connect を介してネットワーク アタッチメントを構成します。

パブリック IP アドレスを使用してオンプレミス環境またはクラウドホスト型インスタンスに接続する場合、ネットワーク アタッチメントは必要ありません。

Snowflake Horizon コネクタを構成する

Google Cloud コンソールまたは REST API を使用して Snowflake Horizon コネクタを構成します。

コンソール

  1. Google Cloud コンソールで、Knowledge Catalog ページに移動します。

    Knowledge Catalog に移動

  2. ナビゲーション メニューの [管理] セクションで、[コネクタ] をクリックし、[接続を追加] をクリックします。

  3. [コネクタ] リストで、[Snowflake Horizon] カードを選択します。

  4. [データソースの詳細] セクションで、Snowflake アカウントの接続の詳細を指定します。

    • [ネットワーク アタッチメント] で、必要に応じて既存のネットワーク アタッチメントを選択するか、作成します。
    • [Account Identifier] に、.snowflakecomputing.com を含まない Snowflake アカウント識別子(myorg-myaccount など)を入力します。アカウント ロケータ(xy12345.us-east-2.aws など)を入力することもできます。
    • [ユーザー名] に、鍵ペア認証用に構成した Snowflake ユーザーを入力します。
    • [秘密鍵] に、ユーザーの PKCS#8 秘密鍵(rsa_key.p8 ファイルの内容など)を入力します。
    • 省略可: [秘密鍵のパスフレーズ] で、秘密鍵が暗号化されている場合は、そのパスフレーズを入力します。
    • 省略可: [ウェアハウス] に、メタデータ クエリを実行するウェアハウスを入力します。ウェアハウスを指定しない場合、コネクタはユーザーのデフォルトのウェアハウスを使用します。
    • 省略可: [ロール] に、コネクタが使用するロール(DATAPLEX_CATALOG_READER など)を入力します。ロールを指定しない場合、コネクタはユーザーのデフォルトのロールを使用します。
    • [転送する Snowflake オブジェクト] で、[参照] をクリックして、インポートするデータベース、スキーマ、または個々のオブジェクト(テーブル、ビュー、セマンティック ビュー、ステージ、関数、プロシージャ)を選択します。データベースまたはスキーマを選択すると、その中のすべてのオブジェクトがインポートされます。関数とプロシージャは、CALC(NUMBER, VARCHAR) などの引数タイプとともに一覧表示されます。

      オブジェクトを手動で TYPE:ACCOUNT/DATABASE[/SCHEMA[/OBJECT]] 形式で入力することもできます。ここで、TYPE は CATALOG(または DATABASE)、SCHEMA、TABLE、VIEW、SEMANTIC-MODEL、FILESET、FUNCTION、または PROCEDURE(例: SCHEMA:myorg-myaccount/SALES/PUBLIC)です。ACCOUNT は、[参照] に表示される小文字の ORG_NAME-ACCOUNT_NAME 形式で入力します。データベース、スキーマ、オブジェクトの名前では大文字と小文字が区別されます。名前パターンはサポートされていません。

  5. [宛先の設定] セクションで、次の操作を行います。

    • [参照] をクリックして、インポートしたメタデータを保存する既存の Knowledge Catalog エントリ グループを選択するか、[新しいエントリ グループを作成] をクリックします。
    • エントリ グループの権限を今すぐ設定するか、後で設定するかを選択します。ユーザーがインポートされたメタデータを表示できるようにするには、エントリ グループに権限を設定します。プロジェクト レベルで BigQuery Data Transfer Service サービス エージェントに Dataplex エントリ グループ インポータ(roles/dataplex.entryGroupImporter)ロールまたは dataplex.entryGroups.import 権限を付与していない場合は、このエントリ グループに付与します。dataplex.entryLinks.reference 権限はプロジェクト レベルで確認されるため、プロジェクトに対する Dataplex エントリ / エントリリンク オーナー(roles/dataplex.entryOwner)ロールを付与する必要があります。詳細については、IAM のロールと権限をご覧ください。
  6. [転送構成名] セクションの [表示名] に、メタデータのインポート ジョブの名前を入力します。

  7. [スケジュール オプション] セクションで、メタデータ インポート ジョブの頻度を構成します。[オンデマンド] を選択した場合、ジョブは手動でトリガーした場合にのみ実行されます。

  8. 省略可: [通知オプション] セクションで、ジョブの失敗に関するメール通知または Pub/Sub 通知を構成します。

  9. 省略可: [詳細オプション] セクションで、暗号化設定を構成します。顧客管理の暗号鍵(CMEK)を選択すると、Knowledge Catalog メタデータ インポート ジョブを開始する前にステージングされた一時データが鍵によって暗号化されます。この鍵は、宛先の Knowledge Catalog エントリ グループのメタデータを暗号化しません。

  10. [保存] をクリックします。

REST

projects.locations.transferConfigs.create メソッドを使用します。TransferConfig リソースで、次のフィールドを構成します。

  • dataSourceId フィールドを "snowflake_horizon" に設定します。
  • metadataDestination フィールドの dataplexConfiguration.entryGroup フィールドに、ターゲット Knowledge Catalog エントリ グループのリソースパス(projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID)を入力します。
  • params フィールドで、次のパラメータを設定します。
    • connector.accountIdentifier(必須): .snowflakecomputing.com のない Snowflake アカウント識別子(例: myorg-myaccount)またはアカウント ロケータ(xy12345.us-east-2.aws など)。
    • connector.authentication.username(必須): Snowflake ユーザー。
    • connector.authentication.privateKey(必須): PKCS#8 PEM 形式のユーザーの秘密鍵。
    • connector.authentication.privateKeyPassphrase(省略可): 秘密鍵のパスフレーズ(鍵が暗号化されている場合)。
    • connector.warehouse(省略可): メタデータ クエリを実行するウェアハウス。このパラメータを省略すると、コネクタはユーザーのデフォルトのウェアハウスを使用します。
    • connector.role(省略可): コネクタが使用するロール。このパラメータを省略すると、コネクタはユーザーのデフォルトのロールを使用します。
    • connector.networkAttachment(省略可): projects/PROJECT_ID/regions/REGION/networkAttachments/NETWORK_ATTACHMENT_ID 形式のネットワーク アタッチメント。
    • assets(必須): インポートする Snowflake オブジェクトのリスト。TYPE:ACCOUNT/DATABASE[/SCHEMA[/OBJECT]] 形式(["SCHEMA:myorg-myaccount/SALES/PUBLIC"] など)で指定します。
  • 省略可: 秘密鍵を転送構成から除外するには、Secret Manager に保存します。
    1. connector.authentication.privateKey(および connector.authentication.privateKeyPassphrase(使用する場合))を projects/SECRET_PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID 形式のシークレット バージョンのリソース名に設定し、これらのパラメータ名を paramConfig.secretManagerManagedParams フィールドに追加します。
    2. 各シークレットに対する Secret Manager シークレット アクセサー(roles/secretmanager.secretAccessor)ロールを、転送構成(service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com)を含むプロジェクトの BigQuery Data Transfer Service サービス エージェントに付与します。シークレットは別のプロジェクトに存在してもかまいません。サービス エージェントがシークレットを読み取れない場合、実行は開始前に失敗し、Failed to retrieve secret ... Permission 'secretmanager.versions.access' denied などのエラーが発生します。BigQuery Data Transfer Service は、各実行の開始時にシークレットを読み取ります。したがって、VERSION_ID を latest に設定すると、次の実行からローテーションされた鍵が使用されます。

次の例は、TransferConfig リクエスト本文を示しています。

{
  "displayName": "snowflake-metadata-import",
  "dataSourceId": "snowflake_horizon",
  "schedule": "every 24 hours",
  "params": {
    "connector.accountIdentifier": "myorg-myaccount",
    "connector.authentication.username": "USERNAME",
    "connector.authentication.privateKey": "PRIVATE_KEY",
    "connector.warehouse": "WAREHOUSE_NAME",
    "connector.role": "DATAPLEX_CATALOG_READER",
    "assets": [
      "SCHEMA:myorg-myaccount/SALES/PUBLIC"
    ]
  },
  "metadataDestination": {
    "dataplexConfiguration": {
      "entryGroup": "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID"
    }
  }
}

ジョブはスケジュールに基づいて自動的に実行されます。また、手動でトリガーすることもできます。

Snowflake Horizon コネクタジョブをモニタリングする

Google Cloud コンソールまたは REST API を使用して、Snowflake Horizon コネクタジョブをモニタリングします。

コンソール

  1. Google Cloud コンソールの [コネクタ] ページで、Snowflake Horizon 転送ジョブの [表示名] をクリックします。
  2. [実行履歴] タブで、[詳細を表示] をクリックしてログを表示します。
  3. 作成されたエントリを表示するには、[詳細] タブをクリックし、[メタデータの宛先] エントリ グループのリンクをクリックします。

REST

  • 転送構成の実行を一覧表示してその状態を表示するには、projects.locations.transferConfigs.runs.list メソッドを使用します。
  • 各実行では、ID が dts-run-RUN_ID のメタデータ インポート ジョブを使用して、収集されたメタデータを Knowledge Catalog にインポートします。作成されたエントリの数など、インポートの結果を表示するには、次のクエリを使用して Logging でジョブのログをフィルタします。

    logName="projects/PROJECT_ID/logs/dataplex.googleapis.com%2Fmetadata_job"
    AND resource.labels.metadata_job_id="dts-run-RUN_ID"
    
  • Logging を使用せずにインポートの結果を表示するには、projects/PROJECT_ID/locations/LOCATION/metadataJobs/dts-run-RUN_ID で projects.locations.metadataJobs.get メソッドを呼び出します。importResult フィールドには、作成、更新、変更なし、削除されたエントリとエントリリンクの数が表示されます。

Snowflake Horizon メタデータを検索して表示する

  1. Google Cloud コンソールで、Knowledge Catalog の [検索] ページに移動します。

    [検索] に移動

  2. [フィルタ] パネルで、[プロジェクト]、[システム]、[タイプ エイリアス] セクションを使用して、Snowflake Horizon アセットをフィルタします。すべての Snowflake Horizon メタデータをフィルタするには、[システム] セクションで [インポートされたコンテキスト] を選択し、[マネージド コネクタ] サブセクションで [Snowflake Horizon] を選択します。

  3. 検索フィールドに、キーワードまたは自然言語検索クエリを入力します。たとえば、キーワード検索ですべての Snowflake Horizon アセットを表示するには、「system=SNOWFLAKE」と入力します。

    リソースの検索の詳細については、Knowledge Catalog でリソースを検索するをご覧ください。検索フィールドで使用できる式の詳細については、Knowledge Catalog の検索構文をご覧ください。

LookupContext API を使用して、特定の Snowflake Horizon リソースの LLM コンテキストを取得することもできます。詳細については、データアセットのコンテキストを取得するをご覧ください。

次のステップ