Beam SQL 概述
Beam SQL 允许 Beam 用户(目前仅在 Beam Java 和 Python 中可用)使用 SQL 语句查询有界和无界 PCollections
。您的 SQL 查询被转换为 PTransform
,它是 Beam 管道的一个封装段。您可以在管道中自由混合 SQL PTransforms
和其他 PTransforms
。
Beam SQL 包括以下方言
Beam Calcite SQL 是 Apache Calcite 的变体,这是一种在大数据处理中广泛使用的方言。Beam Calcite SQL 是默认的 Beam SQL 方言。Beam ZetaSQL 与 BigQuery 更加兼容,因此在 写入或读取 BigQuery 表 的管道中特别有用。
要更改方言,请将 方言的完整包名称 传递给 setPlannerName
方法,该方法位于 PipelineOptions
接口中。
在管道中使用 SQL,您还需要了解以下两个概念
- SqlTransform:用于从 SQL 查询创建
PTransforms
的接口。 - Row:Beam SQL 操作的元素类型。
PCollection<Row>
充当表的角色。
演练
SQL 管道演练 演示了如何使用示例代码使用 Beam SQL。
Shell
Beam SQL shell 允许您将管道编写为 SQL 查询,而无需使用 Java SDK。Shell 页面 描述了如何使用交互式 Beam SQL shell。
Apache Calcite 方言
Beam Calcite SQL 概述 总结了 Beam Calcite SQL 支持的 Apache Calcite 运算符、函数、语法和数据类型。
ZetaSQL 方言
有关 Beam SQL 中 ZetaSQL 功能的更多信息,请参阅 Beam ZetaSQL 方言参考。
要切换到 Beam ZetaSQL,请按如下方式配置 管道选项
PipelineOptions options = ...;
options
.as(BeamSqlPipelineOptions.class)
.setPlannerName("org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner");
注意,使用 ZetaSQLQueryPlanner
需要额外依赖 beam-sdks-java-extensions-sql-zetasql
,此外还需要 beam-sdks-java-extensions-sql
包来支持 CalciteQueryPlanner
。
Beam SQL 扩展
Beam SQL 具有额外的扩展,这些扩展利用了 Beam 的统一批处理/流式模型以及处理复杂数据类型的功能。您可以将这些扩展与所有 Beam SQL 方言一起使用。