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)
我有一个笔记本,我正在使用它来加载历史记录。每次加载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)