批处理流处理大数据【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam15/beam点击查看免费下载本文以 Apache Beam 官方文档中的 Beam ZetaSQL 总览overview.md为骨架系统讲解 Beam SQL 的 ZetaSQL 方言它是什么、何时选用、如何通过 PipelineOptions 切换以及查询语法、词法结构、数据类型、函数与运算符等核心参考内容并结合仓库源码sdks/java/extensions/sql/zetasql说明底层实现与限制。Beam ZetaSQL 是什么Beam SQL 是 Apache Beam 提供的 SQL 编程接口允许你用 SQL 语句查询有界bounded与无界unbounded的PCollection。SQL 查询会被翻译成一个PTransform作为管线的一段封装逻辑可以与其他PTransform自由混用参见 Beam SQL overview。Beam SQL 内置两种方言Beam Calcite SQL基于 Apache Calcite是大数据处理领域广泛使用的方言也是 Beam SQL 的默认方言Beam ZetaSQL基于 Google 开源的 ZetaSQL 语言与 BigQuery 的 SQL 框架高度相似。Beam ZetaSQL 是 ZetaSQL 语言的一个变体特别适合需要读写 BigQuery 表的管线配合BigQueryIO使用因为方言语义与 BigQuery SQL 更接近迁移成本更低。从仓库实现看ZetaSQL 支持由 ZetaSQLQueryPlanner 提供该类实现了QueryPlanner接口内部委托ZetaSQLPlannerImpl完成从 SQL 字符串到 Beam 关系表达式的转换。注意Beam SQL 目前仅在 Beam Java 与 Python SDK 中可用。切换到 Beam ZetaSQL 方言Beam Calcite SQL 是默认方言。要切换到 Beam ZetaSQL需要通过 PipelineOptions 的setPlannerName指定方言 planner 类的全限定名PipelineOptions options ...; options .as(BeamSqlPipelineOptions.class) .setPlannerName(org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner);使用ZetaSQLQueryPlanner需要额外引入beam-sdks-java-extensions-sql-zetasql依赖而CalciteQueryPlanner只需要beam-sdks-java-extensions-sql包。从源码看planner 是通过 BeamSqlEnv 反射实例化的ZetaSQLQueryPlanner提供了对应的FACTORYpublic static final Factory FACTORY ZetaSQLQueryPlanner::new;实例化时会从BeamSqlPipelineOptions读取getZetaSqlDefaultTimezone()作为默认时区默认 UTC该时区用于解析 TIMESTAMP 字面量与时间函数。相关配置项定义在 BeamSqlPipelineOptions.javaString getZetaSqlDefaultTimezone(); void setZetaSqlDefaultTimezone(String timezone);在测试中可以看到实际用法例如 ZetaSqlTimeFunctionsTest.java 中setZetaSqlDefaultTimezone(Asia/Shanghai)。ZetaSQL planner 还会对 Calcite 的规则集做针对性替换见ZetaSQLQueryPlanner.modifyRuleSetsForZetaSql跳过JoinCommuteRule当前不支持 join 重排序、用BeamZetaSqlCalcMergeRule等替换通用 Calc 规则、用BeamZetaSqlUnnestRule/BeamZetaSqlUncollectRule处理 UNNEST 语义。这意味着同一句 SQL 在两种方言下的执行计划可能不同。查询语法Query syntax查询语句扫描表、流或表达式返回计算结果行。Beam ZetaSQL 的查询语法与 ZetaSQL 基本一致完整语法可参考 query-syntax.md 与 syntax.md函数调用规则。核心语法骨架query_statement: query_expr query_expr: [ WITH with_query_name AS ( query_expr ) [, ...] ] { select | ( query_expr ) | query_expr set_op query_expr } [ [ ORDER BY expression [{ ASC | DESC }] [, ...] ] LIMIT count [ OFFSET skip_rows ] ] select: SELECT [ ALL | DISTINCT ] { * | expression [ [ AS ] alias ] } [, ...] [ FROM from_item ] [ WHERE bool_expression ] [ GROUP BY expression [, ...] ] [ HAVING bool_expression ] set_op: UNION { ALL | DISTINCT } | INTERSECT { ALL | DISTINCT } | EXCEPT { ALL | DISTINCT }记法说明方括号[ ]表示可选竖线|表示逻辑或花括号{ }包围一组选项[, ...]表示前面的项可以逗号分隔重复出现。SELECT 列表SELECT列表定义查询返回的列其中的表达式可以引用对应FROM子句中任意from_item的列。每个列表项可以是*或expressionSELECT * FROM (SELECT apple AS fruit, carrot AS vegetable);SELECT *select star为执行完整查询后可见的每一列生成一个输出列。注意在顶层SELECT中要么显式使用列名要么对表达式使用显式别名否则该列是匿名的无法在查询其他位置按名引用。SELECT ALL返回所有行含重复行是SELECT的默认行为。FROM 子句与数据源FROM子句指明从哪些表或流取行并说明如何将这些行连接成单一的数据流。from_item可以是table_name、join、子查询( query_expr ) [AS alias]或with_query_name。表名table_name使用 Standard SQL 词法结构的点分隔标识符序列。包含非字母、数字、下划线字符的标识符必须用反引号backtick包围SELECT * FROM bigquery.table.my-project.baseball.roster; SELECT * FROM pubsub.topic.my-project.incoming_events;子查询Subqueries出现在另一条语句内部的查询必须用括号包围。有两种类型表达式子查询可出现在任何表达式合法的位置返回单个值表子查询只能用在FROM子句中外层查询把结果当表处理。SELECT AVG ( PointsScored ) FROM ( SELECT PointsScored FROM Stats WHERE SchoolID 77 );表子查询可以带别名SELECT r.LastName FROM ( SELECT * FROM Roster) AS r;JOIN 类型JOIN子句把两个from_item合并使SELECT子句可以把它们当作单一数据源查询。join_type与ON子句join 条件共同决定如何组合或丢弃两个from_item中的行。所有 JOIN 都要求显式指定join_type。支持的 join 类型[INNER] JOIN计算两个from_item的笛卡尔积并丢弃所有不满足 join 条件的行FULL [OUTER] JOIN返回两个from_item中满足 join 条件的全部行的所有字段未匹配的行以 NULL 填充另一侧列LEFT [OUTER] JOIN保留左侧from_item的所有行未匹配时右侧列以 NULL 填充右侧未匹配行被丢弃RIGHT [OUTER] JOIN与 LEFT OUTER JOIN 对称。SELECT * FROM Roster INNER JOIN PlayerStats ON Roster.LastName PlayerStats.LastName;重要限制目前只支持等值连接equi-join。join 条件必须是如下形式join condition: conjunction_clause [AND ...] conjunction_clause: { column | field_access } { column | field_access }即条件由多个以AND连接的列 列子句组成不支持其他形式的连接谓词。ON TRUE形式的交叉连接在语法上是允许的FROM a LEFT JOIN b ON TRUEJOIN 默认从左到右绑定也可以用括号改变分组顺序。WHERE 子句WHERE子句对每一行求值bool_expression丢弃所有不返回 TRUE 的行即返回 FALSE 或 NULL 的行SELECT * FROM Roster WHERE SchoolID 52;bool_expression可以包含多个子条件SELECT * FROM Roster WHERE STARTS_WITH(LastName, Mc) OR STARTS_WITH(LastName, Mac);限制WHERE子句中不能引用SELECT列表中的列别名。GROUP BY 子句GROUP BY把表中expression值非互异的行分组每组产生一行合并结果。常用于SELECT列表带聚合函数或去重场景。expression的数据类型必须可分组groupable见下文数据类型属性。SELECT SUM(PointsScored), LastName FROM PlayerStats GROUP BY LastName;GROUP BY支持引用SELECT列表中的表达式名与别名也支持用整数序号引用SELECT列表项1指第一项2指第二项依此类推且可以混用序号与表达式名SELECT SUM(PointsScored), LastName, FirstName FROM PlayerStats GROUP BY 2, FirstName; -- 等价于 GROUP BY LastName, FirstNameHAVING 子句HAVING与WHERE类似都是过滤不返回 TRUE 的行但有两处关键差异HAVING要求查询中存在GROUP BY或聚合HAVING在GROUP BY与聚合之后、ORDER BY之前执行即对每条聚合后的结果行求值一次WHERE则在GROUP BY之前执行。HAVING可以引用FROM子句可用的列以及SELECT列表别名。强制性聚合规则聚合不一定要出现在HAVING自身但必须以以下三种形式之一出现在查询中——聚合函数在SELECT列表中、聚合函数在HAVING子句中、或两者都有两个位置的聚合函数和所引用列不必相同-- 聚合在 HAVING 中 SELECT LastName FROM Roster GROUP BY LastName HAVING SUM(PointsScored) 15; -- 聚合在 SELECT 列表与 HAVING 中 SELECT LastName, COUNT(*) FROM PlayerStats GROUP BY LastName HAVING SUM(PointsScored) 15;LIMIT 与 OFFSET 子句[ ORDER BY expression [{ASC | DESC}] [,...] ] LIMIT count [ OFFSET skip_rows ]ORDER BY指定排序键默认方向ASC升序不指定ORDER BY时结果顺序未定义。NULL 在ORDER BY语境中是最小值ASC排序中 NULL 排最前DESC排序中 NULL 排最后LIMIT接受非负的 INT64count最多返回count行LIMIT 0返回 0 行。存在集合运算时LIMIT在集合运算求值之后应用OFFSET接受非负的 INT64skip_rows只考虑表中该偏移量之后的行这两个子句只接受字面量或参数值除非在ORDER BY之后使用否则LIMIT/OFFSET实际返回哪些行是不确定的。WITH 子句WITH子句把若干命名子查询的结果绑定为临时表名在后续SELECT表达式中可见包括后续WITH绑定、集合运算两侧的顶层SELECT、以及同一查询表达式内部子查询中的SELECTWITH subQ1 AS (SELECT SchoolID FROM Roster), subQ2 AS (SELECT OpponentID FROM PlayerStats) SELECT * FROM subQ1 UNION ALL SELECT * FROM subQ2;作用域规则WITH引入的别名仅在同一条WITH子句的后续子查询及其下的查询中可见同一条WITH子句内的别名必须唯一但同一别名可以在同一条查询的多个WITH子句中使用局部别名在其可见范围内覆盖外层别名Beam SQL 不支持WITH RECURSIVE。WITH子句在查询期间会隐藏同名的永久表除非对表名做限定如db.Roster。别名Aliases别名是给查询中的表、列或表达式起的临时名字可在SELECT列表或FROM子句中显式引入AS关键字可选SELECT s.FirstName AS name, LOWER(s.FirstName) AS lname FROM Singers s;可见性规则FROM子句别名按从左到右处理仅对FROM子句中后续的路径表达式可见FROM子句别名不可见于同一FROM子句中的子查询不支持相关子查询引用SELECT列表别名仅可见于GROUP BY、ORDER BY、HAVING三个子句GROUP BY/ORDER BY还可引用整数序号指向SELECT列表项歧义即报错若一个名字能解析到多个唯一对象如两表同名列、SELECT列表重复别名、FROM列名与SELECT别名冲突Beam SQL 会报错若名字同时是列名与别名但解析到同一底层对象则不视为歧义。SELECT SingerID AS sid, COUNT(Songid) AS s2id FROM Songs GROUP BY 1 ORDER BY 2 DESC LIMIT 10; -- 等价于 GROUP BY sid ORDER BY s2id DESC LIMIT 10集合运算符Set operatorsUNION {ALL | DISTINCT}把两个或多个SELECT的结果集按列配对并纵向拼接SELECT Mascot AS X, SchoolID AS Y FROM TeamMascot UNION ALL SELECT LastName, PointsScored FROM PlayerStats;INTERSECT {ALL | DISTINCT}返回同时出现在两侧结果集中的行SELECT LastName FROM Roster INTERSECT ALL SELECT LastName FROM PlayerStats;EXCEPT {ALL | DISTINCT}返回左侧存在但右侧不存在的行SELECT LastName FROM Roster EXCEPT DISTINCT SELECT LastName FROM PlayerStats;词法结构Lexical structureBeam ZetaSQL 语句由一系列 token 组成包括标识符、带引号的标识符、字面量、关键字、运算符与特殊字符。token 之间可以用空白空格、退格、制表符、换行或注释分隔。完整参考见 lexical.md。标识符Identifiers标识符是与列、表等数据库对象关联的名字有两种写法不加引号的标识符必须以字母或下划线开头后续字符只能是字母、数字或下划线即[A-Za-z_][A-Za-z_0-9]*加引号的标识符用反引号包围可包含任意字符空格、符号等但不能为空。保留关键字只有用反引号包围后才能作为标识符使用。合法示例Customers5、_dataField1、ADGROUP非法示例5Customers以数字开头、_dataField!含非法字符!、GROUP保留关键字且未加引号。标识符与带引号的标识符大小写不敏感细节见下文大小写敏感性。带引号的标识符支持与字符串字面量相同的转义序列。字面量Literals字面量表示内置数据类型的常量值。并非所有数据类型都能表示为字面量。字符串与 Bytes 字面量必须加引号——单引号、双引号或三引号/类型示例说明带引号的字符串abc、its、it\s、Title: Boy单引号内可含未转义双引号反之亦然反斜杠引入转义序列带引号字符串不能包含换行三引号字符串abc、its、two\nlines内嵌换行与引号无需转义行尾不能有未转义反斜杠三个连续的、与起始引号匹配的未转义引号会结束字符串原始字符串raw stringRabc、rabc、Rabc、rf\(abc,(.*),def\)前缀r/R表示按原始/正则字符串解释反斜杠不充当转义符反斜杠与后续字符都被保留原始字符串不能以奇数个反斜杠结尾常用于构造正则表达式前缀字符r、R、b、B可选分别表示 raw/regex 字符串与字节序列如babc类型为 BYTES前缀大小写不敏感。字符串字面量中的合法转义序列其他任何序列都会报错转义序列含义\aBell\bBackspace\fFormfeed\n换行\r回车\tTab\v垂直制表符\\反斜杠\?问号\双引号\单引号\反引号\ooo八进制转义恰好三位数字0-7解码为单个 Unicode 字符\xhh/\Xhh十六进制转义恰好两位十六进制数字解码为单个 Unicode 字符如\x41A\uhhhhUnicode 转义小写u 四位十六进制数字仅用于字符串或标识符不允许 D800-DFFF代理区\UhhhhhhhhUnicode 转义大写U 八位十六进制数字不允许 D800-DFFF也不允许大于 10FFFF整数与浮点字面量123 0xABC -- 十六进制 -123 123.456e-67 -- 浮点 .1E4 4e2整数字面量十进制或0x前缀十六进制可带/-解释为INT64。含小数点或指数标记的数字字面量默认为 double 类型若数值在 float 有效范围内可隐式强转为 float。没有 NaN 或无穷大的字面量表示。数组字面量方括号包围的逗号分隔元素列表ARRAY关键字与显式元素类型T均可选[1, 2, 3] [x, y, xy] ARRAY[1, 2, 3] ARRAYstring[x, y, xy]时间戳字面量TIMESTAMP关键字 符合规范格式的字符串字面量支持 1 到 9999 年含。可以用数值后缀表示时区缺省时使用默认时区Beam SQL 实现设置的默认值即 UTCTIMESTAMP 2014-09-27 12:30:00.45-08 TIMESTAMP 2014-09-27 12:30:00.45 -- 按 UTC 解释 TIMESTAMP 2014-09-27 12:30:00 America/Los_Angeles时区时间戳字面量必须映射到确定的时间点因此需要时区来解释。时区有两种表示法UTC 偏移格式(|-)H[H][:M[M]]如-08:00、07:30、-7或 tz database 的时区名如America/Los_Angeles、America/Argentina/Buenos_Aires。注意并非所有报告相同时间的时区名都可互换——例如America/Los_Angeles在夏令时期间与UTC-7:00相同非夏令时期间则与UTC-8:00相同。符合规范格式的字符串字面量在需要时间戳表达式的位置会隐式强转为时间戳字面量例如SELECT * FROM foo WHERE timestamp_col 2014-09-27 12:30:00.45 America/Los_Angeles;大小写敏感性类别是否大小写敏感说明关键字否函数名否表名视情况通常不敏感但当查询的数据库本身使用大小写敏感表名时可能敏感列名否字符串值是字符串比较是查询内别名否正则表达式匹配视情况默认大小写敏感除非表达式自身指定不敏感LIKE匹配是保留关键字关键字是不能用作标识符除非用反引号包围且大小写不敏感的 token。Beam SQL 的保留关键字包括ALL、AND、ANY、ARRAY、AS、ASC、BETWEEN、BY、CASE、CAST、CREATE、CROSS、CUBE、DEFAULT、DESC、DISTINCT、ELSE、END、EXCEPT、EXISTS、EXTRACT、FALSE、FETCH、FOR、FROM、FULL、GROUP、HAVING、IF、IN、INNER、INTERSECT、INTERVAL、IS、JOIN、LATERAL、LEFT、LIKE、LIMIT、NATURAL、NOT、NULL、NULLS、OF、ON、OR、ORDER、OUTER、OVER、PARTITION、RANGE、RECURSIVE、RIGHT、ROLLUP、ROWS、SELECT、SET、SOME、STRUCT、THEN、TO、TRUE、UNION、UNNEST、USING、WHEN、WHERE、WINDOW、WITH等完整清单见 lexical.md。终止分号与注释终止分号通过 API 提交查询字符串时语句末尾的分号可选某些交互式工具要求分号结尾。包含多条语句的请求中语句之间必须用分号分隔最后一条语句的分号可选单行注释以#或--开头注释包含从标记到行尾的所有字符多行注释用/* ... */包围包含首个/*到首个*/之间的所有字符含换行。不支持嵌套注释。数据类型Data typesBeam ZetaSQL 支持标准 SQL 标量数据类型以及包括数组ARRAY、映射MAP和嵌套行STRUCT在内的扩展。完整参考见>ARRAYINT64 -- 64 位整数数组 ARRAYSTRUCTINT64, INT64 -- 每个元素为含两个 INT64 的 STRUCT ARRAYARRAYINT64 -- 非法ARRAY 不能直接嵌套 ARRAY ARRAYSTRUCTARRAYINT64 -- 通过 STRUCT 间接实现数组的数组STRUCT有序字段的容器每个字段有类型必填和字段名可选。STRUCT 的元素类型可以任意复杂STRUCTINT64 -- 含单个未命名 INT64 字段 STRUCTx STRUCTy INT64, z INT64 -- 嵌套 STRUCT字段 y、z 均为 INT64 STRUCTinner_array ARRAYINT64 -- 包含名为 inner_array 的 INT64 数组字段STRUCT 的相等比较按序逐字段比较并忽略字段名如需比较同名字段应直接比较单个字段。函数与运算符Functions and operatorsBeam ZetaSQL 支持的内置函数与运算符清单由源码 SupportedZetaSqlBuiltinFunctions.java 以白名单ALLOWLIST形式维护其中被注释掉的条目即尚未支持。该文件与 ZetaSQL 上游的builtin_function.proto保持同步最近同步的 ZetaSQL 版本为 2020.06.01。各函数的具体语义以 ZetaSQL 官方 functions-and-operators 参考为准。函数调用规则对所有函数除非函数描述中另有说明适用以下规则对接受数值类型的函数若一个操作数是浮点、另一个是其他数值类型则在函数求值前两者都转换为 FLOAT64若某个操作数为NULL结果通常为NULLIS运算符除外对时区敏感的函数未指定时区时使用默认时区 UTC。运算符优先级运算符用特殊字符或关键字表示不使用函数调用语法。除非另有说明当一个操作数为NULL时所有运算符返回NULL。以下按从高到低列出支持的运算符优先级完整表见 operators.md优先级运算符输入类型名称元数1.STRUCT成员字段访问二元1[ ]ARRAY数组定位须与 OFFSET/ORDINAL 搭配二元2-所有数值类型一元负号一元3*、/所有数值类型乘法、除法二元4、-所有数值类型加法、减法二元5、、、、、/!任意可比类型比较运算符二元...AND、OR、NOT等BOOL逻辑运算符二元/一元已支持的内置函数按类别依据白名单源码已支持的内置函数主要分为以下几类括号内为函数签名示例字符串函数concat、strpos、lower、upper、length、starts_with、ends_with、substr、trim、ltrim、rtrim、replace、char_length与length语义相同、left、right、reverse。控制流函数if、coalesce用于表达 FULL JOIN 的输出连接列、ifnull、nullif。时间函数current_date、current_datetime、current_time、current_timestamp、date_add/datetime_add/time_add/timestamp_add、date_diff/datetime_diff/time_diff/timestamp_diff、date_sub/datetime_sub/time_sub/timestamp_sub、date_trunc/datetime_trunc/time_trunc/timestamp_trunc、date_from_unix_date、timestamp_seconds、timestamp_millis、timestamp_from_unix_seconds、timestamp_from_unix_millis、unix_date、unix_seconds、unix_millis、date、timestamp、time、datetime、string从时间戳转字符串、$extract系列EXTRACT日期部分提取以及format_date/format_datetime/format_time/format_timestamp、parse_date/parse_datetime/parse_time/parse_timestamp。数学函数abs、sign、round、trunc、ceil、floor、mod、div、is_inf、is_nan、ieee_divide、safe_divide、safe_add、safe_subtract、safe_multiply、safe_negate、sqrt、pow、exp、ln、log10、log、cos、cosh、acos、acosh、sin、sinh、asin、asinh、tan、tanh、atan、atanh、atan2。聚合函数any_value、array_agg、avg、count、countif、max、min、string_agg含分隔符重载、sum、bit_and、bit_or、bit_xor。仓库测试 ZetaSqlDialectSpecTest.java 对这些函数逐一验证了方言行为。JSON 函数json_extract、json_extract_scalar、json_extract_array、to_json_string、json_query、json_value。哈希函数md5、sha1、sha256、sha512。尚未支持被注释的函数类别白名单中以注释形式保留了大量未启用条目使用时需注意位运算$bitwise_not、$bitwise_or、$bitwise_and、移位等与bit_count正则系列regexp_match、regexp_extract、regexp_replace、regexp_extract_all、regexp_containsformat、split、lpad/rpad、repeat、ascii、chr、soundex、initcap、translate、unicode等字符串函数greatest/least、between运算符、error数组函数array_length、array_concat、array_reverse、array_to_string、array_at_offset等timestamp_micros、unix_micros、last_day等时间函数近似聚合approx_count_distinct、approx_quantiles等、统计聚合stddev、variance、corr、covar等、HLL/KLL 系列分析函数窗口函数rank、dense_rank、row_number、lead、lag、first_value、last_value、percentile_*等generate_array、range_bucket、rand、generate_uuid、farm_fingerprintnet.*网络函数、ST_*地理函数、加密/密钥管理函数。这些条目被注释意味着 parser 尚未开放对应的函数签名支持。若在查询中使用会因函数签名不在白名单内而无法通过分析。Beam SQL 扩展所有方言通用Beam SQL 还有一些利用 Beam 统一批/流模型与复杂数据类型处理能力的扩展适用于包括 Beam ZetaSQL 在内的所有方言参见 Beam SQL overview 与 overview.md。这意味着你在 ZetaSQL 方言下同样可以使用 Beam 特有的流式窗口、多输出等 PTransform 级能力同时享受接近 BigQuery 的 SQL 语义。源码中的实现链路与限制小结从源码结构看Beam ZetaSQL 的查询链路为ZetaSQLQueryPlannerZetaSQLQueryPlanner.java作为方言入口读取默认时区配置、替换规则集SqlAnalyzerSqlAnalyzer.java调用 ZetaSQLAnalyzer做词法/语法分析与语义解析支持CREATE FUNCTION、CREATE TABLE FUNCTION等语句对应SUPPORTED_STATEMENT_KINDSZetaSQLPlannerImplZetaSQLPlannerImpl.java把解析出的 ResolvedQueryStmt 通过QueryStatementConverter及各RelConverter子类转换为 Calcite 关系表达式最终由transform产出 Beam 物理计划translation/目录下的 converter如JoinScanConverter、AggregateScanConverter、TableScanConverter、SetOperationScanConverter等与unnest/目录下的 UNNEST 相关 Rel 节点共同负责把 ZetaSQL 的各类扫描、连接、聚合、集合运算映射为 Beam 关系算子。因此文档中描述的语法限制在源码中有对应印证例如 JOIN 只支持等值连接、WITH RECURSIVE不支持、顶层 SELECT 必须显式别名、GROUP BY 不允许 FLOAT64FEATURE_DISALLOW_GROUP_BY_FLOAT语言特性默认开启等均可在上述实现中找到依据。总结Beam ZetaSQL 是 Beam SQL 面向 BigQuery 兼容场景的方言选择语法与 ZetaSQL/BigQuery 高度一致适合在读写 BigQuery 的管线中使用。切换方言只需一行配置setPlannerName指向ZetaSQLQueryPlanner并引入beam-sdks-java-extensions-sql-zetasql依赖。在使用时请重点留意JOIN 仅支持等值连接、不支持WITH RECURSIVE、SELECT顶层表达式需显式别名、函数白名单机制注释条目不可用、TIMESTAMP 为毫秒精度、ARRAY 不能直接嵌套 ARRAY 等边界约束。相关文档与源码索引方言总览website/www/site/content/en/documentation/dsls/sql/zetasql/overview.md查询语法query-syntax.md词法结构lexical.md数据类型data-types.md运算符operators.md字符串函数string-functions.md聚合函数aggregate-functions.md转换规则conversion-rules.mdPlanner 入口ZetaSQLQueryPlanner.java函数白名单SupportedZetaSqlBuiltinFunctions.java方言规格测试ZetaSqlDialectSpecTest.java赞分享批处理流处理大数据【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam15/beam点击查看免费下载相关推荐Apache Beam ZetaSQL 方言完全指南语法、数据类型、函数与迁移路径Apache Beam ZetaSQL 方言完全指南语法、数据类型、函数与迁移路径 Apache Beam 的 SQL 模块在 Calcite 默认方言之外大数据批处理流处理数据工程Apache Beam Calcite SQL 方言总览语法、数据类型、函数支持矩阵与版本兼容性Apache Beam Calcite SQL 方言总览语法、数据类型、函数支持矩阵与版本兼容性 Beam Calcite SQL 是 Apache Beam大数据批处理流处理数据工程Apache Beam ZetaSQL 数学函数详解MOD、CEIL、CEILING 与 FLOOR 的语义与实现Apache Beam ZetaSQL 数学函数详解MOD、CEIL、CEILING 与 FLOOR 的语义与实现 本文以 Apache Beam ZetaS批处理流处理大数据上一篇GTA5线上小助手解锁洛圣都无限可能的终极指南下一篇swift package compute-checksum 详解SwiftPM 二进制产物校验和计算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考