1

我正在探索 DataBricks Delta 表及其时间旅行/时间特性。我有一些过去发生的事件数据。我正在尝试将它们插入到增量表中,并且能够使用数据中的时间戳而不是实际的插入时间进行时间旅行。

我的活动中有一个日期/时间列。我将它重命名为“时间戳”,但它仍然不起作用。

我的 csv 数据如下所示:(数据显示 5 次更新发生在 id=1000 的单个案例中)

account_id,id,case_id,case_status,owner,department,priority,created_at,timestamp
2114809,1000,ABC-121,1,200,300,1,2020-01-01T08:00:00.000000-07:00,2020-01-01T08:00:00.000000-07:00
2114809,1000,ABC-121,2,200,300,3,2020-01-01T08:00:00.000000-07:00,2020-01-01T09:00:00.000000-07:00
2114809,1000,ABC-121,3,200,300,3,2020-01-01T08:00:00.000000-07:00,2020-01-03T13:00:00.000000-07:00
2114809,1000,ABC-121,3,201,300,3,2020-01-01T08:00:00.000000-07:00,2020-01-12T14:00:00.000000-07:00
2114809,1000,ABC-121,4,201,300,3,2020-01-01T08:00:00.000000-07:00,2020-01-13T10:00:00.000000-07:00

我使用这些命令来创建增量表:

DROP TABLE IF EXISTS cases;
DROP TABLE IF EXISTS temp_cases;

CREATE TABLE temp_cases
USING csv
OPTIONS (path "/FileStore/tables/cases/test_cases.csv", header "true", inferSchema "true");

CREATE TABLE cases
USING delta
AS SELECT * FROM temp_cases;

DROP TABLE IF EXISTS temp_cases;

我有两个问题:

  1. 如何将数据迁移到增量表中,并且仍然保留数据中的时间戳而不是插入的时间戳来执行时间旅行?
  2. 创建增量表时如何指定主键或复合主键。
4

1 回答 1

1

对时间旅行的用例可能存在一个小的误解。Time Travel 是一项功能,可让用户访问 Delta 表的不同版本/快照。您不能将时间戳属性指定为时间旅行索引

Delta 表上的每个操作(合并、插入、删除等)都会创建一个新版本的表,其中包含该更改的相关时间戳和元数据。然后,您可以穿越到不同版本的数据。

这是一些有用文档的链接。

https://docs.delta.io/latest/delta-batch.html#query-an-older-snapshot-of-a-table-time-travel


对于第二个问题

创建增量表时如何指定主键或复合主键。

主键不是增量表中的元数据组件。Delta Lake 中没有定义称为Merge 操作之外的主键。唯一需要唯一键的时间是在合并操作的运行期间。

一些更有帮助的文档。不要使用本节中的重要注释块

https://docs.delta.io/latest/delta-update.html#upsert-into-a-table-using-merge

于 2020-02-18T20:23:39.943 回答