如何在Azure Data Fatory中将一列的最大最小值与另一列的最大最小值进行比较

如何在Azure Data Fatory中将一列的最大最小值与另一列的最大最小值进行比较,azure,azure-data-factory,Azure,Azure Data Factory,在下图中,我有两个数据集,我在azure data factory中创建了一个数据流。 我想从dataset1中获取最大和最小日期,并将其与dataset2进行比较。 在下面的例子中,我有最小值(日期时间)=11-04-2020 01:17:40和最大值(日期时间)=30-06-2020 22:00:00。因此,介于这两个最大值和最小值之间的日期将与数据集2中的事件时间列进行比较,所有匹配的日期应在数据集1数据可用列中打印为“Y”,不匹配的日期应为“N”。 谢谢 请尝试以下操作: 我的测试数据流

在下图中,我有两个数据集,我在azure data factory中创建了一个数据流。 我想从dataset1中获取最大和最小日期,并将其与dataset2进行比较。 在下面的例子中,我有最小值(日期时间)=11-04-2020 01:17:40和最大值(日期时间)=30-06-2020 22:00:00。因此,介于这两个最大值和最小值之间的日期将与数据集2中的事件时间列进行比较,所有匹配的日期应在数据集1数据可用列中打印为“Y”,不匹配的日期应为“N”。 谢谢

请尝试以下操作:

我的测试数据流的屏幕截图

1.source1是您的数据集1,设置“Aggregate1”:

“聚合1”的数据预览:

2.source2是您的数据集2,设置“Lookup1”(在查找条件中,请确保左列值永远不等于右列值):

“Lookup1”的数据预览:

3.使用'DerivedColumn1'更改'Dataset1\u Data\u available'的值。

表达式:
iif(greaterrequal(Event\u time,minDateTime)和lesserrequal(Event\u time,maxDateTime),'Y','N')

“DerivedColumn1”的数据预览

4.您可以在接收器中使用“选择”或“映射”删除不需要的列,然后输出结果。


更新

我创建了一些测试样本数据。
sorce1的数据预览(预计最短日期应为“11-04-2020 01:17:40”,最长日期应为“24-07-2020 08:09:02”):

当我们在“聚合1”中使用
min(日期时间)
max(日期时间)
时(最小日期:'07-06-2020 04:30:40'最大日期:'30-04-2020 00:56:56'):

使用
min(toTimestamp(子字符串(日期时间,4,2)+'-'+子字符串(日期时间,1,2)+子字符串(日期时间,6,14),'MM-dd-yyyy HH:MM:ss'))
max(toTimestamp(日期时间,4,2)+'-'+子字符串(日期时间,1,2)+子字符串(日期时间,6,14),'MM-dd yyyyy HH:MM:ss')
(与我们预期的值相同): 请尝试以下方法:

我的测试数据流的屏幕截图

1.source1是您的数据集1,设置“Aggregate1”:

“聚合1”的数据预览:

2.source2是您的数据集2,设置“Lookup1”(在查找条件中,请确保左列值永远不等于右列值):

“Lookup1”的数据预览:

3.使用'DerivedColumn1'更改'Dataset1\u Data\u available'的值。

表达式:
iif(greaterrequal(Event\u time,minDateTime)和lesserrequal(Event\u time,maxDateTime),'Y','N')

“DerivedColumn1”的数据预览

4.您可以在接收器中使用“选择”或“映射”删除不需要的列,然后输出结果。


更新

我创建了一些测试样本数据。
sorce1的数据预览(预计最短日期应为“11-04-2020 01:17:40”,最长日期应为“24-07-2020 08:09:02”):

当我们在“聚合1”中使用
min(日期时间)
max(日期时间)
时(最小日期:'07-06-2020 04:30:40'最大日期:'30-04-2020 00:56:56'):

使用
min(toTimestamp(子字符串(日期时间,4,2)+'-'+子字符串(日期时间,1,2)+子字符串(日期时间,6,14),'MM-dd-yyyy HH:MM:ss'))
max(toTimestamp(日期时间,4,2)+'-'+子字符串(日期时间,1,2)+子字符串(日期时间,6,14),'MM-dd yyyyy HH:MM:ss')
(与我们预期的值相同):

是您的source.csv文件吗?是的。.source是csvIs您的source.csv文件吗?是的。.source是csvHello Steve。.感谢您的回答,我认为目前大多数事情都对我有效,除了某个日期之外,我发现即使值不在最大-最小范围内,它也是Y,因此需要检查发生这种情况的原因。需要对您的上述解决方案,我可以知道我们为什么要这样做(设置'Lookup1'(在查找条件中,请确保左列值永远不等于右列值):为什么不应该相等以及此步骤的作用吗?此步骤将'lookup stream'中的列附加到主流('Dataset2'))。是否追加取决于“查找条件”。因此,确保主流(“Dateset2”)中的所有行都可以追加“查找流”(minDateTime和maxDateTime列)中的列时,该值不应等于.
值不在最大-最小范围内,因为Y
可能由比较表达式引起。您能给我看一些这些“事件时间”值,以便我可以测试它们。我已经编辑了数据集,并按照您的要求添加了两个数据集。在使用上述最小数据在第一个数据集中进行聚合时,我还面临另一个问题值是正确的,但最大值是错误的。它是923-04-2020 00:56:56),但根据数据集应该是24-07-2020 08:09:02。您需要将时间字符串转换为时间戳,然后进行比较。当您比较时间字符串时,它是根据ASCII的字符。您的日期格式是“dd-MM-yyy HH:MM:ss”,所以您需要这样做:
toTimestamp(子字符串(date\u time,4,2)+-“+子字符串(date\u time,1,2)+子字符串(date\u time,6,14),'MM-dd-yyyyy HH:MM:ss')
(toTimestamp方法不支持'dd-MM-yyyy HH:MM:ss'格式)。如果您可以更改日期格式,我建议您更改为'MM-dd-yyyyyy HH:MM:ss',然后您只需要使用这个表达式
toTimestamp(date\u-time,'MM-dd-yyyyyy HH:MM:ss')
。好的,您的日期格式是'dd-MM-yyyy HH:MM:MM',我的是'dd-MM-yyyy HH:MM:ss'。请尝试:
max(toTimestamp(date\u-time,4,2)+'-'+子字符串(date time,1,2)+子字符串(date time,6,11),'MM-dd yyyyyyyyy HH:MM')
min(toTimestamp)(date\u time,4,2)+'-'+子字符串(date\u time,1,2)+子字符串(date\u time,6,11),'MM-dd-yyyy HH:MM')
。我在我这边进行测试,效果很好。你好,史蒂夫。谢谢你的回答,我认为大部分事情都很好