我可以强制刷新 Databricks Delta 表,以便磁盘副本具有最新/一致的数据吗?
Posted
技术标签:
【中文标题】我可以强制刷新 Databricks Delta 表,以便磁盘副本具有最新/一致的数据吗?【英文标题】:Can I force flush a Databricks Delta table, so the disk copy has latest/consistent data? 【发布时间】:2020-01-27 15:20:24 【问题描述】:我正在从 Azure 数据工厂访问 Databricks Delta 表,它没有与 Databricks 表连接的本机连接器。因此,作为一种解决方法,我使用 LOCATION 关键字创建表以将它们存储在 Azure Data Lake 中。然后,由于我知道表文件的位置,我只从数据工厂读取底层 Parquet 文件。这很好用。
但是...如果 Delta 事务日志中有缓存信息尚未写入磁盘怎么办?比如说,一个应用程序更新了表中的一行,而磁盘还没有反映这个事实。那么我从数据工厂中读取的数据就会出错。
那么,两个问题...
这会发生吗?更改是否会在日志中保留一段时间后才被写出? 是否可以强制刷新事务日志,以便我知道磁盘副本已更新?【问题讨论】:
【参考方案1】:在这个话题上也有人问过类似的问题(例如,参见here)。
对于 delta 表,您需要 delta-lake 支持(因为 delta 日志正在捕捉真实情况)。因此,到目前为止,您必须使用 Databricks 活动在 delta 表上使用 Azure 数据工厂进行进一步处理(您还可以将数据集复制到 parquet,以使数据可用于尚不支持 delta-lake 的其他服务)。从理论上讲,您可以在保留期为 0 的情况下执行 vacuum,但不建议这样做,并且可能会导致数据不一致。
根据Azure Feedback forum,计划在未来对此提供支持。
【讨论】:
关于 Vacuum() 的有趣想法,但我同意它看起来像一个 非常 笨拙且有风险的解决方案。我知道以前有人问过这个问题,但从来没有一个好的答案。调用 Databricks 代码的 ADF 功能不同。【参考方案2】:ADF 自 2020 年 7 月起支持 Delta Lake 格式:
https://techcommunity.microsoft.com/t5/azure-data-factory/adf-adds-connectors-for-delta-lake-and-excel/ba-p/1515793
Microsoft Azure 数据工厂团队正在启用 .. 和使用 Delta Lake 进行数据转换的数据流连接器
Delta 目前在 ADF 中作为 inline dataset 数据流中的公共预览版提供。
【讨论】:
以上是关于我可以强制刷新 Databricks Delta 表,以便磁盘副本具有最新/一致的数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SSMS 从 Delta Lake Databricks 进行突触查询
添加新分区的 Databricks Delta 文件导致旧分区不可读
Databricks - 如何更改现有 Delta 表的分区?
如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表