使用时间旅行和故障安全功能保留数据
本文档介绍数据集的时间旅行和故障安全数据保留窗口。在时间旅行和故障安全期间,您在数据集内任何表中更改或删除的数据会继续存储,以备日后需要恢复时使用。
时间旅行
您可以访问时间旅行窗口(默认涵盖过去 7 天)中任何时间点的数据。借助“时间旅行”,您可以查询已更新或删除的数据、恢复已删除的表或数据集或者恢复已过期的表。
配置时间旅行窗口
您可以将时间旅行窗口的持续时间设置为最少 2 天到最多 7 天。默认值为 7 天。您可以在数据集级层设置时间旅行窗口,然后该时间旅行窗口将应用于数据集中的所有表。 还可以配置项目级默认值。
如果需要恢复更长时间内的已更新和已删除数据,您可以将时间旅行窗口配置得更长,如果不需要,则可以配置得更短。使用较短的时间旅行窗口可以帮助您在使用物理存储结算模式时节省存储费用。使用逻辑存储结算模式时,这些费用节省不适用。
如需详细了解存储结算模式对费用的影响,请参阅结算。
时间旅行窗口对表和数据集恢复有何影响
已删除的表或数据集使用删除时生效的时间旅行窗口时长。
例如,如果您的时间旅行窗口的持续时间为 2 天,然后将持续时间增加到 7 天,则在该更改之前删除的表仍然只有 2 天可恢复。同样,如果您将时间旅行窗口持续时间设置为 5 天,然后将持续时间减少到 3 天,则在更改之前删除的所有表仍有 5 天可恢复。
由于时间旅行窗口在数据集级层设置,因此在恢复删除之前,您无法更改已删除数据集的时间旅行窗口。
如果您缩短时间旅行窗口的持续时间,删除一个表,然后您发现该数据需要更长的恢复时间,则可以创建在删除表之前某个时间点的表的快照。您必须在删除表仍可恢复时执行此操作。如需了解详情,请参阅使用时间旅行创建表快照。
指定时间旅行窗口
您可以使用 Google Cloud 控制台、bq 命令行工具或 BigQuery API 来指定数据集的时间旅行窗口。
如需了解如何为新数据集指定时间旅行窗口,请参阅创建数据集。
如需了解如何更新现有数据集的时间窗口,请参阅更新时间窗口。
如果时间戳指定的时间不在时间旅行窗口内或早于创建表的时间,则查询会失败并返回如下错误:
TableID
was created at time which is before its allowed time travel intervaltimestamp
. Creation time:timestamp
时间旅行和行级访问权限
如果表具有或以前具有行级访问权限政策,则只有表管理员可以访问表的历史数据。
需要以下 Identity and Access Management (IAM) 权限:
权限 | 资源 |
---|---|
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
|
要访问其历史数据的表 |
以下 BigQuery 角色提供所需的权限:
角色 | 资源 |
---|---|
roles/bigquery.admin
|
要访问其历史数据的表 |
无法将 bigquery.rowAccessPolicies.overrideTimeTravelRestrictions
权限添加到自定义角色。
运行以下命令以获取等效的 Unix 纪元时间:
date -d '2023-08-04 16:00:34.456789Z' +%s000
在 bq 命令行工具中替换从上述命令收到的 UNIX 纪元时间
1691164834000
。运行以下命令,在同一数据集myDatasetID
内的另一个表restoredTable
中恢复已删除表deletedTableID
的副本:bq cp myProjectID:myDatasetID.deletedTableID@1691164834000 myProjectID:myDatasetID.restoredTable
故障安全
BigQuery 提供故障安全期。在故障安全期间,已删除的数据会在时间旅行窗口后自动额外保留七天,以供紧急恢复时使用。数据在表级层恢复。系统会从表被删除的时间戳表示的时间点恢复表数据。故障安全期不可配置。
您无法查询或直接恢复故障安全存储空间中的数据。若要从故障安全存储空间恢复数据,请与 Cloud Customer Care 团队联系。
结算
如果您将存储结算模式设置为使用物理字节,则系统会单独为用于时间旅行和故障安全存储的字节收费。时间旅行和故障安全存储按活跃物理存储费率收费。您可以配置时间旅行窗口,以在存储费用和数据保留需求之间进行权衡。
如果您将存储结算模式设置为使用逻辑字节,则时间旅行和故障安全存储的总存储费用包含在您需要支付的基本费率中。
下表对物理和逻辑存储费用进行了比较:
结算模式 | 收费项 |
---|---|
物理(压缩)存储 |
|
逻辑(未压缩)存储(默认设置) |
|
如果您使用物理存储,则可以查看时间旅行和故障安全使用的字节数,只需查看 TABLE_STORAGE
和 TABLE_STORAGE_BY_ORGANIZATION
视图中的 TIME_TRAVEL_PHYSICAL_BYTES
和 FAIL_SAFE_PHYSICAL_BYTES
列。 如需了解如何使用其中一种视图估算费用的示例,请参阅预测存储结算。
存储费用适用于时间旅行和故障安全数据,但只有在 BigQuery 中的其他位置不适用数据存储费用的情况下,您才需要支付费用。适用以下详细信息:
- 创建表时,不会产生时间旅行或故障安全存储费用。
- 如果更改或删除数据,系统会针对在时间旅行窗口和故障安全期内通过时间旅行保存的已更改或已删除数据收取存储费用。这与表快照和克隆的存储价格类似。
数据保留示例
下表显示了已删除或已更改数据如何在存储保留窗口之间移动。以下示例展示了一种情况:总共活跃存储为 200 GiB,其中 50 GiB 已删除,时间旅行窗口为 7 天:
第 0 天 | 第 1 天 | 第 2 天 | 第 3 天 | 第 4 天 | 第 5 天 | 第 6 天 | 第 7 天 | 第 8 天 | 第 9 天 | 第 10 天 | 第 11 天 | 第 12 天 | 第 13 天 | 第 14 天 | 第 15 天 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
活跃存储 | 200 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 |
时间旅行存储 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | |||||||||
故障安全存储 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |
从长期物理存储中删除数据的方式也是相同的。
限制
- 时间旅行仅提供对时间旅行时间段内的历史数据的访问。如果您希望非紧急用途的表数据的保留时间超过时间旅行窗口的时长,请使用表快照。
- 如果表具有或以前具有行级访问权限政策,则时间旅行只能由表管理员使用。如需了解详情,请参阅时间旅行和行级访问权限。
- 时间旅行不会恢复表元数据。
- 以下表类型不支持时间旅行:
- 外部表
- 临时缓存的查询结果表
- 临时会话表
- 临时多语句表
- 列在外部数据集下的表。
后续步骤
- 了解如何查询和恢复时间旅行数据。
- 详细了解表快照。