使用三角洲湖变化数据以砖
请注意
三角洲湖变化数据提要有砖运行时8.4及以上。
这篇文章描述了如何记录和查询为三角洲表使用行级变化信息数据提要功能的变化。学习如何更新表在三角洲住表管道基于源数据的变化,看到的改变数据获取与三角洲生活表。
改变数据提要允许砖跟踪三角洲表的行级版本之间的更改。三角洲表上启用时,运行时记录更改事件写入的数据表。这包括行数据与元数据显示指定的行是否插入、删除或更新。
你可以阅读改变事件的批处理使用火花SQL查询,Apache火花DataFrames和结构化流。
重要的
改变饲料配合工作表历史数据提供变化的信息。因为克隆一个增量表创建一个单独的历史,改变数据以克隆原始表的表不匹配。
用例
更改数据提要在默认情况下不启用。以下用例应该开车当你启用更改数据提要。
金银表:提高三角洲湖性能通过处理后初始行级更改
合并
,更新
,或删除
操作加速和简化ETL和英语教学操作。物化视图:创建最新的聚合视图的信息用于BI和分析,而无需再加工完整的底层表,而不是只在更新变化。
传输变化:发送一个改变数据提要下游系统如卡夫卡或RDBMS可以使用它来逐步过程后期的数据管道。
审计跟踪表:捕获变更数据提要作为三角洲表提供永久存储和高效的查询功能查看所有变化随着时间的推移,包括删除发生时和更新。
使改变数据提要
您必须显式地启用更改数据提要选择使用下列方法之一:
新表:设置表属性
delta.enableChangeDataFeed=真正的
在创建表
命令。创建表学生(idINT,的名字字符串,年龄INT)TBLPROPERTIES(δ。enableChangeDataFeed=真正的)
现有表:设置表属性
delta.enableChangeDataFeed=真正的
在改变表
命令。改变表myDeltaTable集TBLPROPERTIES(δ。enableChangeDataFeed=真正的)
所有新表:
集火花。砖。δ。属性。违约。enableChangeDataFeed=真正的;
重要的
一旦你使改变数据提要选择一个表,您可以使用砖不再写表运行时8.1或更低水平。你总是可以读表。
只更改后你可以改变数据提要记录;过去的并不准确,修改一个表。
改变数据存储
砖记录数据变化更新
,删除
,合并
操作的_change_data
表目录文件夹下。一些操作,如纯插入操作和完整的分区删除,不生成数据_change_data
目录,因为砖可以有效地计算出的改变直接从事务日志数据提要。
中的文件_change_data
文件夹按照表的保留政策。因此,如果你运行真空命令,修改数据提要数据也删除。
阅读改变批量查询
您可以提供版本或时间戳开始和结束。开始和结束的版本和时间戳是包容性的查询。阅读从一个特定的版本开始变化最新的版本的表,仅指定起始版本或时间戳。
你指定一个版本作为一个整数和一个时间戳作为字符串的格式yyyy-MM-dd [HH: mm: ss [.SSS]]
。
如果你提供一个低版本或时间戳比有变化的事件记录,更改数据提要时就会激发出了一个错误,表示更改数据提要不启用。
——版本作为int或long如从0到10选择*从table_changes(“表”,0,10)——时间戳字符串格式化的时间戳选择*从table_changes(“表”,“2021-04-21 05:45:46”,“2021-05-21 12:00:00”)——只提供startingVersion /时间戳选择*从table_changes(“表”,0)——数据库/模式名称在表名的字符串,用引号转义点和特殊字符选择*从table_changes(dbName. dotted.tableName”,“2021-04-21 06:45:46”,“2021-05-21 12:00:00”)——基于路径表选择*从table_changes_by_path(“\路径”,“2021-04-21 05:45:46”)
版本号为int或long火花。读。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingVersion”,0)\。选项(“endingVersion”,10)\。表(“myDeltaTable”)#时间戳格式的时间戳火花。读。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingTimestamp”,“2021-04-21 05:45:46”)\。选项(“endingTimestamp”,“2021-05-21 12:00:00”)\。表(“myDeltaTable”)#只提供startingVersion /时间戳火花。读。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingVersion”,0)\。表(“myDeltaTable”)#道路基础表火花。读。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingTimestamp”,“2021-04-21 05:45:46”)\。负载(“pathToMyDeltaTable”)
/ /版本为int或long火花。读。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingVersion”,0)。选项(“endingVersion”,10)。表(“myDeltaTable”)/ /时间戳格式的时间戳火花。读。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingTimestamp”,“2021-04-21 05:45:46”)。选项(“endingTimestamp”,“2021-05-21 12:00:00”)。表(“myDeltaTable”)/ /只提供startingVersion /时间戳火花。读。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingVersion”,0)。表(“myDeltaTable”)/ /基于路径表火花。读。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingTimestamp”,“2021-04-21 05:45:46”)。负载(“pathToMyDeltaTable”)
阅读改变流查询
#开始提供一个版本火花。readStream。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingVersion”,0)\。表(“myDeltaTable”)#开始提供一个时间戳火花。readStream。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。选项(“startingTimestamp”,“2021-04-21 05:35:43”)\。负载(“/ pathToMyDeltaTable”)#不提供一个启动版本/时间戳将导致先获取最新的快照火花。readStream。格式(“δ”)\。选项(“readChangeFeed”,“真正的”)\。表(“myDeltaTable”)
/ /开始提供一个版本火花。readStream。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingVersion”,0)。表(“myDeltaTable”)/ /开始提供一个时间戳火花。readStream。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。选项(“startingVersion”,“2021-04-21 05:35:43”)。负载(“/ pathToMyDeltaTable”)/ /开始不提供一个版本/时间戳将导致先获取最新的快照火花。readStream。格式(“δ”)。选项(“readChangeFeed”,“真正的”)。表(“myDeltaTable”)
阅读时更改数据表,设置选项readChangeFeed
来真正的
。的startingVersion
或startingTimestamp
是可选的,如果没有提供流返回最新的表的快照的时候流作为一个吗插入
和未来的变化变化数据。选择速度限制(maxFilesPerTrigger
,maxBytesPerTrigger
),excludeRegex
也支持当阅读改变数据。
请注意
速度限制可以原子版本除了开始快照版本。也就是说,整个提交版本将速率限制或整个提交将被归还。
默认情况下,如果用户通过一个版本或时间戳超过最后提交表,错误timestampGreaterThanLatestCommit
抛出。在砖上面运行时11.3 LTS和改变数据提要可以处理的范围版本如果用户设置以下配置真正的
:
集火花。砖。δ。changeDataFeed。timestampOutOfRange。启用=真正的;
如果你提供启动版本大于最后一个提交一个表或一个开始时间戳比最近提交更新一个表,然后启用前配置时,将返回空读取结果。
如果你提供一个最终版本大于最后一个提交一个表或结束时间戳比最近提交更新表,当先前的配置启用批处理读模式,所有更改版本开始,最后提交之间被归还。
改变数据提要的模式是什么?
当你阅读改变数据提要的一个表,使用最新表格版本的模式。
请注意
大多数模式改变和演化操作是完全支持。表和列映射使不支持所有用例和演示不同的行为。看到修改数据提要的局限性为表列映射启用。
除了从三角洲模式的表数据列,修改数据提要包含元数据列,确定更改事件的类型:
列名 |
类型 |
值 |
---|---|---|
|
字符串 |
|
|
长 |
三角洲日志或表版本包含的变化。 |
|
时间戳 |
当创建提交相关的时间戳。 |
(1)像原
更新前的值,postimage
是更新后的值。
请注意
你不能使改变数据提要表如果模式包含列添加了相同的名称作为这些列。重命名表中的列来解决这一冲突之前试图使更改数据提要。
修改数据提要的局限性为表列映射启用
使用列映射上启用一个三角洲表,您可以删除或重命名列的表没有修改数据文件的现有数据。启用列映射后,更改数据执行非附加模式变化后饲料有一定的局限性,如重命名或删除列,改变数据类型,或nullability变化。
重要的
砖运行时版本,启用了列映射的表不支持改变数据流读取提要。
改变显示的列映射不捕获变更数据提要。你不能读事务更改数据饲料或范围的非附加模式发生改变。
砖运行时的12.0及以下,你不能读改变数据提要表列映射使经历了列重命名或删除。
在砖运行时的12.1及以上,您可以更改数据上执行批量读取提要表启用了列映射,经历了非附加模式变化。而不是使用最新版本的表的模式,读操作使用的最终版本的模式中指定的表查询。查询仍然失败如果指定的版本范围跨度非附加模式改变。