Je souhaiterais utiliser un masque de rejets pouvant récupérer le schéma de ma table cible. Avez vous une doc sur le sujet ou une piste ?
Quelque chose du genre : R_[SchemaTargetName]_[TargetName] est ce possible ?
Merci à vous
Best Answer
R
Romain ALCARAZ
said
4 months ago
Bonjour Axel,
Je comprends donc bien le problème.
En effet, en allant récupérer ./tech:physicalName() dans votre metadata (au niveau d'un schema), xDI va substituer cette fonction en concaténant le nom du catalog avec le schema. En plus de ça, les noms de ces objets contenant des caractères majuscules, xDI va forcer leur conservation en entourant avec des guillemets puisque l'instance PostgreSQL peut être sensible à la casse au niveau du nom des objets.
La solution que je propose est de ne récupérer que le nom du schema dans le nom d'objet sans le nom du catalog (en espérant que ça réponde bien à vos attentes).
Pour cela, il suffit de remplacer ./tech:physicalName() par ./tech:schemaName() L'avantage, c'est que xDI n'ajoutera pas de guillemets. Dans votre exemple vous obtiendrez donc une table de rejet nommée "DEVDWH"."ALIM"."R_ALIM_WRK_DWHV3_D_MTF_RET"
Attention, si vous souhaitez appliquer des masques de nom d'objet au niveau des tables (donc à un niveau inférieur à celui de votre schéma), il faudra utiliser cette syntaxe ../tech:schemaName() (.. au lieu de . avant le /tech) pour spécifier à xDI d'aller chercher le nom de schema du niveau supérieur.
Je vous laisse tester, n'hésitez pas à revenir vers moi si besoin ou pour confirmer que c'est bien fonctionnel.
Il est aussi possible d'utiliser les attributs suivants :
[shortMapId] ou [MapID] qui permettent notamment de positionner l'identifiant du mapping qui alimente la table cible,
[sessionTimestampName] qui permet de récupérer une identifiant propre à chaque session.
Ces autres attributs permettent d'avoir une unicité dans le nom des éléments temporaires. Cela peut s'avérer utile dans le cas où une table est alimentée par plusieurs mappings, voire plusieurs sessions, exécutés en parallèle.
Par rapport à votre question, il ne sera donc pas possible via ce genre d'attribut de nommer vos éléments temporaires avec le nom du schema cible.
Néanmoins, vous pouvez utiliser une fonction xPath, dans le masque, afin de récupérer le nom du schema.
Pour cela, vous pouvez utiliser les syntaxes suivantes :
au niveau du schema (exemple pour les rejets) : R_[TargetName]_%x{./tech:physicalName()}x%
au niveau de la table (même exemple) : R_[TargetName]_%x{./ref:schema()/tech:physicalName()}x%
Vous constaterez la différence entre les deux syntaxes : à partir du schema c'est très simple, xDI va simplement récupérer le physicalName() du schema. Et à partir de la table, il est nécessaire de "remonter" au niveau du schema (via le ref:schema()) puis de récupérer le physicalName() de celui ci comme dans l'exemple précedent.
Attention à la longueur des noms des éléments tolérée par les SGBD. En cas de doute, vous pouvez modifier le paramètre "Object Truncation Size" à la valeur souhaitée pour limiter le nom d'objet qui sera généré.
Je vous laisse tester de votre côté, n'hésitez pas à faire un retour.
Bon courage et bonne journée.
A
Axel Vanneste
said
5 months ago
Bonjour Romain,
Merci pour votre réponse rapide, j'ai pu avoir l'occasion de tester de mon côté aujourd'hui. Je fais fasse à quelques problèmes en passant directement par le xpath.
Imaginons une table DWH.D_PRD, je souhaiterai que la table générée soit
En passant par l'utilisation de R_%x{./tech:physicalName()}x%_[TargetName] le résultat obtenu est "R_"DEVDWH"."DWH"_D_PRD"
Le point et les guillemets étant gênant pour la création de ma table j'ai pensé utilisé une variable %{VARIABLE}% ou ${VARIABLE}$ mais là sans succès.
Je suis preneur de pistes supplémentaires.
Bonne journée à vous,
Axel
R
Romain ALCARAZ
said
5 months ago
Bonjour Axel,
Pourriez-vous partager une capture de votre metadata (l'écran de paramétrage du schema) s'il vous plaît ?
A
Axel Vanneste
said
5 months ago
Bonjour Romain,
Dans le schéma ALIM j'ai fait quelques tests parmi lesquels j'ai ajouté du xpath dans le nom comme ci-dessous :
Une fois cela fait j'ai testé l'un de mes flux contenant des rejets :
Le résultat obtenu est le suivant pour la table de rejets de la table WRK_DWHV3_D_MTF_RET:
Je suis preneur de quelconque solution, je vous remercie pour votre réactivité.
Axel
R
Romain ALCARAZ
said
5 months ago
Bonjour Axel,
En fait, je demandais de partager l'écran de paramétrage de la metadata du schema (onglet Standard) afin de voir comment les attributs Name et Schema Name étaient alimentés.
(exemple sur une de mes metadata en PostgreSQL) :
Cela me permettra de proposer une solution qui correspond bien à votre attente.
A
Axel Vanneste
said
4 months ago
Bonjour Romain,
Désolé pour cette réponse tardive, après avoir profité du beau soleil de juillet voici la capture d'écran :
Je reste à votre disposition pour tout besoin complémentaire.
Axel
R
Romain ALCARAZ
said
4 months ago
Answer
Bonjour Axel,
Je comprends donc bien le problème.
En effet, en allant récupérer ./tech:physicalName() dans votre metadata (au niveau d'un schema), xDI va substituer cette fonction en concaténant le nom du catalog avec le schema. En plus de ça, les noms de ces objets contenant des caractères majuscules, xDI va forcer leur conservation en entourant avec des guillemets puisque l'instance PostgreSQL peut être sensible à la casse au niveau du nom des objets.
La solution que je propose est de ne récupérer que le nom du schema dans le nom d'objet sans le nom du catalog (en espérant que ça réponde bien à vos attentes).
Pour cela, il suffit de remplacer ./tech:physicalName() par ./tech:schemaName() L'avantage, c'est que xDI n'ajoutera pas de guillemets. Dans votre exemple vous obtiendrez donc une table de rejet nommée "DEVDWH"."ALIM"."R_ALIM_WRK_DWHV3_D_MTF_RET"
Attention, si vous souhaitez appliquer des masques de nom d'objet au niveau des tables (donc à un niveau inférieur à celui de votre schéma), il faudra utiliser cette syntaxe ../tech:schemaName() (.. au lieu de . avant le /tech) pour spécifier à xDI d'aller chercher le nom de schema du niveau supérieur.
Je vous laisse tester, n'hésitez pas à revenir vers moi si besoin ou pour confirmer que c'est bien fonctionnel.
Bon courage.
A
Axel Vanneste
said
4 months ago
Bonjour Romain,
Merci pour cette solution et vos explications, cela a parfaitement fonctionné !
Axel Vanneste
Bonjour,
Je souhaiterais utiliser un masque de rejets pouvant récupérer le schéma de ma table cible. Avez vous une doc sur le sujet ou une piste ?
Quelque chose du genre : R_[SchemaTargetName]_[TargetName] est ce possible ?
Merci à vous
Bonjour Axel,
Je comprends donc bien le problème.
En effet, en allant récupérer ./tech:physicalName() dans votre metadata (au niveau d'un schema), xDI va substituer cette fonction en concaténant le nom du catalog avec le schema.
En plus de ça, les noms de ces objets contenant des caractères majuscules, xDI va forcer leur conservation en entourant avec des guillemets puisque l'instance PostgreSQL peut être sensible à la casse au niveau du nom des objets.
La solution que je propose est de ne récupérer que le nom du schema dans le nom d'objet sans le nom du catalog (en espérant que ça réponde bien à vos attentes).
Pour cela, il suffit de remplacer ./tech:physicalName() par ./tech:schemaName()
L'avantage, c'est que xDI n'ajoutera pas de guillemets. Dans votre exemple vous obtiendrez donc une table de rejet nommée "DEVDWH"."ALIM"."R_ALIM_WRK_DWHV3_D_MTF_RET"
Attention, si vous souhaitez appliquer des masques de nom d'objet au niveau des tables (donc à un niveau inférieur à celui de votre schéma), il faudra utiliser cette syntaxe ../tech:schemaName() (.. au lieu de . avant le /tech) pour spécifier à xDI d'aller chercher le nom de schema du niveau supérieur.
Je vous laisse tester, n'hésitez pas à revenir vers moi si besoin ou pour confirmer que c'est bien fonctionnel.
Bon courage.
- Oldest First
- Popular
- Newest First
Sorted by Oldest FirstRomain ALCARAZ
Bonjour,
La documentation décrit les différents attributs qu'il est possible d'utiliser dans les masques des éléments temporaires (table de chargement, intégration ou rejet) : https://www.semarchy.com/doc/semarchy-xdi/xdi/2024.1/Design/data/metadata/database.html#tname-masks
Il est aussi possible d'utiliser les attributs suivants :
Ces autres attributs permettent d'avoir une unicité dans le nom des éléments temporaires. Cela peut s'avérer utile dans le cas où une table est alimentée par plusieurs mappings, voire plusieurs sessions, exécutés en parallèle.
Par rapport à votre question, il ne sera donc pas possible via ce genre d'attribut de nommer vos éléments temporaires avec le nom du schema cible.
Néanmoins, vous pouvez utiliser une fonction xPath, dans le masque, afin de récupérer le nom du schema.
Pour cela, vous pouvez utiliser les syntaxes suivantes :
Axel Vanneste
Bonjour Romain,
Merci pour votre réponse rapide, j'ai pu avoir l'occasion de tester de mon côté aujourd'hui. Je fais fasse à quelques problèmes en passant directement par le xpath.
Imaginons une table DWH.D_PRD, je souhaiterai que la table générée soit
En passant par l'utilisation de R_%x{./tech:physicalName()}x%_[TargetName] le résultat obtenu est "R_"DEVDWH"."DWH"_D_PRD"
Le point et les guillemets étant gênant pour la création de ma table j'ai pensé utilisé une variable %{VARIABLE}% ou ${VARIABLE}$ mais là sans succès.
Je suis preneur de pistes supplémentaires.
Bonne journée à vous,
Axel
Romain ALCARAZ
Bonjour Axel,
Pourriez-vous partager une capture de votre metadata (l'écran de paramétrage du schema) s'il vous plaît ?
Axel Vanneste
Bonjour Romain,
Dans le schéma ALIM j'ai fait quelques tests parmi lesquels j'ai ajouté du xpath dans le nom comme ci-dessous :
Une fois cela fait j'ai testé l'un de mes flux contenant des rejets :
Le résultat obtenu est le suivant pour la table de rejets de la table WRK_DWHV3_D_MTF_RET:
create table "DEVDWH"."ALIM"."R_"DEVDWH"."ALIM"_WRK_DWHV3_D_MTF_RET"
Je suis preneur de quelconque solution, je vous remercie pour votre réactivité.
Axel
Romain ALCARAZ
Bonjour Axel,
En fait, je demandais de partager l'écran de paramétrage de la metadata du schema (onglet Standard) afin de voir comment les attributs Name et Schema Name étaient alimentés.
(exemple sur une de mes metadata en PostgreSQL) :
Cela me permettra de proposer une solution qui correspond bien à votre attente.
Axel Vanneste
Bonjour Romain,
Désolé pour cette réponse tardive, après avoir profité du beau soleil de juillet voici la capture d'écran :
Je reste à votre disposition pour tout besoin complémentaire.
Axel
Romain ALCARAZ
Bonjour Axel,
Je comprends donc bien le problème.
En effet, en allant récupérer ./tech:physicalName() dans votre metadata (au niveau d'un schema), xDI va substituer cette fonction en concaténant le nom du catalog avec le schema.
En plus de ça, les noms de ces objets contenant des caractères majuscules, xDI va forcer leur conservation en entourant avec des guillemets puisque l'instance PostgreSQL peut être sensible à la casse au niveau du nom des objets.
La solution que je propose est de ne récupérer que le nom du schema dans le nom d'objet sans le nom du catalog (en espérant que ça réponde bien à vos attentes).
Pour cela, il suffit de remplacer ./tech:physicalName() par ./tech:schemaName()
L'avantage, c'est que xDI n'ajoutera pas de guillemets. Dans votre exemple vous obtiendrez donc une table de rejet nommée "DEVDWH"."ALIM"."R_ALIM_WRK_DWHV3_D_MTF_RET"
Attention, si vous souhaitez appliquer des masques de nom d'objet au niveau des tables (donc à un niveau inférieur à celui de votre schéma), il faudra utiliser cette syntaxe ../tech:schemaName() (.. au lieu de . avant le /tech) pour spécifier à xDI d'aller chercher le nom de schema du niveau supérieur.
Je vous laisse tester, n'hésitez pas à revenir vers moi si besoin ou pour confirmer que c'est bien fonctionnel.
Bon courage.
Axel Vanneste
Bonjour Romain,
Merci pour cette solution et vos explications, cela a parfaitement fonctionné !
Bonne journée à vous,
Axel
-
File external resolver with encrypted value
-
Timeout on Mapping/Webservice call
-
UNIQUE TEMP TABLE NAMES
-
Previous step name from a sub-process of execute delivery
-
Dropping multiple tables at once in XDI
-
Freeze Designer and corrupted workspace
-
FileWait/Move/Copy: FileInclude with space
-
Loop excel files
-
Change SVN user in the Designer
-
How to Specify the JVM used by the Designer?
See all 64 topics