如何验证(Excel - MS AzureSQL)ETL 中的日期? - 微软Azure数据工厂

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

我正在针对 MS Azure 数据工厂的预算使用简单的 ETL。该管道从 Excel 获取源,并在 MS Azure SQL 数据库上有一个接收器。

已经完成集成并且可以工作,但我陷入了验证部分,因为 FTP 服务器中的 Excel 上传将是手动的,因此可能会出现人为错误。

我正在寻找一个过程,可以检查我的源(Excel)中的“日期”和“国家/地区”列,并评估它们是否已存在于我的 Azure SQL 数据库中。如果该组合存在,则不会上传工作表。如果没有的话请上传

我在想这样的事情:

已经尝试过以下活动:查找、if 条件..但是管理 null 或 void 字段变得很复杂

这就是我心目中的 SQL 语法

选择* 来自预算 其中月份(ExcelDate) = 月份(GETDATE()) 和年份(ExcelDate) = 年(GETDATE()) 和国家/地区 = 'AR'

但我还没能在活动中成功应用。

Example

azure azure-sql-database azure-data-factory etl
1个回答
0
投票

我正在寻找一个过程,可以检查我的源(Excel)中的“日期”和“国家/地区”列,并评估它们是否已存在于我的 Azure SQL 数据库中。

如果您的Excel文件中的所有日期和国家/地区行都相同,请尝试评论中@All About BI建议的方法。

如果您想检查 Excel 文件中的所有行是否与 SQL 表相对应,请尝试以下方法。但请注意,此方法仅检查 excel 中的 5000 行和 SQL 表中的 5000 行。

首先在不检查第一行的情况下进行两次查找活动,一次针对 Excel 文件,另一次针对 SQL 表。这两个活动都会提供 JSON 数组作为输出,并且查找的限制为 5000 行。

在 SQL 查找活动中,使用查询仅选择所需的列。我询问样品。

SELECT Convert(varchar(20), date,120) as Date,Country from sample1;

enter image description here

在这里,使用第一个查找输出数组中的必填字段(日期和国家/地区)构建 JSON 数组。为此,请使用 ForEach 活动并向其提供 Lookup1 输出数组(检查顺序)。

在 ForEach 内,进行追加活动并构建 json 对象,如下所示。

@json(concat('{"Date":"',item().Date,'","Country":"',item().Country,'"}'))

enter image description here

ForEach 之后,将创建 JSON 数组。如果此 JSON 数组和 SQL 查找输出数组的交集有任何元素,那么您不应该执行复制活动,如果没有,您应该执行复制活动。

因此,在 ForEach 之后,取一个数组类型的集合变量 Activity,并找到两个数组的交集。

@intersection(variables('excel_arr'),activity('Lookup2').output.value)

enter image description here

然后在 if 活动中检查此数组的长度,如果长度不大于 0,则在 if 的 True 活动中获取 copy 活动,并将 False 活动留空。

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