使用 Knowledge Catalog(原 Dataplex Universal Catalog)连接器将元数据从 Snowflake Horizon 直接导入 Google Cloud,从而打破数据孤岛,避免在工具之间切换。
此连接器支持托管在Google Cloud、Microsoft Azure 或 Amazon Web Services (AWS) 上的 Snowflake Horizon 实例。
下表列出了 Snowflake Horizon 连接器捕获的元数据:
| 类别 | 已捕获元数据 |
|---|---|
| 技术 |
|
| 可运行 |
|
| 商务版 |
|
| 语义 |
|
限制
Snowflake Horizon 连接器具有以下限制:
- 不支持沿袭。
- 连接器会导入 Iceberg 表的元数据,但不会自动将这些元数据关联到 Iceberg REST Catalog (IRC) 中的底层物理表。
- 读取
ACCESS_HISTORY的标记、数据质量和分析结果、分类结果、查询历史记录联接以及使用情况数据分析(频繁用户和频繁联接的表)需要 Snowflake 企业版或更高版本。
准备工作
在从 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 Admin (
roles/dataplex.catalogAdmin)、Dataplex Catalog Editor (roles/dataplex.catalogEditor) 或 Dataplex Entry Group Owner (roles/dataplex.entryGroupOwner) 角色。 - 如需查看 Snowflake Horizon 元数据,您需要拥有项目的 Dataplex Catalog Viewer (
roles/dataplex.catalogViewer) 角色。 - 创建和管理 BigQuery Data Transfer Service 转移作业:项目的 BigQuery Admin (
roles/bigquery.admin) 角色。 - 如需在 Cloud Logging 中查看日志,您需要拥有项目的 日志查看器 (
roles/logging.viewer) 角色。
您还必须向 BigQuery Data Transfer Service 服务代理 (service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.) 授予以下两个角色:
- 目标条目组或包含该条目组的项目上的 Dataplex Entry Group Importer (
roles/dataplex.entryGroupImporter)。此角色允许服务代理将元数据导入条目组 (dataplex.entryGroups.import)。 针对包含目标条目组的项目的 Dataplex Entry and EntryLink Owner (
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 Entry Group Owner (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 用户的名称。生成 RSA 密钥对,其中私钥采用 PKCS#8 格式:
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权限。
如需查找在配置连接器时输入的账号标识符,请在 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 账号的连接详细信息:
- 对于网络连接,请根据需要选择现有网络连接,或创建一个网络连接。
- 在账号标识符字段中,输入不含
.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)。以浏览中显示的ORG_NAME-ACCOUNT_NAME小写格式输入ACCOUNT。数据库、架构和对象名称区分大小写。不支持名称格式。
在目标设置部分中:
- 点击浏览,然后选择一个现有的 Knowledge Catalog 条目组来存储导入的元数据,或点击创建新条目组。
- 选择是立即还是稍后设置条目组的权限。
如需允许用户查看导入的元数据,请对条目组设置权限。如果您未在项目级层向 BigQuery Data Transfer Service 服务代理授予 Dataplex Entry Group Importer (
roles/dataplex.entryGroupImporter) 角色或dataplex.entryGroups.import权限,请在此条目组中授予该角色或权限。您仍必须为项目授予 Dataplex Entry and EntryLink Owner (roles/dataplex.entryOwner) 角色,因为dataplex.entryLinks.reference权限是在项目级层检查的。如需了解详情,请参阅 IAM 角色和权限。
在转移配置名称部分的显示名称中,输入元数据导入作业的名称。
在时间表选项部分,配置元数据导入作业的频率。如果您选择按需,则只有在您手动触发作业时,作业才会运行。
可选:在通知选项部分中,为作业失败配置电子邮件或 Pub/Sub 通知。
可选:在高级选项部分中,配置加密设置。如果您选择客户管理的加密密钥 (CMEK),则该密钥会加密在启动 Knowledge Catalog 元数据导入作业之前暂存的所有临时数据。该密钥不会加密目标 Knowledge Catalog 条目组中的元数据。
点击保存。
REST
使用 projects.locations.transferConfigs.create 方法。 在 TransferConfig 资源中,配置以下字段:
- 将
dataSourceId字段设置为"snowflake_horizon"。 - 在
metadataDestination字段中,使用目标 Knowledge Catalog 条目组的资源路径填充dataplexConfiguration.entryGroup字段: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,如果您使用的话)设置为 Secret 版本资源名称,格式为projects/SECRET_PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID,并将这些参数名称添加到paramConfig.secretManagerManagedParams字段。 - 向包含转移作业配置 (
service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.) 的项目的 BigQuery Data Transfer Service 服务代理授予每个 Secret 的 Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) 角色。Secret 可以位于其他项目中。如果服务代理无法读取 Secret,则运行会在启动前失败,并显示Failed to retrieve secret ... Permission 'secretmanager.versions.access' denied等错误。BigQuery Data Transfer Service 会在每次运行开始时读取 Secret,因此,如果您将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 上下文。如需了解详情,请参阅检索数据资产的上下文。
后续步骤
- 了解如何管理连接器作业。