旧版 SQL 中的表修饰器

本文档详细介绍了如何使用旧版 SQL 查询语法中的表修饰器。BigQuery 的首选查询语法是标准 SQL。目前,标准 SQL 不支持表修饰器,但您可以通过对 _TABLE_SUFFIX 伪列使用过滤条件,在标准 SQL 中实现表修饰器语义。如需了解详情,请参阅标准 SQL 迁移指南中的表修饰器和通配符函数

通常,BigQuery 会在运行查询时执行全面列扫描。您可以使用旧版 SQL 中的表修饰器来对部分数据执行经济有效的查询。无论何时读取表(例如复制表、导出表或使用 tabledata.list 列出数据时),您都可以使用表修饰器。

表修饰器支持相对和绝对 <time> 值。相对值用负数表示,绝对值用正数表示。例如,-3600000 表示相对于当前时间的最近一小时时间(以毫秒为单位);3600000 表示 1970 年 1 月 1 日之后的一小时时间(以毫秒为单位)。

快照修饰器

语法

@<time>
  • 引用 <time>(以毫秒为单位,从 Epoch 起算)时间的表快照。
  • <time> 必须在最近 7 天范围内,且不得早于表的创建时间。
  • @0 是一种特殊情况,它引用表可以获得的最早的快照:7 天前对应时间的快照,或者表的创建时间对应的快照(如果表的创建时间少于 7 天)。

表删除后的两天内,您可以使用快照修饰器恢复删除的表

示例

要获取一小时前对应的表快照,请按如下所示操作:

相对值示例

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]

绝对值示例

  1. 获取一小时前对应的 <time>

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 然后,替换以下查询中的 <time>

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time]
    

范围修饰器

语法

@<time1>-<time2>
  • 引用 <time1><time2>(以毫秒为单位,从 Epoch 起算)期间添加的表数据。
  • <time1><time2> 必须在最近 7 天的范围内。
  • <time2> 是可选项,默认值为“now”。

示例

相对值示例

要获取一到半小时前添加的表数据,请运行如下命令:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000--1800000]

要获取最近 10 分钟的数据,请运行如下命令:

#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-600000-]

绝对值示例

要获取一到半小时前添加的表数据,请运行如下命令:

  1. 获取一小时前对应的 <time1>

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
    
  2. 获取半小时前对应的 <time2>

    #legacySQL
    SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
    
  3. 替换以下查询中的 <time1><time2>

    #legacySQL
    SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]
    
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面