Вставить обновление/объединение/поиск измерения/обновление с помощью Pentaho

В PostgreSQL есть таблица «БИЛЕТЫ». Я выполняю задание ETL, используя Pentaho, для заполнения этой таблицы. Существует также графический интерфейс, в котором пользователь вносит изменения, и результат отражается в этой таблице. Поля в таблице следующие:

"OID" Char(36)  <------ **PRIMARY KEY**
, "CUSTOMER" VARCHAR(255)
, "TICKETID" VARCHAR(255)
, "PRIO_ORIG" CHAR(36)
, "PRIO_COR" CHAR(36)
, "CATEGORY" VARCHAR(255)
, "OPENDATE_ORIG" TIMESTAMP
, "OPENDATE_COR" TIMESTAMP
, "TTA_ORIG" TIMESTAMP
, "TTA_COR" TIMESTAMP
, "TTA_DUR" DOUBLE PRECISION
, "MTTA_TARGET" DOUBLE PRECISION
, "TTA_REL_ORIG" BOOLEAN
, "TTA_REL_COR" BOOLEAN
, "TTA_DISCOUNT_COR" DOUBLE PRECISION
, "TTA_CHARGE_COR" DOUBLE PRECISION
, "TTR_ORIG" TIMESTAMP
, "TTR_COR" TIMESTAMP
, "TTR_DUR" DOUBLE PRECISION
, "MTTR_TARGET" DOUBLE PRECISION
, "TTR_REL_ORIG" BOOLEAN
, "TTR_REL_COR" BOOLEAN
, "TTR_DISCOUNT_COR" DOUBLE PRECISION
, "TTR_CHARGE_COR" DOUBLE PRECISION
, "COMMENT" VARCHAR(500)
, "USER" CHAR(36)
, "MODIFY_DATE" TIMESTAMP
, "CORRECTED" BOOLEAN
, "OPTIMISTICLOCKFIELD" INTEGER
, "GCRECORD" INTEGER
, "ORIGINATOR" Char(36)

Я хочу обновить таблицу, когда столбцы TICKETID+ORIGINATOR+CUSTOMERS одинаковы. В противном случае будет выполнена вставка.

Как мне это сделать с помощью Pentaho? Подходит ли для этого шаг обновления измерения/поиска или только шаг обновления/вставки будет работать?

Любая помощь приветствуется. Заранее спасибо.


person Pranjal Kaushik    schedule 12.10.2017    source источник
comment
Есть ли уникальный индекс в столбцах TICKETID+ORIGINATOR+CUSTOMERS? Затем вы можете использовать INSERT ... ON CONFLICT DO UPDATE SET column = EXCLUDED.column; postgresql.org/docs/9.5/static/sql -insert.html   -  person Eugene Lisitsky    schedule 12.10.2017


Ответы (1)


Предложение Евгения Лисицкого является хорошей практикой: вы можете запрограммировать его в ограничениях базы данных и позволить PostgesSQL выполнять эту работу.

Для решения PDI: ваша таблица не выглядит как медленно меняющееся измерение, поэтому вставка/обновление удовлетворяет ваши потребности.

Если вы хотите использовать Dimension_update, вам нужно изменить таблицу в формате Pentaho SCD: добавить столбец версии и valid_form_date/valid_upto_date (с PDI изменение выполняется одной кнопкой).

После этого, когда появляется новая строка, в таблице выполняется поиск TICKETID+ORIGINATOR+CUSTOMERS, и если он найден, он получает valitity_upto=now(). В то же время в таблице создается версия+1, действующая с now() до конца времени.

(Главное) преимущество в том, что вы можете получить состояние базы данных, как это было в любой момент в прошлом, с помощью простой функции where now() между valid_from и valid_upto.

Минус (миан) в том, что вам нужно изменить таблицу, что может оказать некоторое влияние на графический интерфейс (во множественном числе).

person AlainD    schedule 12.10.2017