使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

使用时间旅行访问历史数据

借助 BigQuery,您可以使用“时间旅行”访问在 BigQuery 中存储但已更改或删除的数据。您可以访问时间旅行窗口(涵盖过去 7 天)中任何时间点的数据。借助“时间旅行”,您可以查询已更新或删除的数据、恢复已删除的表或者恢复已过期的表。

限制

  • 时间旅行仅提供对时间旅行时间段内的历史数据的访问。如需要保留表数据的时间超过时间旅行窗口,请使用表快照

  • 如果表具有或以前具有行级访问权限政策,则时间旅行只能由表管理员使用。如需了解详情,请参阅时间旅行和行级访问权限

查询某个时间点的数据

您可以使用 FOR SYSTEM_TIME AS OF 子句来查询表内任何时间点的历史数据。此子句接受常量时间戳表达式,并引用该时间戳上的最新表版本。该表必须存储在 BigQuery 中;它不能是外部表。 使用 SYSTEM_TIME AS OF 时,表没有大小限制。

例如,以下查询返回表在过去一个小时内的历史版本:

SELECT *
FROM `mydataset.mytable`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

如果时间戳指定的时间早于时间旅行窗口或早于创建表的时间,则查询会失败并返回如下错误:

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

如果使用 CREATE OR REPLACE TABLE 语句替换现有表,则仍可使用 FOR SYSTEM_TIME AS OF 查询表的先前版本。

如果表已删除,则查询会失败并返回如下错误:

Not found: Table myproject:mydataset.table was not found in location US

但是,您可以通过从某个时间点复制到新表来恢复表,如本文档中所述。

从某个时间点恢复表

您可以将历史数据复制到表中,以从历史数据中恢复表。即使表已删除或过期,只要您在时间旅行时间段内恢复表,复制数据也仍然有效。

要复制表中的历史数据,请使用以下语法将修饰器添加到表名称:

  • tableid@TIME,其中 TIME 是与 Unix 计时原点之间相隔的毫秒数。
  • tableid@-TIME_OFFSET,其中 TIME_OFFSET 是相对于当前时间的偏移量(以毫秒为单位)。
  • tableid@0:指定可用的最旧历史数据。

例如,以下 bq 命令行工具命令会将一小时前名为 table1 的表复制到名为 table1_restored 的表中。时间 -3600000 使用相对偏移量进行指定(以毫秒为单位)。

bq cp mydataset.table1@-3600000 mydataset.table1_restored

以下 bq 命令行工具命令会将名为 table1 的表复制到名为 table1_restored 的表。时间 1624046611000 指定为与 Unix 计时原点之间相隔的毫秒数。

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

如需了解详情,请参阅恢复已删除的表

配置时间旅行窗口

您可以将时间旅行窗口的持续时间设置为最少 2 天到最多 7 天。默认值为 7 天。您可以在数据集级层设置时间旅行窗口,然后该时间旅行窗口将应用于数据集中的所有表。

您可以按以下方式配置时间旅行窗口:在拥有恢复数据的选项更重要时将时间旅行窗口配置为较长的时间,在该选项无关紧要时将时间旅行窗口配置为较短的时间。使用较短的时间旅行窗口可以节省存储费用。它还使您能够遵守数据保留政策,这些政策要求在特定时间范围内硬删除数据。

时间窗口对表恢复有何影响

已删除的表与在删除表时生效的时间旅行窗口永久关联。

例如,如果您的时间旅行窗口的持续时间为 2 天,然后将持续时间增加到 7 天,则在该更改之前删除的表仍然只有 2 天可恢复。

同样,如果您将时间旅行窗口持续时间设置为 5 天,然后将持续时间减少到 3 天,则在更改之前删除的所有表仍有 5 天可恢复。

如果您缩短时间旅行窗口的持续时间,删除一个表,然后您发现该数据需要更长的恢复时间,则可以创建在删除表之前某个时间点的表的快照。为了获得成功,您必须执行在已删除的表仍可恢复时执行此操作。如需了解详情,请参阅使用时间旅行创建表快照

指定时间旅行窗口

您可以使用 Google Cloud Console、bq 命令行工具或 BigQuery API 来指定数据集的时间范围窗口。

如需了解如何为新数据集指定时间旅行窗口,请参阅创建数据集

如需了解如何更新现有数据集的时间窗口,请参阅更新时间窗口

时间旅行和行级访问权限

如果表具有或以前具有行级访问权限政策,则只有表管理员可以访问表的历史数据。

需要以下 Identity and Access Management (IAM) 权限:

权限 资源
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions 要访问其历史数据的表

以下 BigQuery 角色提供所需的权限:

角色 资源
roles/bigquery.admin 要访问其历史数据的表

无法将 bigquery.rowAccessPolicies.overrideTimeTravelRestrictions 权限添加到自定义角色

后续步骤