Преобразование для выбора datatable на основе значения в отдельной таблице

У меня есть три таблицы (источник Oracle), позволяет называть их таблицами 1, 2 и 3.

Я хотел бы проверить логическое поле в таблице 1, и если это T, я хочу только данные из таблицы 2, а если это F, я хочу только таблицу 3.

Какая трансформация была бы наиболее эффективной для этого, и как я могу ее реализовать?

Я экспериментирую с преобразованиями Filter, Java и Expression, но если выражения проверяются по очереди за строкой, то кажется, что избыточное выражение для выражения должно выполняться на каждой строке, а не просто проверять один раз и использовать соответствующую таблицу.

Обе таблицы 2 и 3 имеют поле с тем же именем, и я хочу это поле только для одной из таблиц, основываясь на условии.

1
nl ja de
@MarekGrzenkowicz У них похожая структура, но не та же. Обе таблицы 2 и 3 имеют поле с тем же именем, и я хочу это поле только для одной из таблиц, основываясь на условии. Я действительно не предпочитаю количество сопоставлений, в зависимости от того, что быстрее, если это имеет значение, если бы мне пришлось выбирать, я бы сказал одно отображение.
добавлено автор JWiley, источник

1 ответы

Создайте сопоставление, похожее на следующую диаграмму:

src_TABLE2 --> sq_TABLE2 --|
                           |--> union --> (further processing)
src_TABLE3 --> sq_TABLE3 --|

и используйте следующие условия Source Filter * в исходных классификаторах:

-- for sq_TABLE2
'T' = ( SELECT FLAG FROM TABLE1 )

-- for sq_TABLE3
'F' = ( SELECT FLAG FROM TABLE1 )

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

* Исходный фильтр - это атрибут на вкладке Свойства исходного классификатора. Условие, указанное здесь, добавляется к предложению WHERE оператора SELECT , который отправляется в базу данных.

0
добавлено
@JWiley Да, вы должны поместить этот запрос (вместе с = 'T' или = 'F' ) в квалификаторы источника для TABLE2 и TABLE3. Для сопоставления не нужно содержать квалификатор источника для TABLE1, вам вообще не требуется определение источника для этой таблицы. Вы можете поместить любое условие (со сложными вложенными операциями SELECT , ссылающимися на любую таблицу или схему, которые вам нужны). Пока результирующий запрос - SELECT ports FROM sq_table WHERE source_filter - действителен, он будет отправлен в базу данных и выполнен. Вы пытались его реализовать? Вы пытались решить какую-либо проблему?
добавлено автор Marek Grzenkowicz, источник
@JWiley Протестируйте его самостоятельно - возьмите любое рабочее сопоставление, поместите 0 = 1 в свойство Source Filter его исходного классификатора, обновите сеанс и запустите его. Никакие строки не будут извлечены из базы данных.
добавлено автор Marek Grzenkowicz, источник
Не могли бы вы рассказать о том, как вы использовали/устанавливали условия для исходных классификаторов?
добавлено автор JWiley, источник
Итак, вы говорите, что я должен поставить «SELECT FLAG FROM TABLE1» в исходном квалификаторе без каких-либо сопоставлений от TABLE1 до TABLE2/TABLE3? Значит, мне не нужно связывать два квалификатора/источников?
добавлено автор JWiley, источник
У меня есть, я просто хотел уточнить. Мои требования менялись несколько раз с момента публикации, поэтому я все еще разрабатывал, как ее применять.
добавлено автор JWiley, источник
Я знаю, ты заслужил кредит. Благодарю.
добавлено автор JWiley, источник