[resolved] tOracleOutput Update : recup the line which not updated

One Star

[resolved] tOracleOutput Update : recup the line which not updated

Hello,
I would like to update some data in a table. For that, I'm using a tOracleOutput component with the option Update and I check the "Use field option"
(key for update, field can be update) in "Advanced setting".
The schema is Inputfile --> tMap --> tOracleOutput
My job is ok but I would like to have the lines which not be update in the table.
Someone have an idea please ?
Thanks
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

use insert or update?
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Hi,
After the update (or before), you can do a LEFT OUTER JOIN using a tMap between the Oracle table (main) and the input file as the lookup. Use a schema that includes columns from both the table and the input file even if they are duplicated. For the records not found in the input, there will be a set of null columns.
These records can be filtered in a tFilterRow, routing the filter connection to the destination. The filtering criteria will be the presence of null values in the columns from the input file.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Yes normally, I use a lookup but in this case, the main Oracle table have 58 705 389 lines so it will take so much time.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Don't do the tMap LEFT OUTER JOIN if you have a lot of data.
Stage the input file and use the Oracle MINUS set-based operation. This would provide query a tOracleInput. Oracle can give MINUS some performance boosts to this type of statement.
SELECT id, name, ...
FROM staged_file_table
MINUS
SELECT id, name
FROM target_table
If there was a record with id 10 in the staged_file_table that wasn't present in the target table, no update would have happened and the MINUS query would return the 10.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Sorry but I don't really see how I can do that. My staged_file_table is provide by the output of a tMap and I can use a tOracleInput to make a MINUS after...
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Hi,
Can you post a picture of your job?
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

My suggestion about the MINUS operator requires a new staging table in Oracle to take advantage of the in-database processing.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

How I can post a picture ?
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

....(T_T). Just click on the post reply button on the top of the topic and select the number of the picture you want to upload...
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

ok thanks
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

I would like to update the table "MARQ" with the data from the tMap ...
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Tu peux upload le job entier parceque la je vois quasi rien, merci !
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Ben la partie du job en question est le tMap4 ainsi que le tOracleOutput "MARQ" . Le reste du job fais juste quelques contrôles...
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Et en fait c'est quoi exactement ton probleme? T'as google talk?
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Quand tu dis que tu veux les lignes qui ne seront pas updatées, tu parles des enregistrements qui n'existent pas encore, c'est à dire des enregistrements qui seront à terme insérés?
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Je dois mettre a jour des données d'une table Oracle en fonction d'un fichier source fourni. Je souhaiterai identifier les lignes de mon fichier source qui n'ont pas été mise à jour dans la table (pb de clé donc).
non dsl, je n'ai pas google talk ...
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Comment fais tu ton update? Est ce que tu fais une jointure sur ta table au préalable?
ttable
|
tinputfile-----|-----ttable
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Je ne vois pas vraiment quel probleme tu pourrais avoir sur tes clefs à partir du moment ou les enregistrements existent deja, tes clefs ne bougent donc pas.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Or3l,
A la base, en faisant un tOracleOutput , mes lignes sont mises à jour mais je ne récupère pas les lignes qui n'ont pu être mise à jour.
La j'ai résolu en utilisant le conseil de Walkerca. Pour cela, j?écris d'abord mes lignes dans une table temp Oracle. Ensuite avec un tOracleInput, je fais un left join sur la table source avec mes champs key :
SELECT A.t1, A.t2, A.t3, B.key, B.key2
FROM A
left outer join B
ON A.t1 = B.key and A.t2 = B.key2;
Si key et key2 sont nul, c'est que ma ligne source n'existe pas dans ma table de destination. je peux ensuite, à l'aide d'un tMap ou je test la nullité de ces 2 champs, identifier les lignes qui n'ont pas pu être mise à jour dans ma table.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Walkerca,
I've solved my problem by using your advises !
First, I've inserted my data in a tempory Table and after I've made a LEFT JOIN between my tempory table and the destination table in a tOracleInput. The schema includes columns from both tables. For the records not found in the destination table, there will be a set of null columns.
After with tMap, I've filtered the data and now I can identify the lines which can't be updated in my destiantion table.
Thanks you !!
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Bien, je suis content que tu aies pour résoudre ton problème ^^. Pour info, voilà en image ce que je voulais te conseiller.
En faisant une jointure inner join sur le tmap, et en mettant catch lookup inner join reject à true tu obtiens les enregistrements présents dans la tableA et non présents dans la tableB selon les critères de jointure. En inversant les tables, tu peux aussi obtenir les enregistrements présents dans la tableB et non présent dans la tableA.
Tu peux ainsi distinguer les enregistrements qui vont être updatés et ceux qui ne le seront pas car non présents dans la table cible. Je pense que ton traitement sera plus performant.
One Star

Re: [resolved] tOracleOutput Update : recup the line which not updated

Oui je connais cette solution mais le problème avec le lookup, c'est qu'il aurait fallu lire ma table de destination entièrement, or celle-ci contient 58 705 389 lignes donc niveau tps de traitement ce n'est pas top...
Merci en tt cas du conseil.