【问题标题】:How to compare max min values of one column to another column in Azure Data Fatory如何将一列的最大值最小值与 Azure Data Fatory 中的另一列进行比较
【发布时间】:2020-09-02 02:25:12
【问题描述】:

在下图中,我有两个数据集,并且我在 azure 数据工厂中创建了一个数据流。 我想从 dataset1 获取最大和最小日期并将其与 dataset2 进行比较。 如下例所示,我有 min(date_time) = 11-04-2020 01:17:40 和 max(date_time) = 30-06-2020 22:00:00。因此,介于这两个最大值和最小值之间的日期将与 dataset2 中的 Event_time 列进行比较,所有匹配的日期应在 Dataset1_Data_available 列中打印为“Y”,不匹配的日期应为“N”。 谢谢!!

【问题讨论】:

  • 你的源文件是 .csv 文件吗?
  • Yes..source 是 csv

标签: azure azure-data-factory


【解决方案1】:

请试试这个:

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

1.source1 是您的 Dataset1,设置为“Aggregate1”:

“Aggregate1”的数据预览:

2.source2 是您的Dataset2,设置'Lookup1'(在查找条件下,请确保左列值永远不会等于右列值):

“Lookup1”的数据预览:

3.使用'DerivedColumn1'改变'Dataset1_Data_available'的值

表达式:iif(greaterOrEqual(Event_time, minDateTime) && lesserOrEqual(Event_time, maxDateTime),'Y','N')

“DerivedColumn1”的数据预览

4.可以在sink中使用'select'或者'mapping'删除不需要的列,然后输出结果。


更新

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

当我们在 'Aggregate1' 中使用 min(date_time)max(date_time) 时(最小日期:'07-06-2020 04:30:40' 最大日期:'30-04-2020 00:56:56'):

当使用min(toTimestamp(substring(date_time, 4, 2)+'-'+substring(date_time, 1,2) + substring(date_time,6,14),'MM-dd-yyyy HH:mm:ss'))max(toTimestamp(substring(date_time, 4, 2)+'-'+substring(date_time, 1,2) + substring(date_time,6,14),'MM-dd-yyyy HH:mm:ss'))时(与我们预期的值相同):

【讨论】:

  • 你好史蒂夫。。谢谢你的回答需要检查为什么会发生这种情况。您的上述解决方案需要一个澄清,我可以知道我们为什么这样做('Lookup1'的设置(在查找条件下,请确保左列值永远不会等于右列值):为什么不应该相等,这一步在做什么?
  • 此步骤将“查找流”中的列附加到您的主流(“Dataset2”)。是否附加取决于“查找条件”。因此,确保所有行来自您的主要流('Dateset2')可以从“查找流”(minDateTime 和 maxDateTime 列)追加列。The values are not within the max min range it is coming as Y 可能由比较表达式引起。你能给我看一些这些 'Event_time' 值,以便我可以测试它们在我这边。
  • 我已经编辑了数据集并按照您的要求添加了两个数据集。我在使用上述数据最小值在第一个数据集中进行聚合时面临的另一个问题是正确的,但最大值是不正确的。它是 923-04-2020 00:56:56 )但应该是 24-07- 2020 08:09:02 根据数据集。
  • 你需要将你的时间字符串转换为时间戳然后比较。当你比较时间字符串时,它是根据ASCII字符。你的日期格式是'dd-MM-yyyy HH:mm:ss ',所以你需要这样做:toTimestamp(substring(date_time, 4, 2)+'-'+substring(date_time, 1,2) + substring(date_time,6,14),'MM-dd-yyyy HH:mm:ss')(toTimestamp方法不支持'dd-MM-yyyy HH:mm:ss'格式)。如果你可以改变你的日期格式,我建议你改成'MM-dd -yyyy HH:mm:ss',那么你只需要使用这个表达式toTimestamp(date_time,'MM-dd-yyyy HH:mm:ss').
  • 好的,你的日期格式是'dd-MM-yyyy HH:mm',我的是'dd-MM-yyyy HH:mm:ss'。请试试:max(toTimestamp(substring(date_time, 4, 2)+'-'+substring(date_time, 1,2) + substring(date_time,6,11),'MM-dd-yyyy HH:mm')),min(toTimestamp(substring(date_time, 4, 2)+'-'+substring(date_time, 1,2) + substring(date_time,6,11),'MM-dd-yyyy HH:mm')) .我在我这边测试并且它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2018-08-25
  • 2021-03-07
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多