2016-07-29 2 views
0

У меня есть вход из таблицы A в базе данных A, которую я хотел бы присоединиться к другой таблице B в базе данных B.Pentaho DI - Как использовать «все» результаты предыдущего шага на следующем шаге в качестве запроса «IN»

Это были мои два варианта:

  1. Использование базы данных Регистрация: Для каждого входа из таблицы в базе данных а, запустите присоединиться запрос в B. базы данных
  2. Используйте два ввода таблицы (talbeA + TableB) и сделать merge join on key.

Я пошел с опцией № 1, так как я хочу, чтобы не читать в tableA и tableB целиком.

Мой вопрос: Как я могу использовать все результаты с предыдущего шага как один запрос «IN»?

Например

select * 
from tableB b 
where b.id IN (all_rows_from_prior_step) 

по сравнению с (там, где он работает для каждой входной строки)

select * 
from tableB b 
where b.id = ? 

ответ

0

использовать 'Группы по' для выравнивания строк в одну строку с полем ' all_rows_from_prior_step 'из разделенных запятыми идентификаторов (поле группы: пустое, имя: all_rows_from_prior_step, Subject: id, Тип:' объединить строки, разделенные символом '). Затем, используя 'User Defined Java Expression' для построения запроса SQL:

"select * from tableB b where b.id IN (" + all_rows_from_prior_step + ")"

Последнее, используйте 'Dynamic SQL строки' для выполнения запроса. Шаблон SQL может быть

select * from tableB b where 1=0

+0

я следовал, как подробно описан в вашем объяснении, однако, если у меня есть десять входных строк, я закончил с десятью в Запросе времени побежал в конце. Похоже, что «Concat Fields» не сглаживает строки в 1 ряд для меня. Я играл с различными опциями в «Конкат-полях», но не играл в кости. – SRS

+0

Извините, мое объяснение было неправильным. См. Обновленное объяснение. – matthiash

+0

Обновленное объяснение делает именно то, что я искал, я получаю один хороший запрос IN! – SRS

Смежные вопросы