csv 如何在Azure数据块中使用replaceWhere子句选择多个日期分区

kulphzqa  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(71)

我正在尝试使用replaceWhere只覆盖选定的 * 分区 *。不幸的是,分区模式使用了YearMonthDay
我试过下面的代码,但overwrite一切,而不仅仅是选定的日期。
而且它不会抛出任何错误消息。

DateFrom = df_raw_mango.agg({"file_date": "min"}).collect()[0][0]
DateTo = df_raw_mango.agg({"file_date": "max"}).collect()[0][0]

condition = f"concat(col('Year'), col('Month'), col('Day')) >= '{DateFrom}' AND concat(col('Year'), col('Month'), col('Day')) <= '{DateTo}'"

df_raw_mango.coalesce(1).write.format('csv') \
                        .option("replaceWhere", condition).mode('overwrite') \
                        .option('header','true') \
                        .option('delimiter',',') \
                        .partitionBy(['Year','Month','Day','file_name']) \
                        .save(f'/mnt/Fruits/Mango/Green')

我甚至试着把分区file_date和这样做,但没有成功:

condition = f"file_date >= '{DateFrom}' AND file_date <= '{DateTo}'"
.coalesce(1).write.format('csv') \
                    .partitionBy(['Year','Month','Day','file_name','file_date']) \
                    .option("replaceWhere", condition).mode('overwrite') \
                    .option('header','true') \
                    .option('delimiter',',') \
                    .save(f'/mnt/Fruits/Mango/Green/')

我在数据库10.4上。文档说replaceWhere可以在**>9.1**https://www.example.com上工作docs.databricks.com/en/delta/selective-overwrite.html#arbitrary-selective-overwrite-with-replacewhere&language-python。但对我来说不起作用。
相反,我必须只删除分区和append

ua4mk5z4

ua4mk5z41#

没关系,它似乎是一个datalake功能。不适用于CSV。我忽略了文件。

相关问题