接下来创建快照 snapshot-2,并在请求体中指定一些参数: indices 参数指明只对索引 index-1 和 index-2 进行备份。 PUT _snapshot/my-repository/snapshot-2 { "indices": "index-1,index-2",// 备份的索引和者数据流 "ignore_unavailable GET _snapshot/my-repository/snapshot-2 # 返回结果 { "snapshots" : [ { "snapshot" : "snapshot
创建一个新快照,即 snapshot-2,并为我们提供以下物理文件布局: % ls -atR . . /T/snapshot: LATEST snapshot-2 EARLIEST snapshot-1 . -9ac2-5e79-4978-a3bc-86c25f1a303f-0 # base manifest list for snapshot-2 manifest-f1267033-e246-4470-a54c -5c27fdbdd074-0 # manifest file for snapshot-2 manifest-list-4ccc-c07f-4090-958c-cfe3ce3889e5-1 # delta /T/schema: schema-0 截至 snapshot-2 的新文件布局如下所示: 2.10.2 删除数据 执行如下删除: DELETE FROM T WHERE dt >= ‘20230503
同理,会有 snapshot-2,snapshot-3。 Iceberg 提供的一个重要能力,就是读写分离能力。 在对 snapshot-4 进行写的时候,其实是完全不影响对 snapshot-2 和 snapshot-3 的读。Iceberg 的这个能力对于构建实时数仓是非常重要的能力之一。 图 10 同理,读也是可以并发的,可以同时读 s1、s2、s3 的快照数据,这就提供了回溯读到 snapshot-2 或者 snapshot-3 数据的能力。 首先我们知道 Iceberg 的读操作只能基于已经提交完成的 snapshot-1,此时会有一个 snapshot-2,可以看到每个 snapshot 都包含前面 snapshot 的所有数据,如果每次都读全量的数据
又生成了snapshot-2。✨OneLineTimeTravel!