TimeTravel on Iceberg

Time travel支持使用表快照来进行查询,让版本回滚,允许用户通过将表重置到某个状态。

每个 Apache Iceberg 表都维护其包含的 S3 对象的版本清单。历史的版本清单可用于time travelversion travel查询:

  • Athena 中的time travel查询从指定日期和时间的一致快照中查询S3 的历史数据。
  • Athena 中的version travel查询向S3 查询截至指定快照 ID 的历史数据。

假设数据所有者对表进行了编辑,导致数据意外删除。例如在上一节,我们删除了特定客户的记录,但外部方正在进行调查该用户的可疑活动,我们仍然要查找该用户的记录。为此,我们可以检索该表可用的快照。

Time Travel查询

要检索快照 ID 和时间戳,可以从 Athena 查询 Iceberg 系统表:

SELECT * FROM "default"."customers_iceberg$history";

image-20231202071310150

输出中的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;

image-20231202071541294

Version Travel查询

我们现在使用version travel的方式来查询用户最开始的email值。

执行以下查询:

SELECT * FROM "default"."customers_iceberg$history";

image-20231202072116776

上面执行的查询还返回了一列 snapshot_id

将下面的查询复制并粘贴到 Athena 查询编辑器中, 将文本:«snapshot_id»替换为第一行的snapshot_id列值:

select * from "default"."customers_iceberg" FOR VERSION AS OF <<snapshot_id>> where "customer_id" = 10473;

显示出客户一开始的email(未经update)值:

image-20231202080009554

更多time travelversion travel的资料请查看: https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-tables.html