在PostgreSQL.I中有一个'TICKETS‘表。我使用Pentaho执行一个ETL作业来填充这个表。还有一个GUI,用户可以在该GUI上进行更改,结果将反映在此表中。表中的字段为:
"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相同时更新表。否则,将执行插入。
我该怎么用五角星来做呢?step Dimension/Lookup更新是否适合它,或者只有Update/Insert步骤可以完成工作?
任何帮助都将不胜感激。提前谢谢。
发布于 2017-10-12 15:32:45
Eugene Lisitsky的建议是一个很好的实践:您可以将其硬连接到数据库约束中,并让PostgesSQL来完成这项工作。
对于PDI解决方案:您的表看起来不像缓慢变化的维度,因此Insert/Update可以满足您的需求。
如果您想要使用Dimension_update,您需要修改Pentaho SCD格式的表:添加一个版本列和valid_form_date/valid_upto_date (使用PDI,修改是一个按钮操作)。
之后,当有新行进入时,将在表中搜索TICKETID+ORIGINATOR+CUSTOMERS,如果找到,则接收valitity_upto=now()。同时,在表中创建一个从now()到时间结束的version+1。
(主要)优点在于,您可以在validity_from和validity_upto之间使用一个简单的where now()来检索数据库在过去任何日期的状态。
(主要)缺点是,您必须更改表,这可能会对GUI(复数)产生一些影响。
https://stackoverflow.com/questions/46701970
复制相似问题