BigQuery 标准 SQL 与旧版 SQL

虽然 SQL 不具有像 Python(或任何其他脚本语言)那样的底层依赖项,但您选择的 BigQuery SQL 版本存在差异。

由于 Google Cloud Platform 认识到开发人员熟悉不同的 SQL 方言,因此他们为那些可能习惯使用更传统或"旧版"SQL 版本的用户提供了选项。

标准 SQL 与旧版 SQL 之间的区别

标准 SQL 与旧版 SQL 之间的主要区别在于类型映射。虽然旧版 SQL 支持与通用数据类型更紧密一致的类型,但标准 SQL 类型更特定于 BigQuery。例如,BigQuery 标准 SQL 支持的时间戳值范围要窄得多。

其他差异包括 −

  • 使用反引号而不是括号来转义特殊字符。
  • 表引用使用冒号而不是点。
  • 不支持通配符。

在 BigQuery SQL 环境中切换标准和旧版 SQL 很容易。在编写和执行 SQL 查询之前,只需在第 1 行添加注释:"#legacy"。

BigQuery 的标准 SQL 优势

与衍生的旧版 SQL 方言相比,标准 SQL 使 SQL 开发人员能够以更高的灵活性和效率编写查询。标准 SQL 通过提供在处理专业环境中遇到的"混乱"数据时有用的函数和框架,提供了更多"现实世界"实用性。

标准 SQL 有助于实现以下功能 −

  • 更灵活的 WITH 子句,使用户能够在脚本中多次重复使用子查询和 CTE。
  • 可以用 SQL 或 JavaScript 编写的用户定义函数。
  • SELECT 子句中的子查询。
  • 相关子查询。
  • 复杂数据类型(ARRAY 和 STRUCT 类型)。

标准 SQL 和旧版 SQL 之间的不兼容性

通常,标准 SQL 和旧版 SQL 操作之间的不兼容性不会引发很多问题。但是,有一种情况适用于 AirFlow 用户。

如果使用 BigQueryExecuteQuery 运算符,则可以指定是否使用旧版 SQL。要使用标准 SQL,请设置 "use_legacy_sql = FALSE"

但是,如果开发人员未能做到这一点,并使用仅与标准 SQL 兼容的函数,如 TIMESTAMP_MILLIS()(时间戳转换函数),则整个查询可能会失败。