在ADLA中合并两个行集而不使用join on子句

时间:2018-10-02 23:31:48

标签: azure-data-lake

我将两种类型的输入文件加载到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语句加载的,因此它们都位于单独的行集中。理想情况下,我希望能够加载两个行集的所有值,并循环右行以对左行进行一系列计算,以找到符合各种业务规则的匹配项。值得注意的是,简单地加入并没有任何价值,也不是简单的Regex评估,而是涉及更多的东西。因此,输出可能看起来像“左”行集:

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

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

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

是否可以通过不需要JOIN ON子句的方式执行此自定义组合?

1 个答案:

答案 0 :(得分:0)

听起来您可以使用IProcessor。这样一来,您就可以分析RIGHT集中的每一行,并添加一列(其值基于您的业务规则),随后可以将其用于加入LEFT集中。

[添加更多细节]:您也可以执行两次,一次在左边,一次在右边,以创建一个人工连接列,例如row_number或类似的东西。