Databricks Delta 文件添加新分区导致旧分区不可读

Databricks Delta files adding new partition causes old ones to be not readable

我有一个笔记本,我正在使用它来加载历史记录。每次加载6个月的数据,从2018-10-01开始。 我的增量文件按 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/")
)

如果使用覆盖模式,则完全替换之前的数据。您通过 parquet 查看旧数据,因为 delta 不会立即删除旧版本(但如果您使用 parquet,它会立即删除数据)。

要解决您的问题 - 您需要使用追加模式。如果您需要获取以前的数据,您可以从 table 中读取特定版本并附加它。像这样:

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)