Добрый день уважаемый читатель, если ты конечно вообще есть. Сегодня мы рассмотрим задачу, которая будет часто встречаться у вас при обработке всевозможных данных. Я не совсем уверен в точности определений, но это будет звучать примерно так: «PIVOTE/UPIVOTE; Транспонирование; Нормализация/Денормализация;» . Я прошу поправить меня, если я не совсем корректен.
Для человека, который уже не первый день знаком с kettle pentaho data integration, предлагаю посмотреть документацию по шагам «Row Normaliser» и «Row DeNormaliser» . Если вы не знаете буржуйский или не совсем понятно о чём идёт речь, или что совсем будет странно, вам нравиться моё повествование, то оставайтесь с нами.
I. Row DeNormaliser / PIVOT
Дано:
Name | SUM | Month |
---|---|---|
Иванов Иван Иванович | 22000 | January |
Иванов Иван Иванович | 25000 | February |
Иванов Иван Иванович | 21000 | March |
Иванов Иван Иванович | 22000 | April |
Петров Николай Фёдорович | 24500 | January |
Петров Николай Фёдорович | 24500 | February |
Петров Николай Фёдорович | 24500 | March |
Петров Николай Фёдорович | 24500 | April |
Петров Николай Фёдорович | 24500 | May |
Сидоров Алексей Григорьевич | 23000 | January |
Умнова Василиса Игоревна | 4560 | March |
Некрутая Алина Ивановна | 23455 | May |
Нужно получить:
NAME | January | February | March | April | May |
---|---|---|---|---|---|
Иванов Иван Иванович | 22000 | 25000 | 21000 | 22000 | |
Петров Николай Фёдорович | 24500 | 24500 | 24500 | 24500 | 24500 |
Сидоров Алексей Григорьевич | 23000 | ||||
Умнова Василиса Игоревна | 4560 | ||||
Некрутая Алина Ивановна | 23455 |
Приступим:
1) Создаём трансформацию.
2) Размещаем основные компоненты. (Зависит от типа источника данных. Я использую csv, т.к. самой распространённой и простой является обработка текстовых файлов.)
3) Настраиваем ключевой шаг в этой трансформации (Row denormaliser).
II. Row Normaliser / UNPIVOT
Дано:
NUMBER | NAME | INNER_PHONE | ADDRESS | ICQ |
---|---|---|---|---|
1 | Иванов Иван Иванович | 453 | lenina 10 23 | 3242352234 |
2 | Петров Николай Фёдорович | 765 | Belkina 20 1 | 3242352234 |
3 | Сидоров Алексей Григорьевич | 327 | Minina 3 4 | 3242352234 |
4 | Умнова Василиса Игоревна | 876 | street 2 | 3242352234 |
5 | Некрутая Алина Ивановна | 3346 | street 3 | 3242352234 |
Нужно получить:
NUMBER | NAME | TYPE | VALUE |
---|---|---|---|
1 | Иванов Иван Иванович | INNER_PHONE | 453 |
1 | Иванов Иван Иванович | ADDRESS | lenina 10 23 |
1 | Иванов Иван Иванович | ICQ | 3242352234 |
2 | Петров Николай Фёдорович | INNER_PHONE | 765 |
2 | Петров Николай Фёдорович | ADDRESS | Belkina 20 1 |
2 | Петров Николай Фёдорович | ICQ | 3242352234 |
3 | Сидоров Алексей Григорьевич | INNER_PHONE | 327 |
3 | Сидоров Алексей Григорьевич | ADDRESS | Minina 3 4 |
3 | Сидоров Алексей Григорьевич | ICQ | 3242352234 |
4 | Умнова Василиса Игоревна | INNER_PHONE | 876 |
4 | Умнова Василиса Игоревна | ADDRESS | street 2 |
4 | Умнова Василиса Игоревна | ICQ | 3242352234 |
5 | Некрутая Алина Ивановна | INNER_PHONE | 3346 |
5 | Некрутая Алина Ивановна | ADDRESS | street 3 |
5 | Некрутая Алина Ивановна | ICQ | 3242352234 |
1) Создаём трансформацию.
2) Размещаем основные компоненты. (Зависит от типа источника данных. Я использую csv, т.к. самой распространённой и простой является обработка текстовых файлов.)
3) Настраиваем ключевой шаг в этой трансформации (Row normaliser).
Всё достаточно просто и не требует специальных навыков, что не может не радовать простого пользователя.
III. Примечания
* Ссылка на пример: RowNormaliser
* При переносе скрипта не забудьте указать параметр SCRIPT_HOME у трансформации. Для этого необходимо нажать правой кнопкой мыши и в контекстном меню выбрать пункт «Transformation settings» или нажать комбинацию клавиш Ctrl+T.
* P. S. Видео к сожалению подготовить мне не удалось, жду микрофон из Поднебесной. Иконки изменились в версии 5.4. Так что не пугайтесь. 🙂