Как сделать динамический c выбор на основе набора результатов из предыдущего шага на Pentaho Kettle? - PullRequest
0 голосов
/ 17 июня 2020

Я хочу выполнить оператор выбора на основе набора результатов из предыдущего шага, примерно так:

выбрать столбец из таблицы, где столбец в (предыдущий шаг);

В основном это step (строки фильтра) разделит группу идентификаторов на основе условия. Я хочу сделать выбор среди тех, кто проверил ложь, но я не знаю, как выбрать только тех. Рассматриваемая таблица, которую я хочу выбрать, очень большая, и очень дорого выделять все записи и присоединяться к набору результатов, поэтому я sh выбираю только ту группу, которая мне нужна, возможно ли это вообще?

https://i.stack.imgur.com/Xu1qt.png

Ответы [ 2 ]

0 голосов
/ 31 июля 2020

Вы можете использовать три шага для достижения этого.

Во-первых, используйте шаг Memory group by для группировки идентификаторов в качестве поля. Совокупное значение tyoe должно быть Concatenate strings separated by ,

Во-вторых, используйте Шаг User defined java expression для создания нового поля содержит SQL, которое нам нужно. Выражение может выглядеть так: "SELECT id,created FROM test WHERE order_id IN ("+ ids +")", а ids - это результат группы с последнего шага.

Наконец, мы можем использовать Dynamic SQL row шаг для поиска данных по указанному SQL.

0 голосов
/ 19 июня 2020

Хорошо, позвольте мне быть более конкретным c.

В основном у меня есть 3 шага, как показывает моя распечатка.

Первый шаг - это ввод таблицы, который я выбираю из таблица.

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

И третий шаг - это строки фильтра, где я как бы делаю if else оператор.

После моего третьего шага (строки фильтра) у меня есть 2 потока: True или False.

Каждый поток возвращает мне группу идентификаторов и других полей, но здесь это не так важно, Я думаю.

Я хочу сделать оператор select на основе этих идентификаторов, возвращенных с предыдущего шага (шаг 3 ° Filter rows).

В основном поведение, которое я хочу, похоже на этот запрос:

select * from table where id in («предыдущий шаг»);

Где table всегда будет одна и та же таблица, поэтому я не думаю, что это будет проблемой или чем-то в этом роде.

И «предыдущий шаг» означает, что все идентификаторы возвращены после шага 3 ° (фильтрация er rows).

Что я делаю прямо сейчас: у меня есть еще один вход в таблицу с другой стороны, который я выполняю слиянием с этим набором результатов (с шагом 3 °). Но мне нужно выбрать всю таблицу, а затем присоединиться к моему набору результатов, что очень дорого, и мне интересно, смогу ли я получить тот же результат, но с большей производительностью.

I не знаю, достаточно ли я понят, но я прошу прощения прямо сейчас, потому что engli sh это не мой основной язык, но я надеюсь, что вы, ребята, теперь меня понимаете, спасибо.

...