【问题标题】:Data flow single row transformation数据流单行转换
【发布时间】:2021-06-23 11:39:10
【问题描述】:

我有一个转换可以通过数据流实现。

谢谢 阿努杰·古普塔

【问题讨论】:

  • 我们看不到图片。

标签: azure-data-factory transformation dataflow azure-cloud-services azure-data-lake-gen2


【解决方案1】:

如果列数据CN=SERVICE NOW,OU=TOOL;CN=PYTHON,OU=LANGUAGE;CN=ADF,OU=CLOUD模式是固定的,那么可以使用数据流derived column表达式来实现。

我只是做了一个例子来获取输出,这里是数据集:

数据流派生列表达式:

  1. Col1 列值:col1 --> {Col1 }
  2. 一列值:SERVICE NOW-->substring(split({ Col2},';')[1], 5, length(split({ Col2},';')[1])-12)
  3. b 列值:PYTHON --> substring(split({ Col2},';')[2], 4, length(split({ Col2},';')[1])-17)
  4. c 列值:ADF --> substring(split({ Col2},';')[3], 4, length(split({ Col2},';')[1])-20)

截图:

但是如果数据是动态的,我们无法在数据工厂中进行转换,这是无法实现的。

【讨论】:

  • 嗨,Leon,我在 sql 中尝试过同样的事情,但使用 string_split,我也尝试过你的,但数据是巨大的非结构化和派生列我必须写几次可能是 100 多列,最后数据也是行明智我需要列明智。如果您在下面看到 T-sql 查询,它工作正常,但同样的查询我们如何在映射数据流中做到这一点,我仍在搜索。声明 @var varchar(200)= 'CN=SERVICE NOW,OU=TOOL;CN=Citiscan,OU=LANGUAGE;CN=Medicalkit,OU=CLOUD' select substring(value,4,charindex(',',value) - 4 ) 从 string_Split(@Var,';') 输出按列显示。立即服务 Citiscan Medicalkit。
  • 嗨@anuj,希望你做得很好。另一种方法是将查询添加为存储过程,然后使用 Lookup active + Foreach active 并在管道中激活内部存储过程。
  • 嗨,是的,Leon 使用 storeproc 和视图可以完成,但该要求仍应仅由 adf 单独处理。作为进入 blob 的文件 - 非结构化 - (使用数据流使其干净/数据按摩 - 再次将其转储到 blob 存储。)我也遵循了你的拆分,但最后如何使其在列中明智。跨度>
  • @anuj 需要在 sink 映射中设置新列,选择你想要的列并映射到 sink 列。
【解决方案2】:

逻辑:你可以得到'CN='的第一次出现的索引和逗号的第一次出现的索引来获得它们之间的第一个单词,即Service Now。

对其他人也是如此。

如果我有时间,我会尝试用实际的语法来编辑它!

【讨论】:

  • 嗨 Monkia,如果您在数据流块中有专门的语法,那将会很有帮助。
【解决方案3】:

字符串由;分隔。首先在派生变换中除以(所以你得到一个数组)。然后,您可以使用“map”函数提取最后一个 = 之前的字符串。您将拥有一组值(ADF/Python 等)。然后使用扁平化转换将列转换为行。

【讨论】:

  • 嗨,基兰,怎么样?我用了这个表达式 split({Col1}, ';'),没有输出。我避免索引策略的原因是 Input col1 是非结构化的,并且在大小 appx 1000+ 列条目中很大,并且将来会出现更多。如果有任何适合你的表达方式,请分享。我在下面的突触酶中尝试过 - 声明 @var varchar(200)= 'CN=SERVICE NOW,OU=TOOL;CN=Citiscan,OU=LANGUAGE;CN=Medicalkit,OU=CLOUD' select substring(value,4,charindex(' ,',value) -4 ) 来自 string_Split(@Var,';') 输出按列显示。立即服务 Citiscan Medicalkit。它的工作原理与数据流中需要实现的相同。
  • map(split(Col1, ';'), substring(#item, 4, locate(#item, ',OU=')) 这将为您提供需要展平的值数组
  • 将此分配给派生列。然后使用展平变换。 docs.microsoft.com/en-us/azure/data-factory/data-flow-flatten
  • 嗨,Kiran 表达式在 adf builder 中运行良好,它以数组的形式给出 ["","",""],当我尝试在 d 列上展平时,即由 d[] 展开输出我变得空白。
  • map(split(Col1, ';'), substring(#item, 4, locate(#item, ',OU=')-4)) 也试过这个。 flatten 后仍然输出为空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2015-02-11
相关资源
最近更新 更多