ADF复制活动导出Parquet时自定义时间列格式异常咨询
问题根因
- 你使用的表达式通过
'o'参数、formatDateTime、字符串拼接操作,最终输出的是字符串类型的时间值而非datetime原生类型 - ADF写入Parquet时的字段类型推断逻辑会优先匹配集成运行时的区域语言设置,美区默认采用MM/DD/YYYY格式处理时间字符串,若最终写入Parquet的字段被推断为字符串类型,就会存储为你看到的美国格式
- Parquet原生timestamp类型存储的是时间戳数值而非格式化字符串,你看到的美国格式本质是存储的字符串时间值被读取工具直接展示的结果
解决步骤
分两种场景处理:
场景1:使用Copy Activity做转换
- 第一步:修改新增额外列的取值表达式,移除格式转换参数,直接输出原生datetime类型:
取值改为@convertfromutc(utcnow(), 'GMT Standard Time') - 第二步:进入Copy Activity的映射页签,找到新增的额外列,手动设置:
- 源列类型:
DateTime - 目标列类型:
Timestamp
- 源列类型:
场景2:使用Mapping Data Flow做转换
- 第一步:在Derived Column组件中新增列的表达式直接写
toTimestamp(convertFromUTC(utcNow(), 'GMT Standard Time')),明确指定输出为timestamp类型 - 第二步:在Sink组件的架构设置中,确认该列的目标类型设置为Parquet标准的
TIMESTAMP_MICROS/TIMESTAMP_MILLIS,不要设置为String类型
验证方式:生成的Parquet文件通过Spark、Pandas等工具读取时,该字段会被自动识别为原生时间类型,可直接进行时间计算、过滤等操作,无需手动解析格式。
内容的提问来源于stack exchange,提问作者Bee_Riii
相关产品推荐
相关产品推荐

