当前位置: 首页 > 知识库问答 >
问题:

将数据插入到具有过去时间戳的数据砖增量表中

松献
2023-03-14

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

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

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

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. 如何在创建增量表时指定主键或复合主键。

共有1个答案

史景铄
2023-03-14

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

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

下面是一些有用文档的链接。

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

对于第二个问题

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

主键不是Delta表中的元数据组件。在Delta Lake中,除了Merge操作之外,没有主键的定义。唯一需要唯一键的时间是在Merge操作的运行时。

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

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

 类似资料:
  • 我在ADLS gen2中有拼花格式的数据。我想在我的项目中实现dalta层。所以我将ADLS Gen2中的所有本地数据通过ADF保存在一个名为着陆区的单独容器中。 现在我创建了一个名为青铜的分离容器,我想在其中保留增量表。为此,我做了如下。我用数据砖创建了一个数据库。我使用下面的SQL代码在数据块中创建了一个增量表。 现在我的表没有任何数据。 如何将数据湖登陆区中的数据添加到我创建的增量表中。 将

  • 在创建了临时表并声明了数据类型之后; 然后如何插入数据库中物理表中已保存的相关数据?

  • 管道每 20 分钟运行一次,以 ORC 格式将数据推送到 ADLS Gen2 存储。 < li >我有一个每1小时运行一次的Azure Databricks笔记本作业。该作业从ADLS以结构化流的形式读取orc文件(由上述管道创建的orc文件),然后使用合并功能根据主键列将数据向上插入增量表。 问题: 在我的情况下,如果我创建新的readstream(从delta表读取)和writestream(

  • 说明 pika新版binlog有时间戳,开发binlog_sender工具,根据输入的时间段回放对应数据到某个pika实例 工具目录: pika/tools/binlog_tools/binlog_sender 使用参数: -h -- 显示帮助 -t -- l 显示日志类型,old 或new -i -- pika实例的ip -p -- pika实例的port -n -- 输入的binlog的路径

  • 问题内容: 我是asp.net初学者,我的项目是在线购物课程,但是我遇到了一些问题 我有4张桌子,中间有一些外键… 我有三页,在第一页中,我将一些数据传递到另一页,在第二页中,我将数据设置到数据库中。 第一页代码 第二页代码: 我的问题是我不知道如何在具有外键和主键的表中插入值.cmd1和cmd2正常工作,但我无法编写任何东西来设置它们具有外键的order表和orderdetails表另一张桌子

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作