首页 > 解决方案 > 在 ADLA 中组合两个行集而不使用 join on 子句

问题描述

我有两种类型的输入文件要加载到 ADLA 作业中。在一个中,我有一堆数据(左),在另一个中,我有一个对我很重要的值列表(右)。

作为此处的示例,假设我在“左”行集中使用以下内容:

| ID | URL                     | 
|----|-------------------------|
| 1  | https://www.google.com/ |
| 2  | https://www.yahoo.com/  |
| 3  | https://www.hotmail.com/|

我的右侧行集中将包含以下内容:

| ID | Name  | Regex       | Exceptions | Other Lookup Val |
|----|-------|-------------|------------|------------------|
| 1  | ThisA | /[a-z]{3,}/ | abc        | 091238           |
| 2  | ThatA | /[a-z]{3,}/ | xyz        | lksdf9           |
| 3  | OtherA| /[a-z]{3,}/ | def        | 098143           |

由于每个都是通过 EXTRACT 语句加载的,因此它们都位于单独的行集中。理想情况下,我希望能够加载两个行集的所有值并循环通过右侧行集以针对左侧行集运行一系列计算,以根据各种业务规则找到匹配项。值得注意的是,简单地加入没有任何价值,也不是简单的正则表达式评估,而是涉及更多的东西。因此,输出可能看起来像“左”行集:

| ID | URL                     | 
|----|-------------------------|
| 1  | https://www.google.com/ |
| 3  | https://www.hotmail.com/|

现在,COMBINER 是我看到的唯一接受两个行集的 UDO,但 U-SQL 语法要求我在这里执行某种连接语句。但是,每个行集之间没有共同的标识符,所以没有什么可以加入的,这突然使这看起来不那么理想了。在https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-programmability-guide#use-user-defined-combiners定义的属性选项中,我想将其指定为 Full 因为我需要每个可用的左侧值来评估每个正确的值,但同样,没有共享标识符来执行此操作。

然后我尝试使用一个 REDUCER,它在 IReducer 构造函数中接受一个 IRowset 作为参数,然后尝试只从 U-SQL 传递行集,但它不喜欢这种语法。

有没有办法以不需要 JOIN ON 子句的方式执行这种自定义组合?

标签: azure-data-lake

解决方案


听起来您可以使用IProcessor。这将允许您分析 RIGHT 集中的每一行并添加一列(具有基于您的业务规则的值),您随后可以使用该列连接到 LEFT 集中。

[添加更多细节]:您也可以这样做两次,一次用于左侧,一次用于右侧,以创建人工连接列,如 row_number 或类似的。


推荐阅读