使用Pentaho插入更新/合并/维度查找/更新
问题描述:
PostgreSQL.I中有一个表'TICKETS'使用Pentaho执行ETL作业来填充此表。 还有一个用户进行更改的GUI,结果反映在此表中。 在表中的字段有:使用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 +客户是一样的。否则,将执行插入操作。
我该如何使用Pentaho?步骤维度/查找更新是否正确,或者更新/插入步骤是否可以完成这项工作?
任何帮助将不胜感激。提前致谢。
答
Eugene Lisitsky的建议是很好的做法:您可以将它连接到数据库约束条件并让PostgesSQL完成这项工作。
对于PDI解决方案:您的表格看起来不像Slowly Changing Dimension,因此插入/更新可以满足您的需求。
如果要使用Dimension_update,则需要以Pentaho SCD格式更改表:添加版本列和valid_form_date/valid_upto_date(使用PDI,alter是一个按钮操作)。
之后,当新行进入时,在表中搜索TICKETID + ORIGINATOR + CUSTOMERS,如果发现它收到valitity_upto = now()。同时,从now()到end-of-time有效的表中创建版本+1。
(主要)pro可以检索数据库的状态,就像过去的任何日期一样,只需在validity_from和validity_upto之间的now()处进行。 (mian)con是你必须改变可能对GUI(复数)有一些影响的表格。
TICKETID + ORIGINATOR + CUSTOMERS列上是否有唯一索引?然后你可以使用INSERT ... ON CONFLICT DO UPDATE SET column = EXCLUDED.column;'https://www.postgresql.org/docs/9.5/static/sql-insert.html –