旧版 SQL 中的表修饰器
通常,BigQuery 会在运行查询时执行全面列扫描。
您可以使用旧版 SQL 中的表修饰器来对部分数据执行经济有效的查询。无论何时读取表(例如复制表、导出表或使用 tabledata.list
列出数据时),您都可以使用表修饰器。
表修饰器支持相对和绝对 <time>
值。相对值用负数表示,绝对值用正数表示。例如,-3600000
表示相对于当前时间的一个小时以前(以毫秒为单位);3600000
表示 1970 年 1 月 1 日之后的一个小时(以毫秒为单位)。
时间修饰器
时间修饰器(以前称为快照修饰器)引用某个时间点的表历史数据。
语法
@<time>
- 引用
<time>
(以毫秒为单位,从 Epoch 起算)时间点的表历史数据。 <time>
必须在最近 7 天范围内,且不得早于表的创建时间,但必须早于表的删除或到期时间。@0
是一种特殊情况,它引用表可用的最早数据。
时间修饰器也在旧版 SQL 之外使用。您可以在表删除后的七天内通过 bq cp
命令使用它们来恢复已删除的表](/bigquery/docs/managing-tables#undeletetable)。
示例
如需获取一小时前某个表的历史数据,请使用以下语句:
相对值示例
#legacySQL
SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@-3600000]
绝对值示例
获取一小时前对应的
<time>
:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
然后,替换以下查询中的
<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-]
绝对值示例
如需获取一小时前到半小时前之间添加的表数据,请运行以下命令:
获取一小时前对应的
<time1>
:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -1, 'HOUR')/1000)
获取半小时前对应的
<time2>
:#legacySQL SELECT INTEGER(DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -30, 'MINUTE')/1000)
替换以下查询中的
<time1>
和<time2>
:#legacySQL SELECT COUNT(*) FROM [PROJECT_ID:DATASET.TABLE@time1-time2]