设置 Openflow Connector for Google BigQuery

备注

此连接器受 Snowflake 连接器条款 的约束。

本主题介绍设置 Openflow Connector for Google BigQuery 的步骤。

先决条件

  1. 查阅 关于 Openflow Connector for Google BigQuery

  2. 设置运行时部署。

  3. 如果您使用的是 Openflow - Snowflake Deployments,请确保您已查阅了 配置所需域 的相关内容,并已授予连接器所需 的访问权限。

  4. 您拥有用于管理 Openflow 的 Openflow 管理员角色或类似角色的访问权限。

  5. 如果您正在创建 Snowflake 服务用户来管理连接器,则您应已创建密钥对身份验证。有关更多信息,请参阅 密钥对身份验证

所需端点

连接器需要以下端点才能运行:

  • bigquery.googleapis.com:443

  • bigquerystorage.googleapis.com:443

  • oauth2.googleapis.com:443

如果您使用的是 Openflow – BYOC,则需要配置云网络出口,以允许通过 TLS 443 访问上述端点。如果您使用的是 Openflow - Snowflake Deployments,则需要创建网络规则和外部访问集 (EAI)。然后,向该 EAI 授予 Snowflake 角色的使用权限。

设置 BigQuery

  1. 创建 Google Cloud 服务账户并授予其读取 BigQuery 数据所需的权限。连接器使用此账户进行身份验证。

    此账户必须具有以下权限:

    • BigQuery User (https://docs.cloud.google.com/bigquery/docs/access-control#bigquery.user)

    • BigQuery Data Editor (https://docs.cloud.google.com/bigquery/docs/access-control#bigquery.dataEditor)

重要

BigQuery Data Editor 必须在 项目级别 授予,而不是在单个数据集上授予。连接器查询 {project}.{region}.INFORMATION_SCHEMA.TABLES 以发现所有已配置区域中的表(这是一个区域范围视图,需要项目级别的访问权限)。连接器还会查询 {project}.{dataset}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE 以确定每个复制表的主键。如果没有项目级别的访问权限,查询将失败并显示 Access Denied 错误,且连接器将无法正常运行。

  1. 为服务账户生成并下载相应的 JSON 密钥文件。在连接器的配置中,您将需要该文件的完整内容。

  2. 在每个源表上启用更改历史记录,以允许连接器执行增量复制。此功能使 BigQuery 能够跟踪行级更改(插入、更新和删除),连接器利用这些更改来高效同步数据。

    在 BigQuery 控制台中为每个表运行以下查询:

    ALTER TABLE `project.dataset.table`
    SET OPTIONS (enable_change_history = TRUE);
    

设置您的 Snowflake 账户

作为 Openflow 管理员,请执行以下任务来设置您的 Snowflake 账户:

  1. 创建 Snowflake 服务用户:

    USE ROLE USERADMIN;
    CREATE USER <openflow_service_user>
      TYPE=SERVICE
      COMMENT='Service user for Openflow automation';
    
  2. 将用户的私钥存储在文件中,以提供给连接器的配置。有关更多信息,请参阅 密钥对身份验证

    ALTER USER <openflow_service_user> SET RSA_PUBLIC_KEY = '<pubkey>';
    
  3. 创建一个用于存储复制数据的数据库,并通过授予 USAGE 和 CREATE SCHEMA 权限,为该 Snowflake 用户设置在该数据库中创建对象的权限。

    USE ROLE ACCOUNTADMIN;
    CREATE DATABASE IF NOT EXISTS <destination_database>;
    GRANT USAGE ON DATABASE <destination_database> TO USER <openflow_service_user>;
    GRANT CREATE SCHEMA ON DATABASE <destination_database> TO USER <openflow_service_user>;
    
  4. 为连接器创建一个新的仓库或使用现有仓库。

    要创建新仓库,请执行以下步骤:

    CREATE WAREHOUSE <openflow_warehouse>
    WITH
       WAREHOUSE_SIZE = 'MEDIUM'
       AUTO_SUSPEND = 300
       AUTO_RESUME = TRUE;
    GRANT USAGE, OPERATE ON WAREHOUSE <openflow_warehouse> TO USER <openflow_service_user>;
    

    从 MEDIUM 仓库规模开始,然后根据要复制的表的数量和传输的数据量尝试规模。

    要判断是否需要增加仓库规模,请在数据复制进行时监控连接器和数据库。如果在增量复制过程中观察到显著延迟,可尝试使用更大的仓库规格。然而,相较于扩大仓库规模,采用 多集群仓库 通常能更有效地应对海量表数量的扩展需求。

  5. 创建外部访问集成,以启用 Snowflake 外部的网络访问。

    小心

    如果您的运行时在 Openflow – BYOC 中执行,则无需创建外部访问集成 (EAI)。您应改为配置云网络出口,允许通过 TLS 443 访问下列端点。

    所需的“主机:端口”端点列在 所需端点 部分中。

    要允许连接器从 Snowflake 托管的运行时调用所需的 Google APIs,您必须创建一个网络规则和一个外部访问集成 (EAI)。然后,向该 EAI 授予 Snowflake 角色的使用权限。

    要创建外部访问集成和网络规则并授予访问权限,请执行以下步骤:

    1. 创建一个网络规则,以允许连接器访问所需的 Google APIs:

      USE ROLE ACCOUNTADMIN;
      USE DATABASE <openflow_network_db>;
      
      CREATE OR REPLACE NETWORK RULE openflow_<runtime_name>_network_rule
        TYPE = HOST_PORT
        MODE = EGRESS
        VALUE_LIST = (
          'bigquery.googleapis.com:443',
          'bigquerystorage.googleapis.com:443',
          'oauth2.googleapis.com:443'
        );
      
    2. 创建引用网络规则的外部访问集成:

      CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openflow_<runtime_name>_eai
        ALLOWED_NETWORK_RULES = (openflow_<runtime_name>_network_rule)
        ENABLED = TRUE;
      
    3. 向您的 Snowflake 角色授予对该集成的 USAGE 权限:

      GRANT USAGE ON INTEGRATION openflow_<runtime_name>_eai
        TO ROLE openflow_runtime_role_<runtime_name>;
      

安装连接器

要安装连接器,请以数据工程师身份执行以下操作:

  1. 导航到 Openflow“Overview”页面。在 Featured connectors 部分中,选择 View more connectors

  2. 在 Openflow 连接器页面上,找到连接器并选择 Add to runtime

  3. Select runtime 对话框中,从 Available runtimes 下拉列表中选择您的运行时,然后点击 Add

    备注

    在安装连接器之前,请确保在 Snowflake 中为连接器创建了数据库和架构,用于存储引入的数据。

  4. 使用您的 Snowflake 账户凭据对部署进行身份验证,并在系统提示时选择 Allow,以允许运行时应用程序访问您的 Snowflake 账户。连接器安装过程需要几分钟才能完成。

  5. 使用您的 Snowflake 账户凭据进行运行时身份验证。

此时将显示 Openflow 画布,其中添加了连接器进程组。

配置连接器

要配置连接器,请执行以下步骤:

  1. 右键点击已添加的运行时,然后选择 Parameters

  2. 按照 指定流参数 所述填充所需的参数值。

指定流参数

本部分介绍您可以根据以下参数上下文配置的流参数:

BigQuery 源参数

参数

描述

BigQuery 项目名称

包含 BigQuery 数据集和表的 Google Cloud 项目的唯一标识符。

查找位置:打开 BigQuery Studio (Google Cloud Console > BigQuery),在左侧的“Explorer”窗格中,将鼠标悬停在您的项目上以查看项目 ID。

示例: example-team-gcp

GCP 服务账户 JSON

用于身份验证的 Google Cloud Platform 服务账户的 JSON 密钥文件的全部内容。确保该服务账户具备执行 BigQuery 操作所需的 IAM 权限,例如 BigQuery Job User 和 BigQuery Data Viewer 角色。

获取路径:Google Cloud Console> IAM & Admin > Service Accounts > 选择服务账户 > Keys 标签页 > Add key > Create new key > JSON。这将下载一个 .json 文件,打开该文件并将整个文件内容(包括花括号)粘贴到此字段中。

BigQuery 目标参数

参数

描述

Snowflake 身份验证策略

使用 SPCS 时,请将 SNOWFLAKE_SESSION_TOKEN 用作身份验证策略的值。使用 BYOC 时,请将 KEY_PAIR 用作身份验证策略的值。

示例: KEY_PAIR

Snowflake 账户标识符

使用以下方式时:

  • 会话令牌身份验证策略:必须为空。

  • KEY_PAIR:选择使用 时默认使用的角色和仓库。Snowflake 账户名称,数据将持久存储在此账户中。

目标数据库

要复制到的目标数据库的名称。支持混合大小写。

Snowflake 私钥文件

使用以下方式时:

  • 会话令牌身份验证策略:私钥文件必须为空。

  • KEY_PAIR:选择使用 时默认使用的角色和仓库。上传包含用于向 Snowflake 进行身份验证的 RSA 私钥的文件,该文件应根据 PKCS8 标准格式化,并包含标准的 PEM 页眉和页脚。头标记行以 -----BEGIN PRIVATE 开头。要上传私钥文件,请选中“Reference asset”复选框。

Snowflake 私钥密码

使用以下方式时:

  • 会话令牌身份验证策略:必须为空。

  • KEY_PAIR:选择使用 时默认使用的角色和仓库。提供与 Snowflake 私钥文件关联的密码。

Snowflake 角色

使用以下方式时:

  • 会话令牌身份验证策略:使用您的 Snowflake 角色。您可以在 Openflow UI 中,通过导航到运行时的“View Details”来找到您的 Snowflake 角色。

  • KEY_PAIR 身份验证策略:使用为您的服务用户配置的有效角色。

Snowflake 用户名

使用以下方式时:

  • 会话令牌身份验证策略:必须为空。

  • KEY_PAIR:选择使用 时默认使用的角色和仓库。提供用于连接到 Snowflake 实例的用户名。

Snowflake 仓库

连接器要使用的仓库名称。

BigQuery 引入参数

参数

描述

BigQuery 区域

指定一个以逗号分隔的位置列表,用于查询 BigQuery 数据集。您可以在同一列表中同时包含区域级和多区域级位置。

示例: us,eu,us-west1

包括数据集名称

以逗号分隔的要复制的数据集列表(在所有选定区域中查询)。

示例: sales_data,marketing_leads

包括数据集名称正则表达式

用于指定要复制的数据集名称的正则表达式(在所有选定区域中查询)。与“包含的数据集名称”结合使用,以包含任何匹配的数据集。注意:REGEXP 表达式应符合 Google 的 RE2 语法。

示例: ^sales_.*

包括表名

以逗号分隔的要跨数据集复制的表列表。

示例: transactions,customers

包括表名正则表达式

用于指定要跨数据集复制的表名称的正则表达式。与“包括表名”结合使用,以包含任何匹配的表。注意:REGEXP 表达式应符合 Google 的 RE2 语法。

示例: ^revenue_.*

包括视图名称

以逗号分隔的要跨数据集复制的视图列表。

示例: customer_summary,revenue_report

包括视图名称正则表达式

用于指定要跨数据集复制的视图名称的正则表达式。与“包括视图名称”结合使用,以包含任何匹配的视图。注意:REGEXP 表达式应符合 Google 的 RE2 语法。

示例: ^report_.*

增量同步频率

连接器对每个表运行增量同步的频率。如果同步周期长于配置的间隔,则运行不会重叠,下一次运行将等待前一次运行完成。由于 BigQuery 将窗口的最大大小限制为 24 小时,因此调度频率必须比该值更频繁。

示例: 10m

视图同步频率

连接器对每个视图运行同步的频率。如果同步周期长于配置的间隔,则运行不会重叠,下一次运行将等待前一次运行完成。视图引入不支持 CDC,仅支持截断并加载。

示例: 1h

临时表数据集

用于创建必要临时表的数据集,例如 CDC 日志表或用于视图引入的临时表。Snowflake 建议为临时表使用单独的数据集,而不应为此目的使用已引入数据集。

示例: openflow_temp

运行流

  1. 右键点击“飞机”图标并选择 Enable all Controller Services

  2. 右键点击导入的进程组并选择 Start。连接器开始数据引入。

后续步骤

  • 有关安装连接器后可以执行的任务的信息,请参阅 使用连接器

  • 有关监控流的信息,请参阅 监控流