Как получить значение из другой строки в том же самом пиплелине данных? - PullRequest
1 голос
/ 08 октября 2008

У меня загружены данные и завершены различные преобразования данных, проблема в том, что в данных есть управляемые отношения родитель / потомок - лучше всего объяснить на примере

каждая строка имеет (имена столбцов составлены)

row_key    parent_row_key   row_name    parent_row_name

в некоторых строках есть row_key == parent_row_key (их собственный родитель) некоторые строки относятся к другому ряду (например, строка 25 является родителем строки 44).

В этом случае строка 25 является родительской по отношению к строке 44. Мне нужно поместить имя строки 25 в строку имя родителя 44 в строке parent_row_name. Как запросить данные в конвейере для значения?

Ответы [ 4 ]

3 голосов
/ 08 октября 2008

Разве вы не можете просто разделить данные с помощью многоадресной рассылки, а затем выполнить объединение слиянием против себя?

0 голосов
/ 15 декабря 2011

Как вы говорите

У меня загружены данные и завершены различные преобразования данных

Могу ли я тогда предположить, что у вас уже есть все данные, доступные во временной или промежуточной таблице? Если так, то просто выполнение ОБНОВЛЕНИЯ поля должно помочь? Предполагая, что не вся информация может быть доступна в промежуточной таблице, можно выполнить каскадный поиск значения сначала из промежуточной таблицы, а затем из фактической таблицы, если ничего не найдено. Выполнение этого в одном обновлении легко превзойдет его выполнение построчно. (особенно если у вас есть подходящие индексы)

UPDATE staging_table
   SET parent_row_name = COALESCE(new.row_name, old.row_name, '#N/A#')
  FROM staging_table upd
  LEFT OUTER JOIN staging_table new
               ON new.row_key = upd.parent_row_key
  LEFT OUTER JOIN destination_table old
               ON old.row_key = upd.parent_row_key
0 голосов
/ 13 ноября 2008

Похоже на то, как Macola (Exact Software) обрабатывает транзакции. В их ситуации транзакция добавляется в таблицу, и она включает в себя ссылку на исходную транзакцию в строке - например, если исходная транзакция была покупкой в ​​январе, а платеж в феврале, то февральский платеж будет включать номер транзакции от январского платежа в столбце, относящемся к родителю. Поскольку отношения между внешними ключами отсутствуют, каждой начальной транзакции присваивается указатель, который может перемещаться между регистрами по всей системе.

0 голосов
/ 24 октября 2008

Вы можете записать свои данные во временную таблицу в своей базе данных, в место назначения необработанного файла или место назначения набора записей (в зависимости от размера набора данных). Затем вы можете снова просмотреть ваши данные, запросить временные данные и найти правильного родителя.

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