0

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?步驟維度/查找更新是否正確,或者更新/插入步驟是否可以完成這項工作?

任何幫助將不勝感激。提前致謝。

+0

TICKETID + ORIGINATOR + CUSTOMERS列上是否有唯一索引?然後你可以使用INSERT ... ON CONFLICT DO UPDATE SET column = EXCLUDED.column;'https://www.postgresql.org/docs/9.5/static/sql-insert.html –

回答

0

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(複數)有一些影響的表格。