powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Аналог Decode в Parallel
6 сообщений из 6, страница 1 из 1
Аналог Decode в Parallel
    #37984779
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро!

Коллеги помогите пожалуйста аналог этой функции в Transformer stage.
Есть вариант много if else писать, но охота как-то по грамотнее.

Спасибо!
...
Рейтинг: 0 / 0
Аналог Decode в Parallel
    #37986743
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К великому сожалению даже в версии 8.7 прямого аналога этой функции в Parallel Transformer нет.
Единственное, что могу вам сейчас посоветовать - это сворачивать условия для сравнения из множества if then else в один Index() при необходимости заменить на одно целевое значение.
Например:
If Index('#_95_#_97_#_98_#', '#_': In.RowValue : '_#', 1) > 0 Then 'Win'
Else If Index(...) > 0 Then 'Lin' Else 'UNIX'
И т.д...
Для больших объёмов, предлагаю использовать Lookup Stage с таблицей "раскраски" по справочному потоку.
Если значение не зацепилось - ставите в стейдже после Lookup значение по умолчанию, например с помощью NullToValue() функции трасформера. Таблицу раскраски можно оформить как "select ... from table () T", в виде RowGenerator или с помощью обычной таблицы в БД. Я обычно веду обычную таблицу...
...
Рейтинг: 0 / 0
Аналог Decode в Parallel
    #37989385
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HunterikК великому сожалению даже в версии 8.7 прямого аналога этой функции в Parallel Transformer нет.
Единственное, что могу вам сейчас посоветовать - это сворачивать условия для сравнения из множества if then else в один Index() при необходимости заменить на одно целевое значение.
Например:
If Index('#_95_#_97_#_98_#', '#_': In.RowValue : '_#', 1) > 0 Then 'Win'
Else If Index(...) > 0 Then 'Lin' Else 'UNIX'
И т.д...
Для больших объёмов, предлагаю использовать Lookup Stage с таблицей "раскраски" по справочному потоку.
Если значение не зацепилось - ставите в стейдже после Lookup значение по умолчанию, например с помощью NullToValue() функции трасформера. Таблицу раскраски можно оформить как "select ... from table () T", в виде RowGenerator или с помощью обычной таблицы в БД. Я обычно веду обычную таблицу...


Добрый день!
Спасибо большое!
...
Рейтинг: 0 / 0
Аналог Decode в Parallel
    #38006097
vadipok,

еще,как вариант, есть stage Modify, в котором есть набор функций 'lookup' - они правда своеобразно работают и позволяют "декодить" только некоторые типы в некоторые. подробнее в developer guide

lookup_string_from_int16
lookup_uint32_from_ustring и другие.
...
Рейтинг: 0 / 0
Аналог Decode в Parallel
    #38006231
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, век живи...
Выражение из Modify оператора... name_C на входе, NEW_NAME_C на выходе. Входная колонка дропается...
NEW_NAME_C:int16 = lookup_int16_from_string[{default_value = 0} ('A'=1;'B'=2;'C'=3;'D'=4;'E'=5;'F'=6;'G'=7;'H'=8;'I'=9;'J'=10)](name_C)
Работает... Кстати, modify оператор позволяет передавать себе строки преобразований на этапе runtime через параметр задания, так что прикольно - хардкодом не назовёшь... =)
...
Рейтинг: 0 / 0
Аналог Decode в Parallel
    #38007933
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hunterik,

Спасибо большое!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Аналог Decode в Parallel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]