数据摄取、时间旅行和表回滚
本教程将指导您完成在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
文件中的数据。
-
登录 watsonx.data 控制台。
-
从导航菜单中选择数据管理器。
-
单击输入数据并选择本地系统。 有关如何获取数据的更多信息,请参阅 从本地系统获取数据。
-
单击浏览数据选项卡。 刷新 Iceberg 目录,查看新模式和带有数据的表。 您可以查看表列、时间行程、数据样本和 DDL 选项卡。
-
点击时间旅行。 您可以看到表中有 "
406
记录。
向表中加载更多记录
执行多个事务(两个事务)更新 "cars
表。 在第一项事务中,为型号 "TESLA
输入另外两条汽车记录,在第二项事务中,为型号 Kia Optima
输入一条记录。
要做到这一点:
-
转到查询工作区。
-
选择 Presto 发动机。
-
使用以下 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');
-
运行查询。 数据添加后,总记录为 "
408
。 -
使用以下 SQL 查询将第二组数据插入 "
cars
表。INSERT INTO iceberg_data.automobiles.cars VALUES ('Kia Optima', 27, 4, 2457, 185, 3200, 8.5, 2023, 'South Korea');
-
运行查询。 数据添加后,总记录变为 "
409
。 -
转到数据管理器。
-
选择表格
cars
。 从“汽车”部分,选择“时间旅行”选项卡。 您可以查看与数据交易相对应的快照记录(带SnapshotID)。
使用表快照检索表记录。
本节教程将指导您完成使用表快照检索表记录的过程。 您需要运行查询来检索数据,以便进行审计和监管。
-
转到查询工作区。
-
运行以下查询以检索与已执行的三个插入事务相对应的快照记录。
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
表 >时间旅行选项卡查看快照记录。 -
在以下查询中提供快照 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允许你使用快照将表回滚到较早的时间点。
要将表数据回滚到较早的快照,请执行以下操作:
-
转到数据管理器。
-
选择表格
cars
。 从“汽车”部分,选择“时间旅行”选项卡。 您可以查看快照记录(带SnapshotID)。 -
单击第二份快照行末尾的溢出菜单(第二份快照包括 408 条记录),然后单击回滚。 此时会打开一个“确认回滚”窗口。 单击回滚。 数据回滚成功。 现在,该表必须有 408 条记录。
-
要验证回滚,请运行以下查询,检查第三个事务对应的记录是否已删除。
- 验证表中不包括 "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 行的计数,这与您在表中执行第二个事务时的计数一致。 表格回到之前(第二次交易)的状态。