如何从 CSV 文件中获取不同的日期并在 Azure DataFactory Pipeline 上迭代删除查询

问题描述 投票:0回答:1

我想将薪资数据从位于 Azure BLOB 存储中的 csv 文件导入到 ADF 上的 Azure 数据库中。由于如果表中已存在一批

PaycheckDate
,则工资表是固定的,因此应在导入之前清理给定
PaycheckDate
的现有数据,并且预计将为给定
PaycheckDate
导入文件中的(新)条目。 (文件上没有唯一标识符来选取特定条目)

对于文件, 有一个 CSV 文件,例如 BLOB 存储的

Paycheck_202402.csv
上的
PaycheckContainer
,这里是架构和数据。 (一个文件大约有28K行)

CompanyId,EmployeeId,PaycheckDate,Amount,Description
100,e1234,2024-02-09,150.5,Overtime
100,e1234,2024-02-09,1500.0,Salary
100,e1234,2024-02-23,305.25,Overtime
100,e1234,2024-02-23,1500.0,Salary
200,e2222,2024-02-09,50.5,Tip
200,e2222,2024-02-09,500.0,Salary
400,e5555,2024-02-15,1000,Compensate
400,e5555,2024-02-23,1500.0,Salary

对于目标,名为

factPaychecks
的表,这是一个简单的架构

CompanyId INT,
EmployeeId VARCHAR,
PaycheckDate DATE,
Amount DOUBLE(10,2),
Description VARCHAR

我想做的是

  • 将文件中唯一的 PaycheckDates 提取到数组中,因此预期结果为
    arrCheckDates
    = [2024-02-09, 2024-02-15, 2024-02-23]。
  • arrCheckDates
    传递给 For-Each 活动,
  • 然后通过给定的
    factPaychecks
    PaycheckDate
  • 迭代 DELETE 查询
DELETE FROM `factPaychecks` WHERE [PaycheckDate] = $PaycheckDate
  • 将文件中的条目导入到
    factPaychecks

我试过了

  1. DataFlow(
    DFImportPCK
    ) 用于提取 PaycheckDates 并沉入缓存

1.1。

((Source))
来自 CSV

1.2。

((Aggregate))
[分组依据]
PaycheckDate
与 [聚合] NumOfRows(PaycheckDate)

1.3。仅

((Select))
PaycheckDate
- 检查结果为DATE类型

1.4。

((Sink))`` [Type] as 
Cache`,[选项]选中写入活动输出,[关键列]列列表(未分配列)-->检查/数据预览:DATE类型 https://i.stack.imgur.com/v7Atu.png

  1. 将返回值赋给管道上的数组类型变量
    varArrPaycheckDates
    (
    PLImportPCK
    )
varArrPaycheckDates = @activity('DFImportPCK').output.runStatus.output.Sink2Cache.value

我有几个问题

  1. 在 DataFlow(
    DFImportPCK
    ) 中,我只能在
    2024-02-09
     看到 1 个条目 
    ((Aggregate))
`PaycheckDate` 2024-02-09 `NumOfRows` 1000

与后续步骤相同,甚至

((Sink))
我只能看到
2024-02-09
。 但它必须是像上面这样的3个元素[2024-02-09, 2024-02-15, 2024-02-23] 2. DataFlow(
DFImportPCK
) 返回 (LONG)INTEGER 值
1688688000000
而不是
2024-02-09
DATE 类型。

您能指导我如何实现我的目标或指出我缺少什么吗?

谢谢!

azure-data-factory google-cloud-dataflow
1个回答
0
投票

DataFlow(

DFImportPCK
) 返回 (LONG)INTEGER 值
1688688000000
而不是
2024-02-09
DATE 类型。

问题出在日期类型上,首先您需要将其转换为字符串类型,如下所示:

enter image description here

然后在数据流设置中将日志记录级别设置为无并取消选中仅第一行

enter image description here

然后在数据流输出中您可以看到

PaycheckDate
数组。

enter image description here

然后添加 for every 循环来迭代该数组。有表达

@activity('Data flow1').output.runStatus.output.Sink1.value

enter image description here

在 foreach 活动下使用表达式附加变量

@item().PaycheckDate
将所有值存储在单个数组中。

enter image description here

执行每个附加变量后将如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.