繁体   English   中英

是否可以在 Azure 数据块中使用基于镶木地板文件名的增量表跟踪器?

[英]Is it ok to use a delta table tracker based on parquet file name in Azure databricks?

今天在工作中,我看到了一个基于文件名的delta lake tracker。 通过 delta tracker,我的意思是一个 function,它定义了一个 parquet 文件是否已经被摄取。

该代码将检查哪些文件(来自 delta 表)尚未被摄取,然后使用以下命令读取 delta 表中的 parquets 文件: spark.createDataFrame(path,StringType())

在使用Delta tables之后,以这种方式使用delta tracker对我来说似乎不太合适。

  • 如果记录被删除delta log指向一个新文件的可能性有多大,并且这个删除的记录将被读取为一个新的记录?

  • 如果记录已更新delta log不指向新文件的机会有多大,并且不会考虑更新的记录?

  • 如果在增量表上进行一些维护那么一些新文件被无处写入的可能性有多大? 这可能会导致记录被重新摄取

任何观察或建议是否可以那样工作都会很棒。 谢谢

在 Delta Lake 中,一切都在文件级别上工作。 所以没有“就地”更新或删除。 假设一条记录被删除(或更新),然后大致发生以下情况:

  1. 使用相关记录读入镶木地板文件(+恰好在文件中的其他记录)
  2. 将除已删除记录外的所有记录写出到新的 parquet 文件中
  3. 使用新版本更新事务日志,将旧的 parquet 文件标记为已删除,将新的 parquet 文件标记为已添加。 请注意,在您运行VACUUM命令之前,旧的 parquet 文件不会被物理删除。

更新过程基本相同。

更具体地回答您的问题:

如果记录被删除,delta 日志指向一个新文件的可能性有多大,并且这个删除的记录将被读取为一个新记录?

增量日志将指向一个新文件,但删除的记录不会在那里。 将有碰巧在原始文件中的所有其他记录。

如果记录被更新,delta log 不指向新文件并且不考虑更新记录的可能性有多大?

文件未就地更新,因此不会发生这种情况。 写入包含更新记录的新文件(+ 原始文件中的任何其他记录)。 事务日志更新为“指向”这个新文件。

如果在增量表上进行一些维护,那么一些新文件被无缘无故写入的可能性有多大? 这可能会导致记录被重新摄取

这是可能的,尽管不是“无中生有”。 例如,如果您运行OPTIMIZE现有的 parquet 文件,则会重新排列/组合以提高性能。 基本上这意味着将写入许多新的 parquet 文件,并且事务日志中的新版本将指向这些 parquet 文件。 如果您在此之后获取所有新文件,您将重新摄取数据。

一些注意事项:如果你的增量表是 append only 你可以使用结构化流来读取它。 如果没有,Databricks 会提供Change Data Feed ,为您提供记录级别的插入、更新和删除详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM