使用 Dataflow SQL

本页介绍如何使用 Dataflow SQL 和创建 Dataflow SQL 作业。

如需创建 Dataflow SQL 作业,请编写运行 Dataflow SQL 查询。

使用 Dataflow SQL 界面

Dataflow SQL 界面是用于创建 Dataflow SQL 作业的 BigQuery 网页界面设置。

您可以通过 BigQuery 网页界面访问 Dataflow SQL 界面。

  1. 转到 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 切换到 Cloud Dataflow 引擎。

    a. 点击更多下拉菜单,然后选择查询设置

    已选择“查询设置”选项的 BigQuery 网页界面中的“更多”下拉菜单

    a. 在查询设置菜单中,选择 Dataflow 引擎

    a. 在未启用 Dataflow API 和 Data Catalog API 的情况下会显示的提示中,点击启用 API

    包含“启用 API”提示的“查询设置”菜单

    a. 点击保存

    已选择“Dataflow 引擎”单选按钮并已启用 API 的“查询设置”菜单

您也可以通过 Dataflow 监控界面访问 Dataflow SQL 界面。

  1. 转到 Dataflow 监控界面。

    转到 Dataflow 监控界面

  2. 点击从 SQL 创建作业

编写 Dataflow SQL 查询

Dataflow SQL 查询使用 Dataflow SQL 查询语法。Dataflow SQL 查询语法类似于 BigQuery 标准 SQL

您可以使用 Dataflow SQL 流处理扩展程序将来自不断更新的数据源(例如 Pub/Sub)的数据汇总在一起。

例如,以下查询会统计每分钟 Pub/Sub 出租车行程流中的乘客人数:

SELECT
  TUMBLE_START('INTERVAL 1 MINUTE') as period_start,
  SUM(passenger_count) AS pickup_count
FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`
WHERE
  ride_status = "pickup"
GROUP BY
  TUMBLE(event_timestamp, 'INTERVAL 1 MINUTE')

运行 Dataflow SQL 查询

当您运行 Dataflow SQL 查询时,Dataflow 会将查询转换为 Apache Beam 流水线并执行该流水线。

您可以使用 Cloud Console 或 gcloud 命令行工具运行 Dataflow SQL 查询。

控制台

如需运行 Dataflow SQL 查询,请使用 Dataflow SQL 界面。

  1. 转到 Dataflow SQL 界面。

    转到 Dataflow SQL 界面

  2. 在查询编辑器中输入 Dataflow SQL 查询。

  3. 点击创建 Cloud Dataflow 作业,打开作业选项面板。

  4. (可选)点击显示可选参数并设置 Dataflow 流水线选项

  5. 在面板的目标位置部分,选择输出类型

  6. 点击创建

gcloud

如需运行 Dataflow SQL 查询,请使用 gcloud dataflow sql query 命令。

gcloud dataflow sql query \
  --job-name=job-name \
  --region=region \
  --bigquery-table=table-name \
  --bigquery-dataset=destination-dataset \
'query'

如需详细了解如何查询数据以及编写 Dataflow SQL 查询结果,请参阅使用数据源和目标位置

设置流水线选项

您可以为 Dataflow SQL 作业设置 Dataflow 流水线选项。Dataflow 流水线选项是执行参数,用于配置 Dataflow SQL 查询的运行方式和位置。

如需为 Dataflow SQL 作业设置 Dataflow 流水线选项,请在运行 Dataflow SQL 查询时指定以下参数。

控制台

参数 类型 说明 默认值
String 需要在其中运行查询的区域。Dataflow SQL 查询可以在具有 Dataflow 区域端点的区域中运行。 如果未设置,则默认为 us-central1.
工作器数量上限 int 流水线在执行期间可用的 Compute Engine 实例数上限。 如果未指定,Dataflow 自动服务将确定合适的工作器数。
工作器区域 String 用于启动工作器实例以运行您的流水线的 Compute Engine 区域。Compute Engine 工作器区域可以与 Dataflow 区域端点所在区域不同。 如果未设置,则默认为指定的 Dataflow 区域端点。
工作器地区 String 用于启动工作器实例以运行您的流水线的 Compute Engine 地区。Compute Engine 地区所在区域可以与 Dataflow 区域端点不同。

如果未设置,则默认为工作器区域中的一个地区。

如果未设置工作器区域,则默认为指定的 Dataflow 区域端点中的一个地区。

服务帐号电子邮件地址 String 用于运行流水线的控制器服务帐号的电子邮件地址。电子邮件地址必须使用 my-service-account-name@<project-id>.iam.gserviceaccount.com 格式。 如果未设置,则 Dataflow 工作器会将当前项目的 Compute Engine 服务帐号用作控制器服务帐号。
机器类型 String

Dataflow 在启动工作器时使用的 Compute Engine 机器类型。您可以使用任何可用的 Compute Engine 机器类型系列以及自定义机器类型。

为获得最佳效果,请使用 n1 机器类型。Dataflow 服务等级协议不支持共享核心机器类型(例如 f1g1 系列工作器)。

请注意,Dataflow 根据工作器中 vCPU 的数量和内存 GB 数进行计费。计费与机器类型系列无关。

如果未设置,Dataflow 会自动选择机器类型。
其他实验 String 需要启用的实验。实验可以是一个值(如 enable_streaming_engine),也可以是一个键值对(如 shuffle_mode=service)。实验必须采用逗号分隔列表的形式。 如果未指定,则不启用任何实验。
工作器 IP 地址配置 String

指定 Dataflow 工作器是否使用公共 IP 地址

如果该值设置为 Private,则 Dataflow 工作器将使用专用 IP 地址进行所有通信。指定的 NetworkSubnetwork 必须已启用专用 Google 访问通道

如果该值设置为 Private 且指定了 Subnetwork 选项,则忽略 Network 选项。

如果未设置,则默认为 Public
网络 String 将向其分配工作器的 Compute Engine 网络 如果未设置,则默认为网络 default
子网 String 将向其分配工作器的 Compute Engine 子网。子网必须使用 regions/region/subnetworks/subnetwork 格式。 如果未设置,则 Dataflow 会自动确定子网。

gcloud

标志 类型 说明 默认值
‑‑region String 需要在其中运行查询的区域。Dataflow SQL 查询可以在具有 Dataflow 区域端点的区域中运行。 如果未设置,将抛出一个错误。
‑‑max‑workers int 流水线在执行期间可用的 Compute Engine 实例数上限。 如果未指定,Dataflow 将自动确定合适的工作器数。
‑‑num‑workers int 执行流水线时使用的 Compute Engine 初始实例数。此参数确定 Dataflow 在作业开始时启动的工作器数。 如果未指定,Dataflow 将自动确定合适的工作器数。
‑‑worker‑region String

用于启动工作器实例以运行您的流水线的 Compute Engine 区域。Compute Engine 工作器区域可以与 Dataflow 区域端点所在区域不同。

您可以指定 ‑‑worker‑region‑‑worker‑zone 中的一个。

如果未设置,则默认为指定的 Dataflow 区域端点。
‑‑worker‑zone String

用于启动工作器实例以运行流水线的 Compute Engine 地区。Compute Engine 地区所在区域可以与 Dataflow 区域端点不同。

您可以指定 ‑‑worker‑region‑‑worker‑zone 中的一个。

如果未设置,则默认为特定 Dataflow 区域性端点中的地区。
‑‑worker‑machine‑type String

Dataflow 在启动工作器时使用的 Compute Engine 机器类型。您可以使用任何可用的 Compute Engine 机器类型系列以及自定义机器类型。

为获得最佳效果,请使用 n1 机器类型。Dataflow 服务等级协议不支持共享核心机器类型(例如 f1g1 系列工作器)。

请注意,Dataflow 根据工作器中 vCPU 的数量和内存 GB 数进行计费。计费与机器类型系列无关。

如果未设置,Dataflow 会自动选择机器类型。
‑‑service‑account‑email String 用于运行流水线的控制器服务帐号的电子邮件地址。电子邮件地址必须使用 my-service-account-name@<project-id>.iam.gserviceaccount.com 格式。 如果未设置,则 Dataflow 工作器会将当前项目的 Compute Engine 服务帐号用作控制器服务帐号。
‑‑disable‑public‑ips boolean

指定 Dataflow 工作器是否使用公共 IP 地址

如果设置此标志,则 Dataflow 工作器将使用专用 IP 地址进行所有通信。

如果未设置,则 Dataflow 工作器将使用公共 IP 地址。
‑‑network String 将向其分配工作器的 Compute Engine 网络 如果未设置,则默认为网络 default
‑‑subnetwork String 将向其分配工作器的 Compute Engine 子网。子网必须使用 regions/region/subnetworks/subnetwork 格式。 如果未设置,则 Dataflow 会自动确定子网。
‑‑dataflow‑kms‑key String 用于对静态数据进行加密的 CMEK(客户管理的加密密钥)。您可以通过 Cloud KMS 控制加密密钥。密钥必须与作业位于同一位置。 如果未指定,则 Dataflow 会使用默认的 Google Cloud 加密(而不是 CMEK)。

如需了解详情,请参阅 gcloud dataflow sql query 命令参考。

停止 Dataflow SQL 作业

如需停止 Dataflow SQL 作业,请使用取消命令。不支持通过“排空”停止 Dataflow SQL 作业。

价格

Dataflow SQL 使用标准 Dataflow 价格;它没有单独的价格结构。您需要为根据 SQL 语句创建的 Dataflow 作业所使用的资源付费。针对这些资源收取的费用是 vCPU、内存、Persistent Disk、Streaming Engine 和 Dataflow Shuffle 的标准 Dataflow 费用。

Dataflow SQL 作业可能会使用其他资源(例如 Pub/Sub 和 BigQuery),均按各自的价格计费。

如需详细了解 Dataflow 价格,请参阅 Dataflow 价格页面

后续步骤