You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Factory中从CSV提取唯一日期并循环删除数据的问题

Azure Blob CSV薪资数据导入Azure数据库问题解决

问题1:聚合组件仅返回单条日期记录

原因及解决

  • 源列类型识别错误:CSV源组件可能将PaycheckDate识别为字符串而非DATE类型,导致聚合分组时因隐式类型转换出现异常。需在源组件的投影设置中,手动将PaycheckDate的类型指定为date。
  • 聚合组件配置冗余:无需设置NumOfRows(PaycheckDate)聚合项,仅需将PaycheckDate设为唯一分组依据即可。更简单的替代方案是使用Distinct组件:添加Distinct组件后,仅选择PaycheckDate作为去重列,直接生成所有唯一日期记录,避免聚合配置出错。

问题2:DataFlow返回时间戳而非日期格式

原因及解决

DataFlow的Cache接收器默认会将DATE类型转为时间戳格式输出,需通过以下两种方式处理:

  1. DataFlow内转换为字符串:在选择组件后添加派生列组件,创建新列PaycheckDateStr,表达式为:
    toString(PaycheckDate, 'yyyy-MM-dd')
    
    随后选择组件仅保留PaycheckDateStr列,再输出到Cache,管道将直接拿到字符串格式的日期。
  2. 管道内转换时间戳:若仍拿到时间戳,可在变量赋值时用formatDateTime转换:
    varArrPaycheckDates = @array(map(activity('DFImportPCK').output.runStatus.output.Sink2Cache.value, x => formatDateTime(x.PaycheckDate, 'yyyy-MM-dd')))
    

完整优化实现流程

1. 重构DataFlow(DFImportPCK)

  • 源组件:连接CSV文件,确认PaycheckDate类型为date。
  • Distinct组件:选择PaycheckDate作为去重列,生成唯一日期集合。
  • 派生列组件:新增PaycheckDateStr列,转换为yyyy-MM-dd格式字符串。
  • 选择组件:仅保留PaycheckDateStr列。
  • Cache接收器:勾选“写入活动输出”,输出字符串日期。

2. 管道(PLImportPCK)配置

  • 变量赋值:将DataFlow输出转为日期字符串数组:
    varArrPaycheckDates = @array(map(activity('DFImportPCK').output.runStatus.output.Sink2Cache.value, x => x.PaycheckDateStr))
    
  • For-Each活动:遍历varArrPaycheckDates,执行DELETE语句:
    DELETE FROM `factPaychecks` WHERE PaycheckDate = '@{item()}'
    

3. 数据导入

使用Copy活动,源为Azure Blob的CSV文件,目标为factPaychecks表,配置列映射确保类型匹配(如Amount对应DOUBLE,PaycheckDate对应DATE)。

内容的提问来源于stack exchange,提问作者NBHarry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:52:35