0

Il existe une table 'BILLETS' dans PostgreSQL. J'effectue un travail ETL en utilisant Pentaho pour remplir cette table. Il existe également une interface graphique sur laquelle un utilisateur apporte des modifications et le résultat est reflété dans cette table. Les champs de la table sont:Insérer une mise à jour/fusion/recherche de dimension/mise à jour à l'aide de 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) 

Je veux mettre à jour la table lorsque les colonnes TicketID + + INITIATEUR CLIENTS sont les mêmes. Sinon, une insertion sera effectuée.

Comment dois-je faire avec Pentaho? Est-ce que la mise à jour de la dimension/recherche de l'étape est correcte ou simplement l'étape Mettre à jour/Insérer fera le travail?

Toute aide serait grandement appréciée. Merci d'avance.

+0

Existe-t-il un index unique sur les colonnes TICKETID + ORIGINATOR + CLIENTS? Ensuite, vous pouvez utiliser la commande INSERT ... ON CONFLICT DO UPDATE SET colonne = EXCLUDED.column; 'https://www.postgresql.org/docs/9.5/static/sql-insert.html –

Répondre

0

La suggestion d'Eugene Lisitsky est une bonne pratique: vous pouvez la câbler dans les contraintes de la base de données et laisser PostgesSQL faire le travail.

Pour une solution PDI: votre table ne ressemble pas à une cote lentement variable, donc l'insertion/mise à jour répond à vos besoins. Si vous souhaitez utiliser Dimension_update, vous devez modifier la table dans le format Pentaho SCD: ajoutez une colonne de version et valid_form_date/valid_upto_date (avec PDI, l'opération alter est une opération à un seul bouton).

Ensuite, lorsqu'une nouvelle ligne arrive, le TICKETID + ORIGINATOR + CLIENTS est recherché dans la table et s'il est trouvé il reçoit un valitity_upto = now(). En même temps, une version + 1 est créée dans la table valide à partir de maintenant() jusqu'à la fin du temps.

Le (principal) pro est que vous pouvez récupérer l'état de la base de données comme il était à n'importe quelle date dans le passé avec un simple où maintenant() entre validity_from et validity_upto. Le (mian) con est que vous devez modifier la table qui peut avoir un impact sur les GUI (pluriel).