添加新分区的 Databricks Delta 文件导致旧分区不可读
Posted
技术标签:
【中文标题】添加新分区的 Databricks Delta 文件导致旧分区不可读【英文标题】:Databricks Delta files adding new partition causes old ones to be not readable 【发布时间】:2021-03-05 21:49:03 【问题描述】:我有一个笔记本,我正在使用它来加载历史记录。每次加载 6 个月的数据,从 2018-10-01
开始。
我的 delta 文件按 calendar_date 分区
初始加载后,我可以读取增量文件并查看数据。
但是在日期2019-01-01 to 2019-06-30
的第二次加载之后,之前的分区没有使用增量格式正常加载。
像这样读取我的源增量文件会引发错误提示
file dosen't exist
game_refined_start = (
spark.read.format("delta").load("s3://game_events/refined/game_session_start/calendar_date=2018-10-04/")
)
但是,像下面这样的阅读方式可以很好地了解可能出现的问题
spark.conf.set("spark.databricks.delta.formatCheck.enabled", "false")
game_refined_start = (
spark.read.format("parquet").load("s3://game_events/refined/game_session_start/calendar_date=2018-10-04/")
)
【问题讨论】:
第二批加载的时候用了什么模式? 它的“覆盖” 【参考方案1】:如果使用覆盖模式,那么它会完全替换以前的数据。您通过 parquet 看到旧数据,因为 delta 不会立即删除旧版本(但如果您使用 parquet,那么它将立即删除数据)。
要解决您的问题 - 您需要使用附加模式。如果您需要获取以前的数据,您可以从表中读取特定版本,并附加它。像这样的:
path = "s3://game_events/refined/game_session_start/"
v = spark.sql(f"DESCRIBE HISTORY delta.`path` limit 2")
version = v.take(2)[1][0]
df = spark.read.format("delta").option("versionAsOf", version).load(path)
df.write.mode("append").save(path)
【讨论】:
以上是关于添加新分区的 Databricks Delta 文件导致旧分区不可读的主要内容,如果未能解决你的问题,请参考以下文章