Time travel
支持使用表快照来进行查询,让版本回滚,允许用户通过将表重置到某个状态。
每个 Apache Iceberg 表都维护其包含的 S3 对象的版本清单。历史的版本清单可用于time travel
和version travel
查询:
time travel
查询从指定日期和时间的一致快照中查询S3 的历史数据。version travel
查询向S3 查询截至指定快照 ID 的历史数据。假设数据所有者对表进行了编辑,导致数据意外删除。例如在上一节,我们删除了特定客户的记录,但外部方正在进行调查该用户的可疑活动,我们仍然要查找该用户的记录。为此,我们可以检索该表可用的快照。
要检索快照 ID 和时间戳,可以从 Athena 查询 Iceberg 系统表:
SELECT * FROM "default"."customers_iceberg$history";
输出中的made_current_at
列,包含表过去状态相对应的时间戳**。**
现在让我们检索被删除的记录。将下面的查询复制并粘贴到 Athena 查询编辑器中。将文本 : «made_current_at»替换 为第二行的made_current_at 列值。
select * from "default"."customers_iceberg" FOR TIMESTAMP AS OF TIMESTAMP '<<made_current_at>>' where "customer_id" = 10473;
我们现在使用version travel的方式来查询用户最开始的email
值。
执行以下查询:
SELECT * FROM "default"."customers_iceberg$history";
上面执行的查询还返回了一列 snapshot_id
将下面的查询复制并粘贴到 Athena 查询编辑器中, 将文本:«snapshot_id»替换为第一行的snapshot_id列值:
select * from "default"."customers_iceberg" FOR VERSION AS OF <<snapshot_id>> where "customer_id" = 10473;
显示出客户一开始的email(未经update)值:
更多time travel
和version travel
的资料请查看: https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-tables.html