Составление карты стоимости Pentaho Spoon

Я новичок в инструменте «ложка», и я извлекаю значения одной таблицы, чтобы загрузить другую таблицу с такими же атрибутами. В первой таблице есть столбец, содержащий значения nchar, такие как «y» и «no», которые представляют (да и нет).

Моя проблема в том, что вторая таблица имеет столбец, который будет содержать эти значения в виде tinyint, например 'y' -> 1 и 'n' -> '0'

Таблица 1

  • y
  • y
  • n
  • n
  • y

Таблица 2

  • 1
  • 1
  • 0
  • 0
  • 1

Итак, есть ли простой способ заменить эти значения и изменить их типы путем их сопоставления. Я могу выполнить эту работу в своем операторе sql, как показано ниже

SELECT CASE <variable> 
           WHEN <value>      THEN <returnvalue> 
           WHEN <othervalue> THEN <returnthis> 
           ELSE <returndefaultcase> 
       END 
  FROM <table> 

Если есть только значения 'y' и 'n', это решение было бы приемлемым, но поскольку во многих таблицах есть много значений, таких как ('a' -> 2, 'b' -> 3, 'c' -> 4 ) для меня это какая-то головная боль. Если кто-то подскажет мне практический подход, я буду признателен.


person mrgenco    schedule 13.11.2014    source источник
comment
Как насчет введения таблицы сопоставления, которая читается из БД или, например, файл CSV?   -  person Marcus Rickert    schedule 13.11.2014
comment
Что именно вы имеете в виду под таблицей сопоставления? Это что-то вроде сохранения всех эквивалентных значений во второй таблице? @Marcus Rickert   -  person mrgenco    schedule 14.11.2014
comment
Точно! Хотя это немного больше работы, чем закодированное отображение в ETL, вы можете рассматривать это как вложение, которое в дальнейшем может сэкономить ваше время. Это зависит от того, насколько быстро ваше картографирование со временем будет развиваться.   -  person Marcus Rickert    schedule 14.11.2014
comment
Звучит логично. Я запомню это. Спасибо, сэр @Marcus Rickert   -  person mrgenco    schedule 14.11.2014


Ответы (1)


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

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

введите описание изображения здесь

person Abercrombieande    schedule 13.11.2014
comment
Насколько я знаю, преобразователь значений не поддерживает преобразование типов. Это сработает, если я хочу изменить char на char или stn, но мне также нужно преобразование char - ›tinyint. Так что, похоже, я буду продолжать делать это заявление .. @Abercrombieande - person mrgenco; 14.11.2014
comment
Вам нужно использовать новое поле, когда типы данных не совпадают. Я редактирую ответ выше, чтобы показать это. - person Abercrombieande; 14.11.2014
comment
Хорошо, я проголосовал за. И обязательно попробую этот шаг в понедельник и приму ваш ответ, если он сработает. Спасибо @Abercrombieande - person mrgenco; 14.11.2014