我正在 Azure 数据工厂中构建管道。 文件名必须使用 Hive 分区构建,格式为
year=YYYY/month=mm/day=DD
.
对于
month=
,我需要将月份数字填充到 2 位数字。
当前代码:
@concat(
'/year=', formatDateTime(utcNow(), 'yyyy'),
'/month=', formatDateTime(utcNow(), 'MM'),
'/day=', formatDateTime(utcNow(), 'dd'),
'/FILENAME.parquet'
)
9月份当前产量:
/year=2024/month=9/day=30/FILENAME.parquet
九月份需要的输出:
/year=2024/month=09/day=30/FILENAME.parquet
如何在 Azure 数据工厂中执行此操作?在以下描述的可用函数中没有可用的填充函数:
没有内置函数来获取填充数字。要解决此问题,需要制作如下所示的自定义动态表达式,如果长度为 1 或小于 10,则在月份或日期之前添加零,如下所示:
--for month
if(equals(length(formatDateTime(utcNow(), 'MM')),1),concat('0',formatDateTime(utcNow(), 'MM')),formatDateTime(utcNow(), 'MM'))
--for day
if(equals(length(formatDateTime(utcNow(), 'dd')),1),concat('0',formatDateTime(utcNow(), 'dd')),formatDateTime(utcNow(), 'dd'))
完整查询如下所示:
@concat(
'/year=', formatDateTime(utcNow(), 'yyyy'),
'/month=', if(equals(length(formatDateTime(utcNow(), 'MM')),1),concat('0',formatDateTime(utcNow(), 'MM')),formatDateTime(utcNow(), 'MM')),
'/day=', if(equals(length(formatDateTime(utcNow(), 'dd')),1),concat('0',formatDateTime(utcNow(), 'dd')),formatDateTime(utcNow(), 'dd')),
'/FILENAME.parquet'
)
--for month
@if(less(formatDateTime(utcNow(), 'MM'),10),concat('0',formatDateTime(utcNow(), 'MM')),formatDateTime(utcNow(), 'MM'))
--for day
@if(less(formatDateTime(utcNow(), 'dd'),10),concat('0',formatDateTime(utcNow(), 'dd')),formatDateTime(utcNow(), 'dd'))
完整查询如下所示:
@concat(
'/year=', formatDateTime(utcNow(), 'yyyy'),
'/month=', @if(less(formatDateTime(utcNow(), 'MM'),10),concat('0',formatDateTime(utcNow(), 'MM')),formatDateTime(utcNow(), 'MM')),
'/day=', @if(less(formatDateTime(utcNow(), 'dd'),10),concat('0',formatDateTime(utcNow(), 'dd')),formatDateTime(utcNow(), 'dd')),
'/FILENAME.parquet'
)