ADF 映射数据流 - 脏值/清洁值替换

时间:2021-06-29 23:59:44

标签: azure-data-factory azure-data-flow

我正在尝试为通用脏/干净映射操作构建 ADF 映射数据流 - 其目的是查看特定列中的脏值并将其替换为干净值。我已经有了如下所示的 Dirty/Clean 数据集:

<头>
column_name 干净
手机 (555) 123-1234 (555) 124-6578
手机 不适用 未知
产品 ACME 剃须刀 1265 ACME Shaver vPro 2
区域 SA 南非
区域 英国 英国

这些都只是例子,但你明白了要点。该数据是较早生成的,并且该部分工作正常。我已将此数据集放入缓存接收器中。

好的,现在需要清理我传入的原始数据文件。它看起来像这样:

<头>
id customer_id order_date 区域 产品 手机
1 1235599 2021-06-14 德国 蒙多花洒 (334) 987-0098
2 9823999 2021-06-10 美国 ACME 剃须刀 1265 不适用
3 2223593 2020-12-15 SA 割草机 3000 (555) 123-1234
4 8989098 2021-02-04 英国 Power Sprayer 2.5 不适用

目标是用好的值替换脏值。由于我的脏/清洁映射文件在缓存接收器中,我认为我可以使用派生列活动以及缓存查找来查找清洁值,将当前列名和当前值(脏)作为键。我做了一个基于规则的映射表达式来获取需要清理的列:

What should go in the red box?

我通过这个表达式得到了我需要处理的列:

!isNull(ColumnNamesCache#lookup(name).column_name)

这使用了一个单独的缓存,它只包含需要清理的不同列名,并且工作正常。

但是,下一次查找是在表达式构建器的值部分执行的,以获取 Clean 值(如果存在),需要列名,这就是我卡住的地方

当您在表达式构建器的值部分中时,“$$”表达式指的是 VALUE,而仅当您在列部分中时,它才指代 COLUMN NAME。如何获取值表达式中的当前列名?

所以本质上,我需要在 Value 中使用这种表达式来执行任何潜在 Clean 值的查找:

How to get the Column Name in the Value Expression?

这是目前为止的表达:

iif(!isNull(EntityDCCache#lookup('CURRENT COLUMN NAME HERE', toString($$)).clean), EntityDCCache#lookup('CURRENT COLUMN NAME HERE', toString($$)).clean, toString($$))

注意:我知道我正在执行两次查找并且效率低下。如果我解决了这个问题,我会努力解决这个问题! :)

EntityDCCache 是 Dirty/Clean 数据集,它需要两个键 - 列名和原始(脏)值。如果找到,表达式将用干净的值替换原始值。如果不是,它只是保持原始值。

再想一想,如果在这种情况下无法获得列名,那么在前面的步骤中将列名作为每个原始值的前缀怎么样?

因此值可能是 product_ACME Shaver 1265、phone_(555) 123-1234 等。我知道可能很昂贵,但如果我能做到这一点,我就可以轻松地提取两个值以进行清洁值查找。

感谢您的帮助!我希望有一些简单的东西我错过了。这旨在无模式并适用于各种不同的文件。

附注。我还没有尝试过 Pivots 等,但可以对其开放(phone_dirty、phone_clean、product_dirty、product_clean 等),但不确定 JOIN 表达式是否可以工作以及它会是什么样子。

感谢您的任何想法!

真诚的

杰森

0 个答案:

没有答案
相关问题