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

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

Спасибо!
...
Рейтинг: 0 / 0
06.10.2012, 23:45
    #37986743
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог Decode в Parallel
К великому сожалению даже в версии 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
09.10.2012, 09:08
    #37989385
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог Decode в Parallel
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
19.10.2012, 17:11
    #38006097
Аналог Decode в Parallel
vadipok,

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

lookup_string_from_int16
lookup_uint32_from_ustring и другие.
...
Рейтинг: 0 / 0
19.10.2012, 18:40
    #38006231
Hunterik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог Decode в Parallel
Ну, век живи...
Выражение из 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
22.10.2012, 12:19
    #38007933
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аналог Decode в Parallel
Hunterik,

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


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