IBM Cloud Docs
数据摄取、时间旅行和表回滚

数据摄取、时间旅行和表回滚

本教程将指导您完成在watsonx.data 中摄取数据、执行时间旅行和表回滚操作的过程。

数据摄取

数据导入是将数据导入并加载到watsonx.data 的过程。 您可以通过以下方法在watsonx.data中执行数据摄取:

  • 使用数据管理器页面的“从文件创建表格”选项输入数据。
  • 使用 SQL 查询输入数据。
  • 使用 "IBM-lh 命令行工具输入数据。
  • 使用 Spark 引擎获取数据。

更多信息,请参阅 数据摄取

时间旅行

通过ApacheIceberg 表的时间旅行功能,您可以获取并检查表的历史记录。 它使用表格快照来支持时间旅行功能。 表快照表示表在某个特定时间点的状态。 当创建或修改表(插入、更新、删除)时,Iceberg 会生成表快照记录。 您可以使用该快照记录进行查询,以查看表的详细信息。

Hive表不支持时间旅行功能。

回滚
通过表回滚功能,可以使用表快照将表回滚到之前的时间点。

用例场景

假设你是公司的数据工程师,负责管理公司数据库中的 Car 记录。 上传存储中的现有数据记录。 在现有表格中添加一组新数据。 审查后,您发现新添加的数据集并不合适,于是决定将表回滚到之前的状态。

以下视频提供了学习本文档中的概念和任务的直观方法。

目标

  • 创建表格并使用 Spark 引擎将样本数据加载到表格中。
  • 向 "cars 表加载更多记录。
  • 使用表快照检索表记录。
  • 执行表格回滚操作。

准备工作

  • 从https://ibm.box.com/v/data-cars-csv 下载 cars.csv 文件。
  • 您必须配置一个精简版计划实例。
  • Lite 计划实例必须包括处于运行状态的 Spark 和Presto引擎。
  • 将目录与Presto和 Spark 引擎关联。 这里是Apache冰山目录。

过程

创建表格和加载数据

本节将指导您使用 Spark 引擎创建名为“cars 的表,并摄取”cars.csv 文件中的数据。

  1. 登录 watsonx.data 控制台。

  2. 从导航菜单中选择数据管理器

  3. 单击输入数据并选择本地系统。 有关如何获取数据的更多信息,请参阅 从本地系统获取数据

  4. 单击浏览数据选项卡。 刷新 Iceberg 目录,查看新模式和带有数据的表。 您可以查看表列、时间行程、数据样本和 DDL 选项卡。

  5. 点击时间旅行。 您可以看到表中有 "406 记录。

向表中加载更多记录

执行多个事务(两个事务)更新 "cars 表。 在第一项事务中,为型号 "TESLA 输入另外两条汽车记录,在第二项事务中,为型号 Kia Optima 输入一条记录。

要做到这一点:

  1. 转到查询工作区

  2. 选择 Presto 发动机。

  3. 使用以下 SQL 查询将第一组数据插入 "cars 表。

    INSERT INTO iceberg_data.automobiles.cars VALUES
    ('Tesla Model S', 102, 0, 0, 670, 4766, 3.1, 2023, 'USA'),
    ('Tesla Model 3', 134, 0, 0, 283, 3582, 5.8, 2023, 'USA');
    
  4. 运行查询。 数据添加后,总记录为 "408

  5. 使用以下 SQL 查询将第二组数据插入 "cars 表。

    INSERT INTO iceberg_data.automobiles.cars VALUES
    ('Kia Optima', 27, 4, 2457, 185, 3200, 8.5, 2023, 'South Korea');
    
  6. 运行查询。 数据添加后,总记录变为 "409

  7. 转到数据管理器

  8. 选择表格 cars。 从“汽车”部分,选择“时间旅行”选项卡。 您可以查看与数据交易相对应的快照记录(带SnapshotID)。

使用表快照检索表记录。

本节教程将指导您完成使用表快照检索表记录的过程。 您需要运行查询来检索数据,以便进行审计和监管。

  1. 转到查询工作区

  2. 运行以下查询以检索与已执行的三个插入事务相对应的快照记录。

    SELECT * FROM iceberg_data.automobiles."cars$snapshots" ORDER BY committed_at;
    

    结果集包括三条快照记录,其中有快照 ID、日期、时间和时区。 In this tutorial, the SnapshotID, date, time for each transaction are referred as: <Tran1Time>, <Tran1SnapshotID>, <Tran2Time>, <Tran2SnapshotID>, <Tran3Time>, and <Tran3SnapshotID>.

    您还可以从数据管理器> 'cars 表 >时间旅行选项卡查看快照记录。

  3. 在以下查询中提供快照 ID 或时间,然后运行查询以检索此时的表信息。

样本方案
场景 查询 结果
使用快照 ID 从初始状态读取数据。 SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran1SnapshotID> ORDER BY Snapshot ID; 结果部分显示 406 条记录。
使用时间戳从初始状态读取数据。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran1Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 结果部分显示 406 条记录。
使用快照 ID 检索第二个事务后的数据。 SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran2SnapshotID> ORDER BY Snapshot ID; 结果部分显示 408 条记录。
使用时间戳检索第三次交易后的数据。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 结果部分显示 409 条记录。
从第二个和第三个交易之间的时间点检索数据。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('Choose-a-time-between-<Tran2Time>-and-<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 结果部分显示 408 条记录。
读取创建表格之前的数据(预计会失败)。 SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('2024-01-01 00:00:00.000 UTC' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; 未找到任何记录。

执行表格回滚

watsonx.data允许你使用快照将表回滚到较早的时间点。

要将表数据回滚到较早的快照,请执行以下操作:

  1. 转到数据管理器

  2. 选择表格 cars。 从“汽车”部分,选择“时间旅行”选项卡。 您可以查看快照记录(带SnapshotID)。

  3. 单击第二份快照行末尾的溢出菜单(第二份快照包括 408 条记录),然后单击回滚。 此时会打开一个“确认回滚”窗口。 单击回滚。 数据回滚成功。 现在,该表必须有 408 条记录。

  4. 要验证回滚,请运行以下查询,检查第三个事务对应的记录是否已删除。

    • 验证表中不包括 "Kia Optima "记录的示例查询。
    SELECT * FROM iceberg_data.automobiles.cars WHERE car IN ('Kia Optima', 'Tesla Model S', 'Tesla Model 3');
    

    结果只列出了与“特斯拉 Model S”和“特斯拉 Model 3”相对应的数据记录。 表中没有与 "Kia Optima"(第三个事务)相对应的记录,因为表已回滚到第二个快照。

    • 计算表中总行数的示例查询。
    SELECT COUNT(*) FROM iceberg_data.automobiles.cars;
    

    您必须看到 408 行的计数,这与您在表中执行第二个事务时的计数一致。 表格回到之前(第二次交易)的状态。