使用 Dataflow SQL

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

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

使用 Dataflow SQL 编辑器

Dataflow SQL 编辑器是 Google Cloud 控制台中的一个页面,您可以在其中编写和运行查询以创建 Dataflow SQL 作业。

如需访问 Dataflow SQL 编辑器,请按以下步骤操作:

您还可以按照以下步骤从 Dataflow 监控界面访问 Dataflow SQL 编辑器:

  1. 在 Google Cloud 控制台中,前往 Dataflow 作业页面。

    前往“作业”

  2. 在 Dataflow 菜单中,点击 SQL 工作区

编写 Dataflow SQL 查询

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

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

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

SELECT
  DATETIME(tr.window_start) AS starttime,
  SUM(tr.passenger_count) AS pickup_count
FROM TUMBLE ((SELECT * FROM pubsub.topic.`pubsub-public-data`.`taxirides-realtime`),
DESCRIPTOR(event_timestamp), 'INTERVAL 1 MINUTE') AS tr
WHERE
  tr.ride_status = "pickup"
GROUP BY DATETIME(tr.window_start)

运行 Dataflow SQL 查询

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

您可以使用 Google Cloud 控制台或 Google Cloud CLI 运行 Dataflow SQL 查询。

控制台

如需运行 Dataflow SQL 查询,请使用 Dataflow SQL 编辑器。

  1. 转到 Dataflow SQL 编辑器页面。

    打开 Dataflow SQL 编辑器

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

  3. 点击创建作业以打开作业选项面板。

  4. 可选:对于作业名称,输入唯一的作业名称。

  5. 对于区域端点,从菜单中选择一个值。

  6. 可选:点击显示可选参数,然后输入提供的 Dataflow 流水线选项的值。

  7. 对于目标,选择输出类型,然后输入提供的字段的值。

  8. 可选:在 SQL 查询参数部分,添加参数,然后在提供的字段中输入值。

  9. 点击创建

gcloud

如需运行 Dataflow SQL 查询,请使用 gcloud dataflow sql query 命令。以下是一个创建 SQL 查询的示例

gcloud dataflow sql query \
  --job-name=JOB_NAME \
  --region=REGION \
  --bigquery-table=BIGQUERY_TABLE \
  --bigquery-dataset=BIGQUERY_DATASET \
  --bigquery-project=BIGQUERY_PROJECT \
'SQL_QUERY'

请替换以下内容:

  • JOB_NAME:您的 Dataflow SQL 作业的名称
  • REGION:用于部署 Dataflow 作业的 Dataflow 位置
  • BIGQUERY_TABLE:要向其中写入输出的 BigQuery 表的名称
  • BIGQUERY_DATASET:包含输出表的 BigQuery 数据集 ID
  • BIGQUERY_PROJECT:包含输出 BigQuery 表的 Google Cloud 项目的 ID
  • SQL_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 作业,您必须取消该作业。不支持使用 drain 选项停止 Dataflow SQL 作业。

价格

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

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

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

后续步骤