gpt4 book ai didi

google-bigquery - Bigquery "FOR SYSTEM_TIME AS OF"数据恢复功能保证

转载 作者:行者123 更新时间:2023-12-05 02:58:26 26 4
gpt4 key购买 nike

在 Google BigQuery 中,可以检索过去(至少过去 7 天)的表(快照)行:

对于 Legacy SQL,我们可以使用 snapshot decorators :

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

使用标准 SQL,我们可以使用 FOR SYSTEM_TIME AS OF in FROM clause :

#standardSQL
SELECT *
FROM `PROJECT_ID.DATASET.TABLE`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

两个示例都返回 PROJECT_ID.DATASET.TABLE 一小时前的快照。

但是我想知道是否有任何保证可以检索过去的表数据。一位同事告诉我,他在某处读到(但他再也找不到了)这是一个“尽力而为”的功能,因此可能会丢失一些数据。

只要恢复在错误发生后的 7 天内完成,此功能是否可用于生产环境中的数据恢复(例如,如果有人无意中截断了一个重要的表)?是否可以保证我们可以访问在特定时间存储的全部数据

更新

正如@Pentium10 在评论中正确指出的那样,在对表执行CREATE OR REPLACE 作业后恢复旧数据是不可能的。经过一些尝试后,我什至会添加使用其中之一执行的作业 statement types :

  • CREATE_TABLE(创建或替换)
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE

完全消除了为该特定表及时检索数据的能力。

但是,假设我们只使用以下语句类型来修改表数据:

  • 插入
  • 更新
  • 删除
  • 合并

是否可以保证 t 的快照数据完全 t 的表中包含的数据?或者这是一个“尽力而为”的功能?

最佳答案

FOR SYSTEM_TIME AS OF语法对于在多个时间点查询表很有用,但我建议使用带有 @<time> 的 BigQuery CLI 复制命令。当您需要恢复或回滚表时使用装饰器。 (有关完整引用,请参阅 CLI 示例 here。)为此,首先确定目标恢复时间(以纪元毫秒为单位)。接下来,从本地计算机或 Google Cloud Shell 运行复制命令;将纪元时间附加到表名,如下所示。

bq cp test_data_set.weather_data@1588643412000 test_data_set.recovered_weather_data

请注意,您不能直接就地恢复表 - 您需要将快照复制到不同的表名,然后再复制回原始表。

bq cp test_data_set.recovered_weather_data test_data_set.weather_data

使用 BigQuery CLI 比使用 FOR SYSTEM_TIME AS OF 运行查询的优势是即使在架构更改或删除的情况下,它也可以恢复或回滚表。复制命令适用于表存在时的任何时间戳,可以追溯到 7 天。 (删除表的恢复窗口以前是两天,但最近延长了。)

关于恢复 SLA,了解 BigQuery 的架构很有帮助。列数据 block 作为对象存储在 Colossus 文件系统(谷歌云存储)中,BigQuery 使用写入时复制策略执行更新。实际上,这意味着不需要备份过程 - BigQuery 只是保留旧的列数据 block 和元数据(因此,表版本),直到它们被垃圾收集。 BigQuery 在更新或删除后 7 天触发垃圾回收过程。

如上所述,回滚和恢复被宣传为 BigQuery 的核心功能。 (例如,请参阅 BigQuery landing page 上的标题自动备份和轻松还原。)因此,它似乎受制于其他 BigQuery 功能的标准服务级别协议(protocol)。

关于google-bigquery - Bigquery "FOR SYSTEM_TIME AS OF"数据恢复功能保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59048115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com