Объединение двух наборов строк в ADLA без предложения объединения - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два типа входных файлов, которые я загружаю в задание 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 требует, чтобы я сделал несколькосвоего рода заявление о присоединении здесь.Однако нет общего идентификатора между каждым из наборов строк, так что нечего объединять, что внезапно делает это менее идеальным.Из опций атрибута, определенных в https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-programmability-guide#use-user-defined-combiners,, я хотел бы указать это как полное, потому что мне нужно, чтобы каждое из левых значений было доступно для оценки по каждому из правых, но, опять же, нет общего идентификатора, чтобы сделать

Затем я попытался использовать REDUCER, который принял IRowset в конструкторе IReducer в качестве параметра, затем попытался просто передать набор строк из U-SQL, но этот синтаксис ему не понравился.

Есть ли способ выполнить это пользовательское объединение так, чтобы не требовалось предложение JOIN ON?

1 Ответ

0 голосов
/ 03 октября 2018

Похоже, вы можете использовать IProcessor .Это позволит вам проанализировать каждую строку в наборе ПРАВО и добавить столбец (со значением, основанным на ваших бизнес-правилах), который вы впоследствии сможете использовать для присоединения к набору LEFT.

[Добавление более подробной информации]: Вы также можете сделать это дважды, один раз слева и один раз справа, чтобы создать столбец искусственного объединения, например row_number или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...