Knowledge Catalog(旧称 Dataplex Universal Catalog)コネクタを使用して、Snowflake Horizon から Google Cloudにメタデータを直接インポートすることで、データサイロを解消し、ツール間の切り替えを回避します。
このコネクタは、Google Cloud、Microsoft Azure、またはアマゾン ウェブ サービス(AWS)でホストされている Snowflake Horizon インスタンスをサポートしています。
次の表に、Snowflake Horizon コネクタがキャプチャするメタデータを示します。
| カテゴリ | メタデータのキャプチャ |
|---|---|
| 技術 |
|
| 運用 |
|
| ビジネス |
|
| Semantic |
|
制限事項
Snowflake Horizon コネクタには次の制限があります。
- リネージはサポートされていません。
- コネクタは Iceberg テーブルのメタデータをインポートしますが、このメタデータを Iceberg REST Catalog(IRC)の基盤となる物理テーブルに自動的にリンクすることはありません。
- タグ、データ品質とプロファイリングの結果、分類結果、クエリ履歴の結合、
ACCESS_HISTORYを読み取る使用状況の分析情報(頻繁に利用するユーザーと頻繁に結合されるテーブル)には、Snowflake Enterprise Edition 以降が必要です。
始める前に
Snowflake Horizon からメタデータをインポートする前に、次のタスクを完了します。
- 必要なロールと権限を付与します。
- Dataplex API と BigQuery Data Transfer Service API を有効にします。
- Snowflake Horizon の前提条件を満たします。
- ネットワークの前提条件を満たします。
IAM のロールと権限
Knowledge Catalog コネクタジョブを作成して管理するには、Knowledge Catalog と BigQuery Data Transfer Service の権限を付与する Identity and Access Management(IAM)ロールが必要です。
Snowflake Horizon コネクタの構成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- エントリ グループを作成、管理するには: プロジェクトに対する Dataplex Catalog 管理者(
roles/dataplex.catalogAdmin)、Dataplex Catalog 編集者(roles/dataplex.catalogEditor)、または Dataplex エントリ グループ オーナー(roles/dataplex.entryGroupOwner)。 - Snowflake Horizon メタデータを表示するには: プロジェクトに対する Dataplex Catalog 閲覧者(
roles/dataplex.catalogViewer)。 - BigQuery Data Transfer Service 転送ジョブを作成して管理する: プロジェクトに対する BigQuery 管理者(
roles/bigquery.admin)。 - Cloud Logging でログを表示するには: プロジェクトに対するログビューア(
roles/logging.viewer)。
また、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.useDataProfileAspectdataplex.entryGroups.useDataQualityScorecardAspectdataplex.entryGroups.useManagedConnectorTypesdataplex.entryGroups.useReferenceEntryLinkdataplex.entryGroups.useSchemaAspectdataplex.entryGroups.useSchemaJoinAspectdataplex.entryGroups.useSchemaJoinEntryLinkdataplex.entryGroups.useUsageAspectdataplex.entryLinks.reference
インポートではプロジェクトの
dataplex.entryLinks.reference権限がチェックされるため、エントリ グループだけでなく、プロジェクトでもこのロールを付与します。サービス エージェントにプロジェクトに対するこの権限がない場合、転送実行はPermission 'dataplex.entryLinks.reference' deniedなどのエラーで失敗し、メタデータはインポートされません。
これらのロールを両方付与する代わりに、宛先エントリ グループを含むプロジェクトに Dataplex エントリ グループ オーナー(roles/dataplex.entryGroupOwner)ロールを付与することもできます。このロールには、両方のロールの権限が含まれています。また、サービス エージェントは、プロジェクト内のすべてのエントリ グループを作成、削除、管理できます。
ロールの付与の詳細については、アクセスの管理をご覧ください。
API を有効にする
Dataplex API と BigQuery Data Transfer Service API を有効にします。
Snowflake Horizon の前提条件
リモート Snowflake カタログに対して SQL クエリまたは Spark ジョブを実行する場合は、Snowflake Horizon カタログのクロスクラウド接続を設定するをご覧ください。
コネクタは、鍵ペア認証を使用して Snowflake ユーザーとして Snowflake にログインし、SNOWFLAKE.ACCOUNT_USAGE スキーマからメタデータを読み取ります。パスワード認証はサポートされていません。Snowflake 管理者(ACCOUNTADMIN ロールを持つユーザーなど)は、次の手順を完了する必要があります。
コネクタのロールを作成し、
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 ウェアハウスの名前に置き換えます。コネクタのサービス ユーザーを作成するか、既存のユーザーを使用して、ロールを付与します。
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 ユーザーの名前に置き換えます。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)は、コネクタの構成時に指定するため、安全に保管してください。公開鍵を Snowflake ユーザーに割り当てます。
ALTER USER USERNAME SET RSA_PUBLIC_KEY='PUBLIC_KEY';PUBLIC_KEYは、rsa_key.pubの内容に置き換えます。ただし、-----BEGIN PUBLIC KEY-----行と-----END PUBLIC KEY-----行は除きます。省略可: 追加のメタデータをインポートするには、コネクタロールに次の権限を付与します。
データ プロファイルとデータ品質の結果:
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 コネクタを構成します。
コンソール
Google Cloud コンソールで、Knowledge Catalog ページに移動します。
ナビゲーション メニューの [管理] セクションで、[コネクタ] をクリックし、[接続を追加] をクリックします。
[コネクタ] リストで、[Snowflake Horizon] カードを選択します。
[データソースの詳細] セクションで、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形式で入力します。データベース、スキーマ、オブジェクトの名前では大文字と小文字が区別されます。名前パターンはサポートされていません。
[宛先の設定] セクションで、次の操作を行います。
- [参照] をクリックして、インポートしたメタデータを保存する既存の Knowledge Catalog エントリ グループを選択するか、[新しいエントリ グループを作成] をクリックします。
- エントリ グループの権限を今すぐ設定するか、後で設定するかを選択します。ユーザーがインポートされたメタデータを表示できるようにするには、エントリ グループに権限を設定します。プロジェクト レベルで BigQuery Data Transfer Service サービス エージェントに Dataplex エントリ グループ インポータ(
roles/dataplex.entryGroupImporter)ロールまたはdataplex.entryGroups.import権限を付与していない場合は、このエントリ グループに付与します。dataplex.entryLinks.reference権限はプロジェクト レベルで確認されるため、プロジェクトに対する Dataplex エントリ / エントリリンク オーナー(roles/dataplex.entryOwner)ロールを付与する必要があります。詳細については、IAM のロールと権限をご覧ください。
[転送構成名] セクションの [表示名] に、メタデータのインポート ジョブの名前を入力します。
[スケジュール オプション] セクションで、メタデータ インポート ジョブの頻度を構成します。[オンデマンド] を選択した場合、ジョブは手動でトリガーした場合にのみ実行されます。
省略可: [通知オプション] セクションで、ジョブの失敗に関するメール通知または Pub/Sub 通知を構成します。
省略可: [詳細オプション] セクションで、暗号化設定を構成します。顧客管理の暗号鍵(CMEK)を選択すると、Knowledge Catalog メタデータ インポート ジョブを開始する前にステージングされた一時データが鍵によって暗号化されます。この鍵は、宛先の Knowledge Catalog エントリ グループのメタデータを暗号化しません。
[保存] をクリックします。
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 に保存します。
connector.authentication.privateKey(およびconnector.authentication.privateKeyPassphrase(使用する場合))をprojects/SECRET_PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID形式のシークレット バージョンのリソース名に設定し、これらのパラメータ名をparamConfig.secretManagerManagedParamsフィールドに追加します。- 各シークレットに対する 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 コネクタジョブをモニタリングします。
コンソール
- Google Cloud コンソールの [コネクタ] ページで、Snowflake Horizon 転送ジョブの [表示名] をクリックします。
- [実行履歴] タブで、[詳細を表示] をクリックしてログを表示します。
- 作成されたエントリを表示するには、[詳細] タブをクリックし、[メタデータの宛先] エントリ グループのリンクをクリックします。
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 メタデータを検索して表示する
Google Cloud コンソールで、Knowledge Catalog の [検索] ページに移動します。
[フィルタ] パネルで、[プロジェクト]、[システム]、[タイプ エイリアス] セクションを使用して、Snowflake Horizon アセットをフィルタします。すべての Snowflake Horizon メタデータをフィルタするには、[システム] セクションで [インポートされたコンテキスト] を選択し、[マネージド コネクタ] サブセクションで [Snowflake Horizon] を選択します。
検索フィールドに、キーワードまたは自然言語検索クエリを入力します。たとえば、キーワード検索ですべての Snowflake Horizon アセットを表示するには、「
system=SNOWFLAKE」と入力します。リソースの検索の詳細については、Knowledge Catalog でリソースを検索するをご覧ください。検索フィールドで使用できる式の詳細については、Knowledge Catalog の検索構文をご覧ください。
LookupContext API を使用して、特定の Snowflake Horizon リソースの LLM コンテキストを取得することもできます。詳細については、データアセットのコンテキストを取得するをご覧ください。
次のステップ
- コネクタジョブを管理する方法を学習する。