Azure Data Factory:如何为Hive分区文件名的月份补零
在Azure Data Factory中实现Hive分区格式的月份补零需求
问题场景
我正在Azure Data Factory中构建数据管道,文件名需遵循Hive分区格式year=YYYY/month=mm/day=DD,其中month=对应的月份需要补零为两位数字。
当前使用的表达式代码:
@concat( '/year=', formatDateTime(utcNow(), 'yyyy'), '/month=', formatDateTime(utcNow(), 'MM'), '/day=', formatDateTime(utcNow(), 'dd'), '/FILENAME.parquet' )
九月的实际输出:
/year=2024/month=9/day=30/FILENAME.parquet
期望输出:
/year=2024/month=09/day=30/FILENAME.parquet
解决方案
方法1:使用padLeft函数强制补零
如果formatDateTime的MM格式符未生效,可以通过padLeft函数手动为月份补零,表达式修改如下:
@concat( '/year=', formatDateTime(utcNow(), 'yyyy'), '/month=', padLeft(string(month(utcNow())), 2, '0'), '/day=', formatDateTime(utcNow(), 'dd'), '/FILENAME.parquet' )
方法2:确认formatDateTime格式符正确性
ADF的formatDateTime函数中,MM是两位带前导零的月份格式符(返回值范围01-12),而M是单/两位月份(返回值范围1-12)。如果你的输出是单数字月份,大概率是表达式中误将MM写为M,修正格式符即可:
@concat( '/year=', formatDateTime(utcNow(), 'yyyy'), '/month=', formatDateTime(utcNow(), 'MM'), '/day=', formatDateTime(utcNow(), 'dd'), '/FILENAME.parquet' )
说明
padLeft(string(month(utcNow())), 2, '0')逻辑:先通过month函数提取当前月份的数字,转为字符串后,用padLeft在左侧补零,强制保证字符串长度为2位。formatDateTime格式符规则:yyyy对应四位年份,MM对应两位月份,dd对应两位日期,这三个格式符组合即可直接生成符合Hive分区格式的路径段。
内容的提问来源于stack exchange,提问作者Vega
相关产品推荐
相关产品推荐

