Databricks PySpark Delta格式Overwrite模式未按预期生效
Delta表Overwrite写入后Schema未更新的解决办法
问题原因
Delta Lake的mode("overwrite")默认仅覆盖数据,不会修改目标路径下已有的Delta表Schema。你使用的mergeSchema=true参数仅负责合并新写入数据的新增列到原有Schema,不会删除原有列,所以原有180列会被保留。
解决方案
要彻底替换Delta表的Schema和数据,需使用overwriteSchema=true参数,强制用新DataFrame的Schema覆盖原有Schema。
修改后的代码:
columns_to_select = ["one_column"] df_one_column = df.select(*columns_to_select) # 将mergeSchema替换为overwriteSchema df_one_column.write.format("delta").mode("overwrite").option("overwriteSchema", "true").save(my_path) new_schema = spark.read.format("delta").load(my_path).schema target_column = [field.name for field in new_schema.fields] print(len(target_column)) # 此时会返回1
替代方案(SQL语法)
也可以用SQL的CREATE OR REPLACE TABLE语句实现相同效果:
CREATE OR REPLACE TABLE delta.`my_path` AS SELECT one_column FROM your_source_table
内容的提问来源于stack exchange,提问作者Enrique Benito Casado
相关产品推荐
相关产品推荐

