Langage de requête MDM et accès aux données REST
Cet article est principalement axé sur les opérations de lecture et d'écriture de l'API REST de MDM et donne des exemples de requêtes simples et plus complexes que vous pouvez inclure aux appels de l'API REST.
Cet article s'applique à tous les produits Talend Platform avec MDM, en version 6.0 et suivantes.
Ressources de l'API REST de MDM
Talend MDM Web UI fournit un accès à la documentation des ressources REST de MDM. Elle vous permet de consulter la syntaxe du langage de requêtes ainsi que les paramètres associés et de tester l'exécution des opérations.
Vous pouvez également intégrer l'API pour les données et l'API pour les transactions. Pour plus d'informations, consultez Intégration de l'API pour les transactions.
Vous pouvez activer le support du partage des ressources d'origine croisée (CORS), dans MDM, lors du développement d'une application Web consommant des ressources MDM REST. Pour plus d'informations, consultez Support du partage des ressources d'origine croisée dans MDM.
Gestion des utilisateurs et des utilisatrices
Création d'un enregistrement
Crée un nouvel enregistrement dans le conteneur de données spécifié. L'enregistrement sera fourni dans le contenu de requête au format XML ou JSON. L'ID de l'enregistrement sera retourné dans l'en-tête de réponse location
.
Requête |
Le corps est une représentation XML ou JSON de l'enregistrement à créer. |
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la création d'un nouvel enregistrement pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête au format XML
<Product>
<Picture>/imageserver/upload/TalendShop/tshirt.jpg</Picture>
<Id>231035936</Id>
<Name>Talend Fitted T-Shirt</Name>
<Description>Fitted T. ultra-fine combed ring spun cotton</Description>
<Features>
<Sizes/>
<Colors/>
</Features>
<Availability>false</Availability>
<Price>15.99</Price>
<Family>[1]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035936</OnlineStore>
<Stores>
<Store></Store>
</Stores>
</Product>
Exemple de requête au format JSON
{
"Product": {
"Picture": "/imageserver/upload/TalendShop/tshirt.jpg",
"Id": "231035936",
"Name": "Talend Fitted T-Shirt",
"Description": "Fitted T. ultra-fine combed ring spun cotton",
"Features": {
"Sizes": {},
"Colors": {}
},
"Availability": "false",
"Price": "15.99",
"Family": "[1]",
"OnlineStore": "Talend Shop@@http://www.cafepress.com/Talend.231035936",
"Stores": {}
}
}
Exemple d'en-têtes de réponse
{
"pragma": "No-cache",
"date": "Tue, 18 Dec 2018 02:35:36 GMT",
"location": "231035936"
}
Mettre à jour un enregistrement
Met à jour un enregistrement de données en intégralité dans le conteneur de données spécifié. L'enregistrement sera fourni dans le contenu de requête au format XML ou JSON.
Si vous souhaitez conserver des valeurs existantes, utilisez plutôt l'opération de mise à jour partielle. Pour plus d'informations, consultez Mise à jour partielle d'un enregistrement.
Requête |
Le corps est une représentation XML ou JSON de l'enregistrement à mettre à jour. L'élément Id dans le corps de la requête détermine quel enregistrement sera mis à jour. |
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la mise à jour des enregistrements pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête au format XML
<Product>
<Picture>/imageserver/upload/TalendShop/tshirt.jpg</Picture>
<Id>231035936</Id>
<Name>Talend Fitted T-Shirt</Name>
<Description>Fitted T. ultra-fine combed ring spun cotton</Description>
<Features>
<Sizes/>
<Colors/>
</Features>
<Availability>false</Availability>
<Price>18</Price>
<Family>[1]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035936</OnlineStore>
<Stores>
<Store></Store>
</Stores>
</Product>
Exemple de requête au format JSON
{
"Product": {
"Picture": "/imageserver/upload/TalendShop/tshirt.jpg",
"Id": "231035936",
"Name": "Talend Fitted T-Shirt",
"Description": "Fitted T. ultra-fine combed ring spun cotton",
"Features": {
"Sizes": {},
"Colors": {}
},
"Availability": "false",
"Price": "18",
"Family": "[1]",
"OnlineStore": "Talend Shop@@http://www.cafepress.com/Talend.231035936",
"Stores": {}
}
}
Supprimer un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Mise à jour partielle d'un enregistrement
Requête |
Le corps est une représentation XML de l'enregistrement à mettre à jour. L'élément Id dans le corps de la requête détermine quel enregistrement sera mis à jour. |
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la mise à jour partielle des enregistrements pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête
Supposons qu'il existe un enregistrement comme celui ci-dessous dans une entité Famille :
<Family>
<Id>1</Id>
<Name>Lee</Name>
<Kids>
<Kid>
<Name>David</Name>
<Age>10</Age>
<Habits>
<Habit>Basketball</Habit>
<Habit>Tennis</Habit>
</Habits>
</Kid>
<Kid>
<Name>James</Name>
<Age>8</Age>
</Kid>
<Kid>
<Name>Kate</Name>
<Age>6</Age>
</Kid>
</Kids>
</Family>
La valeur delete définie comme true, la valeur pivot définie comme Family/Kids/Kid, et la valeur clé définie comme /Name vont permettre à l'exemple de requête suivant de supprimer l'élément Kid aux occurences multiples identifié par James :
<Person>
<Id>1</Id>
<Kids>
<Kid>
<Name>James</Name>
</Kid>
</Kids>
</Person>
La valeur overwrite définie comme false, la valeur delete définie comme false, la valeur pivot définie comme Family/Kids/Kid[1]/Habits/Habit (Kid[1] indique le premier enfant), la valeur key non spécifiée ou définie comme . et la valeur position définie comme 2 vont permettre à l'exemple de requête suivant d'ajouter deux valeurs à l'élément Habit aux occurences multiples après </Habit>Basketball</Habit>
pour le premier enfant :
<Person>
<Id>1</Id>
<Kids>
<Kid>
<Habits>
<Habit>Football</Habit>
<Habit>Table tennis</Habit>
</Habits>
</Kid>
</Kids>
</Person>
Créer ou mettre à jour des enregistrements par lots
Crée ou met à jour par lots plusieurs enregistrements de données appartenant à une ou plusieurs entité(s) dans le conteneur de données spécifié. Les enregistrements seront fournis dans le contenu de requête au format XML ou JSON.
Vous pouvez également effectuer une mise à jour partielle de nombreux enregistrements appartenant à une entité en une opération de masse via l'API REST. Pour plus d'informations, consultez Mise à jour partielle de masse d'enregistrements de données MDM via l'API REST.
Requête |
Le corps est une représentation XML ou JSON de l'enregistrement ou des enregistrements à créer ou à mettre à jour. Les enregistrements sous forme de représentation XML doivent être entourés par une balise racine avec un nom arbitraire, records par exemple. Chaque enregistrement contient :
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la création et la mise à jour de différents enregistrements par lots pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête au format XML
<records>
<Store>
<Id>100001</Id>
<Address>Beijing APM</Address>
</Store>
<Store>
<Id>100002</Id>
<Address>Beijing Department Store</Address>
</Store>
<Product>
<Picture>/imageserver/upload/TalendShop/dog.jpg</Picture>
<Id>231035933</Id>
<Name>Talend Dog T-Shirt</Name>
<Description>Doggie t-shirt from American Apparel</Description>
<Features>
<Sizes>
<Size>Small</Size>
<Size>Medium</Size>
<Size>Large</Size>
<Size>X-Large</Size>
</Sizes>
<Colors>
<Color>White</Color>
</Colors>
</Features>
<Availability>false</Availability>
<Price>16.99</Price>
<Family>[3]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035933</OnlineStore>
<Stores>
<Store>100001</Store>
<Store>100002</Store>
</Stores>
</Product>
</records>
Exemple de requête au format JSON
[
{
"Store": {
"Id": "100001",
"Address": "Beijing APM"
}
},
{
"Store": {
"Id": "100002",
"Address": "Beijing Department Store"
}
},
{
"Product": {
"Picture": "/imageserver/upload/TalendShop/dog.jpg",
"Id": "231035933",
"Name": "Talend Dog T-Shirt",
"Description": "Doggie t-shirt from American Apparel",
"Features": {
"Sizes": {
"Size": [
"Small",
"Medium",
"Large",
"X-Large"
]
},
"Colors": {"Color": "White"}
},
"Availability": "false",
"Price": "16.99",
"Family": "[3]",
"OnlineStore": "Talend Shop@@http://www.cafepress.com/Talend.231035933",
"Stores": {
"Store": [
"100001",
"100002"
]
}
}
}
]
Supprimer un enregistrement par requête
Requête |
Le corps est un langage de requête au format JSON. Le type de contenu du paramètre est application/json. |
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la suppression d'un enregistrement par requête pour l'entité Role du conteneur de données système PROVISIONING. |
Exemple de requête
Pour supprimer les instances de Product où Product/Price est supérieur à 18, utilisez la requête suivante :
{
"select": {
"from": ["Product"],
"where": {
"gt":[
{"field": "Product/Price"},
{"value": "18"}
]
}
}
}
Obtenir des documents XML
Requête |
Le corps est un tableau d'ID uniques. Le type de contenu du paramètre est application/json. |
Paramètres |
|
En-têtes |
|
Réponse | Tableau JSON contenant les documents des enregistrements. |
Statut |
|
Limitation | Cette API REST ne supporte pas l'obtention de documents XML pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête
[
"Product.Product.231035933",
"Product.Product.231035934",
"Product.Product.231035935"
]
Exemple de réponse
[
"<ii>
<c>Product</c>
<dmn>Product</dmn>
<dmr/>
<sp/>
<t>1531809768682</t>
<taskId>null</taskId>
<i>231035933</i>
<p>
<Product>
<Id>231035933</Id>
<Name>Talend Dog T-Shirt</Name>
<Description>Doggie t-shirt from American Apparel</Description>
<Features>
<Sizes>
<Size>Small</Size>
<Size>Medium</Size>
<Size>Large</Size>
<Size>X-Large</Size>
</Sizes>
<Colors>
<Color>White</Color>
</Colors>
</Features>
<Availability>true</Availability>
<Price>16.99</Price>
<Family>[14]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035933</OnlineStore>
<Stores/>
</Product>
</p>
</ii>",
"<ii>
<c>Product</c>
<dmn>Product</dmn>
<dmr/>
<sp/>
<t>1531809768659</t>
<taskId>null</taskId>
<i>231035934</i>
<p>
<Product>
<Id>231035934</Id>
<Name>Talend Jr. Spaghetti Tank</Name>
<Description>Spaghetti tank from American Apparel</Description>
<Features>
<Sizes>
<Size>Small</Size>
<Size>Medium</Size>
<Size>Large</Size>
<Size>X-Large</Size>
</Sizes>
<Colors>
<Color>White</Color>
<Color>Light Blue</Color>
<Color>Light Pink</Color>
<Color>Lemon</Color>
</Colors>
</Features>
<Availability>true</Availability>
<Price>16.99</Price>
<Family>[8]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035934</OnlineStore>
<Stores/>
</Product>
</p>
</ii>",
"<ii>
<c>Product</c>
<dmn>Product</dmn>
<dmr/>
<sp/>
<t>1531809767902</t>
<taskId>null</taskId>
<i>231035935</i>
<p>
<Product>
<Id>231035935</Id>
<Name>Talend Golf Shirt</Name>
<Description>Golf-style, collared t-shirt</Description>
<Features>
<Sizes>
<Size>Medium</Size>
</Sizes>
<Colors>
<Color>White</Color>
</Colors>
</Features>
<Availability>false</Availability>
<Price>16.99</Price>
<Family>[8]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035935</OnlineStore>
<Stores/>
</Product>
</p>
</ii>"
]
Obtenir les ID uniques de tous les documents
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Tableau JSON contenant toutes les clés primaires de l'entité du conteneur spécifié. |
Statut |
|
Limitation | Cette API REST ne supporte pas l'obtention des ID uniques de tous les documents de l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de réponse
[
"Product.Product.231035935",
"Product.Product.231035941",
"Product.Product.231035937",
"Product.Product.231035938",
"Product.Product.231035939",
"Product.Product.231035940",
"Product.Product.231035934",
"Product.Product.231035936",
"Product.Product.231035933"
]
Obtention d'une chaîne de caractères XML d'un document
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Document de l'enregistrement du conteneur de données spécifié. |
Statut |
|
Limitation | Cette API REST ne supporte pas l'obtention d'une chaîne de caractères XML d'un document dans l'entité Role du conteneur de données système PROVISIONING. |
Exemple de réponse
<ii>
<c>Product</c>
<dmn>Product</dmn>
<dmr/>
<sp/>
<t>1531728848296</t>
<taskId>null</taskId>
<i>1</i>
<p>
<Product>
<Id>1</Id>
<Name>New Name</Name>
<Description>2</Description>
<Features>
<Sizes>
<Size>Small</Size>
<Size>Medium</Size>
<Size>Large</Size>
</Sizes>
<Colors>
<Color>White</Color>
<Color>Light Blue</Color>
<Color>Light Pink</Color>
</Colors>
</Features>
<Availability>true</Availability>
<Price>3.00</Price>
<Stores>
</Stores>
</Product>
</p>
</ii>
Obtenir les enregistrements à l'aide d'une requête
Obtient les enregistrements de données via le conteneur de données spécifié. La requête est fournie dans le contenu demandé en JSON.
Vous pouvez également récupérer un snapshot d'un enregistrement MDM spécifique et parcourir l'historique des enregistrements. Pour plus d'informations, consultez Machine MDM à remonter dans le temps.
Requête |
Le corps est un langage de requête au format JSON. Le type de contenu du paramètre est application/json. |
Paramètres |
|
En-têtes |
|
Réponse | Documents des enregistrements dans le conteneur spécifié. |
Statut |
|
Limitation | Cette API REST ne supporte pas l'obtention des enregistrements par requête pour l'entité Role du conteneur de données système PROVISIONING. |
Exemple de requête
{
"select": {
"from": ["Product"],
"where": {
"gt":[
{"field": "Product/Price"},
{"value": "16"}
]
}
}
}
Exemple de réponse au format XML
<results>
<Product>
<Picture>/imageserver/upload/TalendShop/dog.jpg</Picture>
<Id>231035933</Id>
<Name>partialNameUpdate1</Name>
<Description>partialDescriptionUpdate1</Description>
<Features>
<Sizes>
<Size>Small</Size>
<Size>Medium</Size>
<Size>Large</Size>
<Size>X-Large</Size>
</Sizes>
<Colors>
<Color>White</Color>
</Colors>
</Features>
<Availability>true</Availability>
<Price>111.00</Price>
<Family>[14]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035933</OnlineStore>
<Stores/>
</Product>
<Product>
<Picture>/imageserver/upload/TalendShop/tshirt.jpg?width=150&height=90&preserveAspectRatio=true</Picture>
<Id>231035935</Id>
<Name>partialNameUpdate3</Name>
<Description>partialDescriptionUpdate3</Description>
<Features>
<Sizes>
<Size>Medium</Size>
</Sizes>
<Colors>
<Color>White</Color>
</Colors>
</Features>
<Availability>false</Availability>
<Price>333.00</Price>
<Family>[1]</Family>
<OnlineStore>Talend Shop@@http://www.cafepress.com/Talend.231035936</OnlineStore>
<Stores/>
</Product>
</results>
Exemple de réponse au format JSON
[
{
"product": {
"picture": "/imageserver/upload/TalendShop/dog.jpg",
"id": "1",
"name": "New Name",
"description": "Doggie t-shirt from American Apparel",
"features": {
"sizes": {
"size": [
"Small",
"Medium",
"Large",
"X-Large"
]
},
"colors": {
"color": [
"White"
]
}
},
"availability": "true",
"price": "16.99",
"family": "[14]",
"onlinestore": "Talend Shop@@http://www.cafepress.com/Talend.231035933",
"stores": {}
}
},
{
"product": {
"picture": "/imageserver/upload/TalendShop/dog.jpg",
"id": "231035933",
"name": "Talend Dog T-Shirt",
"description": "Doggie t-shirt from American Apparel",
"features": {
"sizes": {
"size": [
"Small",
"Medium",
"Large",
"X-Large"
]
},
"colors": {
"color": [
"White"
]
}
},
"availability": "true",
"price": "16.99",
"family": "[14]",
"onlinestore": "Talend Shop@@http://www.cafepress.com/Talend.231035933",
"stores": {}
}
},
{
"product": {
"picture": "/imageserver/upload/TalendShop/spaghetti.jpg",
"id": "231035934",
"name": "Talend Jr. Spaghetti Tank",
"description": "Spaghetti tank from American Apparel",
"features": {
"sizes": {
"size": [
"Small",
"Medium",
"Large",
"X-Large"
]
},
"colors": {
"color": [
"White",
"Light Blue",
"Light Pink",
"Lemon"
]
}
},
"availability": "true",
"price": "16.99",
"family": "[8]",
"onlinestore": "Talend Shop@@http://www.cafepress.com/Talend.231035934",
"stores": {}
}
}
]
Valider des enregistrements dans un conteneur
Valide des enregistrements dans le conteneur spécifié. Les enregistrements seront fournis dans le contenu de requête au format XML.
Vous pouvez également valider des enregistrements de données MDM via l'API REST à l'aide d'un Job. Pour plus d'informations, consultez Valider des enregistrements de données par rapport au stockage maître via l'API REST.
Request |
Le corps est une représentation XML d'un ou plusieurs enregistrement(s) à valider, pouvant être entouré d'une balise racine avec un nom arbitraire, records par exemple. |
Paramètres |
|
En-têtes |
|
Réponse | Liste des résultats de validation pour chaque enregistrement, au format JSON, contenant le statut de validité, un message de la règle de validation ou du processus Before Saving ou un message vide et, facultativement, l'enregistrement d'entrée comme echo. |
Statut |
|
Limitation | L'API REST ne supporte pas la validation des enregistrements pour les entités suivantes :
|
Exemple de requête
<records>
<ProductFamily>
<Name>Literature</Name>
<Status>Approved</Status>
</ProductFamily>
<ProductFamily>
<Name>Comics</Name>
<Status>Unknown</Status>
</ProductFamily>
</records>
Exemple de réponse au format XML
<results>
<result>
<isValid>false</isValid>
<message><msg>[EN:Validation faild]</msg></message>
<sourceXml>
<ProductFamily>
<Name>Literature</Name>
<Status>Approved</Status>
</ProductFamily>
</sourceXml>
</result>
<result>
<isValid>false</isValid>
<message></message>
<sourceXml>
<ProductFamily>
<Name>Comics</Name>
<Status>Unknown</Status>
</ProductFamily>
</sourceXml>
</result>
</results>
Exemple de réponse au format JSON
[
{
"isValid": false,
"message": "<msg>[EN:Validation faild]</msg>\n",
"sourceXml": "<ProductFamily><Name>Literature</Name><Status>Approved</Status></ProductFamily>"
},
{
"isValid": true,
"message": "",
"sourceXml": "<ProductFamily><Name>Comics</Name><Status>Unknown</Status></ProductFamily>"
}
]
Lister les clés primaires pour le conteneur et le type
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Retourne le tableau JSON contenant toutes les clés primaires de l'entité du conteneur. |
Statut |
|
Limitation | Cette API REST ne supporte pas la liste des clés primaires pour l'entité Role du conteneur de données système PROVISIONING. |
Exemple de réponse
[
{
"$explicitprojection$": {
"id": "231035933"
}
},
{
"$explicitprojection$": {
"id": "231035934"
}
},
{
"$explicitprojection$": {
"id": "231035935"
}
},
{
"$explicitprojection$": {
"id": "231035936"
}
},
{
"$explicitprojection$": {
"id": "231035937"
}
}
]
Mettre partiellement à jour les enregistrements en une opération de masse
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la mise à jour partielle d'enregistrements en une opération de masse pour l'entité Role dans le conteneur de données système PROVISIONING. |
Exemple de requête au format XML
<records>
<Product>
<Id>231035933</Id>
<Name>PartialNameUpdate1</Name>
<Price>111</Price>
<Stores>
<Store>[100001]</Store>
</Stores>
</Product>
<Product>
<Id>231035934</Id>
<Name>PartialNameUpdate2</Name>
<Price>222</Price>
<Family>[2]</Family>
</Product>
</records>
Exemple de requête au format JSON (1)
[
{
"Product": {
"Id": "231035933",
"Name": "PartialNameUpdate1",
"Price": "111",
"Stores": {
"Store": ["100001"]
}
}
},
{
"Product": {
"Id": "231035934",
"Name": "PartialNameUpdate2",
"Price": "222",
"Family": "[2]"
}
}
]
Exemple de requête au format JSON (2)
{
"records": {
"Product": [
{
"Id": "231035933",
"Name": "PartialNameUpdate1",
"Price": "111",
"Stores": {
"Store": ["100001"]
}
},
{
"Id": "231035934",
"Name": "PartialNameUpdate2",
"Price": "222",
"Family": "[2]"
}
]
}
}
Pour plus d'exemples concernant cette API REST, consultez Mise à jour partielle de masse d'enregistrements de données MDM via l'API REST.
Obtenir un enregistrement de données par ID
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Contenu de l'enregistrement an format JSON array. |
Statut |
|
Limitation | Cette API REST ne supporte pas l'obtention d'un enregistrement par ID pour l'entité Role du conteneur de données système PROVISIONING. |
Exemple de réponse
[
{
"product": {
"picture": "/imageserver/upload/TalendShop/dog.jpg",
"id": "231035933",
"name": "Talend Dog T-Shirt",
"description": "Doggie t-shirt from American Apparel",
"features": {
"sizes": {
"size": [
"Small",
"Medium",
"Large",
"X-Large"
]
},
"colors": {
"color": [
"White"
]
}
},
"availability": "false",
"price": "16.99",
"family": "[10]",
"onlinestore": "Talend Shop@@http://www.cafepress.com/Talend.231035933",
"stores": {}
}
}
]
Supprimer un enregistrement par ID
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Limitation | Cette API REST ne supporte pas la suppression d'un enregistrement par ID pour l'entité Role du conteneur de données système PROVISIONING. |
Administration
Obtenir le nom de tous les conteneurs
Obtient le nom de tous les conteneurs, dont les conteneurs système et les conteneurs de données déployés.
Requête |
|
En-têtes |
|
Réponse | Tableau JSON contenant le nom de tous les conteneurs. |
Statut |
|
Exemple de réponse
[
"amaltoOBJECTSRole",
"amaltoOBJECTSView",
"amaltoOBJECTSDataModel",
"UpdateReport",
"Product"
]
Créer un conteneur de données
Crée un conteneur de données avec le nom du conteneur de données spécifié.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Vérifier si un conteneur contient une Staging Area
Vérifie si un système spécifié ou un conteneur de données est configuré avec le stockage staging.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Retourne true si le conteneur spécifié est configuré avec le stockage staging, ou false s'il ne l'est pas. |
Statut |
|
Vérifier l'existence d'un conteneur
Vérifie l'existence d'un système spécifié ou d'un conteneur.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Retourne true si le conteneur spécifié existe, ou false s'il n'existe pas. |
Statut |
|
Créer un modèle de données
Crée un modèle de données avec un nom défini et son contenu fournit par un corps de requête en schéma XML.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Exemple de requête
L'exemple de schéma XML va créer un modèle de données avec deux entités Employee et Team.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:element name="Employee">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Team" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_ForeignKey">Team/Id</xsd:appinfo>
<xsd:appinfo source="X_ForeignKey_NotSep">true</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Employee">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
<xsd:element name="Team">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Team">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
</xsd:schema>
Obtenir les paramètres d'une entité par son nom
Obtient les paramètres d'une entité par son nom, dont l'ID (nom) du modèle de données dans lequel l'entité est créée.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Paramètres de l'entité au format JSON. |
Statut |
|
Exemple de réponse
{
"dataModelId": "Product",
"entity": "Product"
}
Obtenir le schéma XML d'un modèle de données
Obtient le schéma XML d'un modèle de données par son nom.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Schéma XML du modèle de données spécifié. |
Statut |
|
Exemple de réponse
L'exemple suivant montre le schéma XML d'un modèle de données Company, avec deux entités Employee et Team.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:element name="Employee">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Team" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_ForeignKey">Team/Id</xsd:appinfo>
<xsd:appinfo source="X_ForeignKey_NotSep">true</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Employee">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
<xsd:element name="Team">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Team">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
</xsd:schema>
Lister les éventuelles incidences des modifications sur un modèle de données
Liste les éventuelles incidences des modifications sur un modèle de données existant, en fournissant une autre version du schéma XML de ce modèle de données dans la requête. En exécutant cet appel, aucune modification ne sera appliquée au modèle de données existant.
Pour plus d'informations concernant le niveau d'incidence des modifications sur un modèle de données, consultez https://help.talend.com/r/fr-FR/7.3/studio-user-guide/data-model-changes-and-their-impact-levels.
Request |
|
Paramètres |
|
En-têtes |
|
Réponse | La description des éventuelles incidences des modifications sur un modèle de données au format XML. |
Statut |
|
Exemple de réponse
L'exemple suivant montre les éventuelles incidences des modifications sur le modèle de données Company dans Obtenir le schéma XML d'un modèle de données, en fournissant une autre version de son schéma XML décrit dans Mettre à jour un modèle de données avec XSD.
<result>
<high>
<change>
<message>Element 'Gender' was added.</message>
</change>
</high>
<medium/>
<low/>
<entitiesToDrop>
<entity>Employee</entity>
</entitiesToDrop>
</result>
Mettre à jour un modèle de données avec XSD
Mise à jour d'un modèle de données avec le XSD (XML Schema Definition) fourni dans le contenu demandé en XML.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Exemple de requête
L'échantillon suivant met à jour le modèle de données Company dans Obtenir le schéma XML d'un modèle de données en ajoutant un nouvel élément obligatoire Gender dans l'entité Employee.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:element name="Employee">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Gender" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Team" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_ForeignKey">Team/Id</xsd:appinfo>
<xsd:appinfo source="X_ForeignKey_NotSep">true</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
<xsd:appinfo source="X_Write">Company_User</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Employee">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
<xsd:element name="Team">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:all>
<xsd:element maxOccurs="1" minOccurs="1" name="Id" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element maxOccurs="1" minOccurs="1" name="Name" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="X_Write">Company_Manager</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:unique name="Team">
<xsd:selector xpath="."/>
<xsd:field xpath="Id"/>
</xsd:unique>
</xsd:element>
</xsd:schema>
Supprimer un modèle de données
Supprime un modèle de données via son nom.
Request |
|
Parameters |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Nettoyer les informations en cache de l'authentification classique
Nettoie les informations en cache de l'authentification classique.
Requête |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Obtenir une liste de toutes les vues
Obtient une liste de toutes les vues Web Filter correspondant aux modèles de données déployés, y compris le nom, la description, l'ID du modèle de données (nom) pour chaque vue, ainsi que les rôles autorisés pour accéder à chaque vue.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Tableau JSON contenant une liste de toutes les vues Web Filter correspondant aux modèles de données déployés. |
Statut |
|
Exemple de réponse
[
{
"name": "Browse_items_Product",
"description": "[EN:Product][FR:Produit][ZH:产品]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
},
{
"name": "Browse_items_Product#Stores",
"description": "[FR:Produit avec Magasins][EN:Product with Stores]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
},
{
"name": "Browse_items_ProductFamily",
"description": "[FR:Famille Produit][EN:Product Family]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
},
{
"name": "Browse_items_Product#Unavailable",
"description": "[EN:Unavailable Products][FR:Produits non disponible]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
},
{
"name": "Browse_items_Store",
"description": "[EN:Store][FR:Magasin]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
},
{
"name": "Browse_items_Product#AndFamily",
"description": "[EN:Product with Family][FR:Produit avec famille]",
"dataModelId": "Product",
"roles": [
"Demo_Manager",
"Demo_User"
]
}
]
Obtenir les paramètres d'une vue par son nom
Obtient les paramètres d'une vue par son nom spécifié, dont la description, l'ID du modèle de données (nom), les éléments métier visibles, les éléments métier recherchables, etc.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Paramètres de la vue au format JSON. |
Statut |
|
Exemple de réponse
{
"name": "Browse_items_Product#Stores",
"description": "[FR:Produit avec Magasins][EN:Product with Stores]",
"dataModelId": "Product",
"sortField": "",
"isAsc": false,
"isTransformerActive": false,
"customForm": "",
"viewableBusinessElements": [
"Product/Id",
"Product/Name",
"Product/Description",
"Product/Availability",
"Product/Price",
"Product/Family",
"Store/Address"
],
"searchableBusinessElements": [
"Product",
"Product/Id",
"Product/Name",
"Product/Description",
"Product/Price",
"Product/Family",
"Store/Address"
],
"whereConditions": [
{
"leftPath": "Product/Stores/Store",
"operator": "JOINS",
"rightValueOrPath": "Store/Id",
"spellCheck": "false",
"stringPredicate": "NONE"
}
]
}
Statistics
Obtenir des statistiques de données
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Une réponse JSON avec les statistiques des enregistrements des données maître dans un conteneur donné. |
Statut |
|
Exemple de réponse
{
"data": [
{
"Product": [
{"count": 9},
{"percentage": "60"}
]
},
{
"Product Family": [
{"count": 4},
{"percentage": "26.67"}
]
},
{
"Store": [
{"count": 2},
{"percentage": "13.33"}
]
}
]
}
Obtenir des statistiques d'événements
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Une réponse JSON qui contient des statistiques d'événements comme le nombre d'appels avec ou sans succès de chaque déclencheur. |
Statut |
|
Exemple de réponse
{
"events": [
{
"failed": [
{"GoogleMap": 0},
{"CompleteStoreURLOnCreate": 0},
{"SynchronizeOnUpdate": 0},
{"CheckAvailabilityOnCreate": 0}
]
},
{
"completed": [
{"SynchronizeOnUpdate": 5},
{"GoogleMap": 2},
{"CompleteStoreURLOnCreate": 2},
{"CheckAvailabilityOnCreate": 2}
]
}
]
}
Obtenir des statistiques du journal
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse |
Une réponse JSON qui contient des statistiques de création et de mise à jour d'événements du journal pour chaque entité dans un conteneur spécifié. Notez que l'objet |
Statut |
|
Exemple de réponse
{
"journal": [
{
"Product": [
{
"creations": [
{
"create": 1,
"from": 1548143636461,
"to": 1548143636461
}
]
},
{
"updates": [
{
"update": 2,
"from": 1548143639124,
"to": 1548143685771
},
{
"update": 1,
"from": 1548143825716,
"to": 1548143872363
}
]
}
]
},
{
"ProductFamily": [
{
"creations": [
{
"create": 1,
"from": 1548142670616,
"to": 1548142670616
}
]
},
{
"updates": []
}
]
},
{
"Store": [
{
"creations": [
{
"create": 1,
"from": 1548142762672,
"to": 1548142772475
}
]
},
{
"updates": []
}
]
}
]
}
Obtenir des statistiques de rapprochement
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse |
Une réponse JSON contenant des statistiques sur le rapprochement intégré pour chaque entité avec une règle de rapprochement attachée dans le conteneur de données spécifié. |
Statut |
|
Exemple de réponse
{
"matching": [
{"Store": "100"},
{"Product Family": "0"},
{"Product": "100"}
]
}
Rapprochement de données
Retourner une explication de rapprochement sur les enregistrements d'entrée
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Réponse JSON donnant une explication détaillée sur le rapprochement et le regroupement des enregistrements d'entrée d'une entité spécifiée étant liée à une règle de rapprochement. |
Statut |
|
Exemple de requête
<Store>
<Id>200001</Id>
<Address>Beijing Book Building (17 Xichang'an Jie)</Address>
<Lat>116.383681</Lat>
<Long>39.913855</Long>
</Store>
<Store>
<Id>200002</Id>
<Address>Beijing book building</Address>
<Lat>116.383680</Lat>
<Long>39.913856</Long>
</Store>
Exemple de réponse
{
"groups": [
{
"group": [
{
"result": [
{
"id": "4244168a-acd7-42a0-91b7-873422c4982b"
},
{
"confidence": 0.9157568693161011
},
{
"minimum_confidences": [
{
"minimum_confidence": 0.85
}
]
},
{
"match_confidences": [
{
"match_confidence": 0.9
}
]
},
{
"related_ids": [
"200002",
"200001"
]
},
{
"values": [
{
"value": [
{
"field": "Store/Id"
},
{
"value": "200001"
}
]
},
{
"value": [
{
"field": "Store/Address"
},
{
"value": "Beijing Book Building (17 Xichang'an Jie)"
}
]
},
{
"value": [
{
"field": "Store/Lat"
},
{
"value": "116.383681"
}
]
},
{
"value": [
{
"field": "Store/Long"
},
{
"value": "39.913856"
}
]
},
{
"value": [
{
"field": "Store/Map"
},
{
"value": ""
}
]
}
]
}
]
},
{
"details": [
{
"detail": [
{
"id": "200002"
},
{
"match": [
{
"is_match": true
},
{
"score": 0.9157568693161011
},
{
"field_scores": [
{
"field_score": [
{
"pair_id": "200001"
},
{
"field": "Store/Id"
},
{
"fieldValue": "200002"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200001"
},
{
"field": "Store/Address"
},
{
"fieldValue": "Beijing book building"
},
{
"value": 0.9157568693161011
},
{
"algorithm": "Jaro-Winkler"
},
{
"threshold": 0.9
}
]
},
{
"field_score": [
{
"pair_id": "200001"
},
{
"field": "Store/Lat"
},
{
"fieldValue": "116.38368"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200001"
},
{
"field": "Store/Long"
},
{
"fieldValue": "39.913856"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200001"
},
{
"field": "Store/Map"
},
{
"fieldValue": ""
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
}
]
}
]
},
{
"values": [
{
"value": [
{
"field": "Store/Long"
},
{
"value": "39.913856"
}
]
},
{
"value": [
{
"field": "Store/Map"
},
{
"value": ""
}
]
},
{
"value": [
{
"field": "Store/Address"
},
{
"value": "Beijing book building"
}
]
},
{
"value": [
{
"field": "Store/Id"
},
{
"value": "200002"
}
]
},
{
"value": [
{
"field": "Store/Lat"
},
{
"value": "116.38368"
}
]
}
]
}
]
},
{
"detail": [
{
"id": "200001"
},
{
"match": [
{
"is_match": true
},
{
"score": 0.9157568693161011
},
{
"field_scores": [
{
"field_score": [
{
"pair_id": "200002"
},
{
"field": "Store/Id"
},
{
"fieldValue": "200002"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200002"
},
{
"field": "Store/Address"
},
{
"fieldValue": "Beijing book building"
},
{
"value": 0.9157568693161011
},
{
"algorithm": "Jaro-Winkler"
},
{
"threshold": 0.9
}
]
},
{
"field_score": [
{
"pair_id": "200002"
},
{
"field": "Store/Lat"
},
{
"fieldValue": "116.38368"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200002"
},
{
"field": "Store/Long"
},
{
"fieldValue": "39.913856"
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
},
{
"field_score": [
{
"pair_id": "200002"
},
{
"field": "Store/Map"
},
{
"fieldValue": ""
},
{
"value": 1
},
{
"algorithm": "Dummy"
},
{
"threshold": 0
}
]
}
]
}
]
},
{
"values": [
{
"value": [
{
"field": "Store/Long"
},
{
"value": "39.913855"
}
]
},
{
"value": [
{
"field": "Store/Map"
},
{
"value": ""
}
]
},
{
"value": [
{
"field": "Store/Address"
},
{
"value": "Beijing Book Building (17 Xichang'an Jie)"
}
]
},
{
"value": [
{
"field": "Store/Id"
},
{
"value": "200001"
}
]
},
{
"value": [
{
"field": "Store/Lat"
},
{
"value": "116.383681"
}
]
}
]
}
]
}
]
}
]
}
]
}
Retourner une explication sur un groupe de rapprochement
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Réponse JSON donnant une explication détaillée sur le rapprochement et le regroupement des enregistrements de données d'un groupe de rapprochement existant. |
Statut |
|
Exemple de réponse
Le format de réponse pour cette API REST est le même que le format de réponse pour Retourner une explication de rapprochement sur les enregistrements d'entrée.
Retourner une explication de rapprochement sur les enregistrements de données dans la Staging Area
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Réponse JSON donnant une explication détaillée sur le rapprochement d'une liste d'enregistrements de données dans la Staging Area. |
Statut |
|
Exemple de requête
200001
200002
Exemple de réponse
Le format de réponse pour cette API REST est le même que le format de réponse pour Retourner une explication de rapprochement sur les enregistrements d'entrée.
Retourner une liste d'enregistrements similaires
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Réponse JSON contenant une liste des enregistrements de données dans la zone de préparation similaire à l'enregistrement d'entrée de données. |
Statut |
|
Exemple de requête
<Product>
<Id>300000001</Id>
<Name>the old man and the sea</Name>
<Description>Author - Ernest Miller Hemingway</Description>
<Availability>false</Availability>
<Price>21.99</Price>
</Product>
Exemple de réponse
{
"items": [
{
"id": "200000005",
"confidence": 0.9279589414596557,
"golden": false
},
{
"id": "200000006",
"confidence": 0.960698914527893,
"golden": false
},
{
"id": "dc5bfccb-010a-4f3e-8b32-7b00ef0e7cd7",
"confidence": 0.960698914527893,
"golden": true
}
]
}
Gestion de la zone de préparation
Obtenir des statistiques de la zone de préparation pour le conteneur courant
Requête |
|
En-têtes |
|
Réponse | Les statistiques de la zone de préparation pour le conteneur courant. |
Statut |
|
Exemple de réponse au format JSON
{
"total_records": 100,
"waiting_validation_records": 15,
"valid_records": 80,
"invalid_records": 5,
"data_container": "Product",
"data_model": "Product"
}
Exemple de réponse au format XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<staging>
<data_container>Product</data_container>
<data_model>Product</data_model>
<invalid_records>5</invalid_records>
<total_records>100</total_records>
<valid_records>80</valid_records>
<waiting_validation_records>15</waiting_validation_records>
</staging>
Démarrer une nouvelle tâche de validation pour le conteneur courant
Requête |
|
En-têtes |
|
Réponse | L'identifiant de la nouvelle tâche de validation. |
Statut |
|
Exemple de réponse
Cette API REST retourne l'identifiant d'une nouvelle tâche de validation, comme suit :2ff91416-b25b-4cbb-8fb1-45bc12f34806
Obtenir les statistiques de la zone de préparation pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Les statistiques de la zone de préparation pour le conteneur spécifié. |
Statut |
|
Exemple de réponse au format JSON
{
"total_records": 100,
"waiting_validation_records": 15,
"valid_records": 80,
"invalid_records": 5,
"data_container": "Product",
"data_model": "Product"
}
Exemple de réponse au format XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<staging>
<data_container>Product</data_container>
<data_model>Product</data_model>
<invalid_records>5</invalid_records>
<total_records>100</total_records>
<valid_records>80</valid_records>
<waiting_validation_records>15</waiting_validation_records>
</staging>
Démarrer une nouvelle tâche de validation pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | L'identifiant de la nouvelle tâche de validation. |
Statut |
|
Exemple de réponse
Cette API REST retourne l'identifiant d'une nouvelle tâche de validation, comme suit :2ff91416-b25b-4cbb-8fb1-45bc12f34806
Lister tous les identifiants de tâches de validation complétées pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Liste les identifiants de toutes les tâches de validation complétées pour un conteneur donné. |
Statut |
|
Exemple de réponse
{executions:["2ff91416-b25b-4cbb-8fb1-45bc12f34806","a3ca3305-d80c-4594-adf9-bb52ffd50ec5"]}
Obtenir le nombre total de tâches de validation complétées pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Un entier correspondant au nombre total de tâches de validation complétées pour un conteneur donné. |
Statut |
|
Obtenir des statistiques de l'exécution de la validation courante pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Les statistiques de l'exécution de la validation courante pour un conteneur spécifié. |
Statut |
|
Exemple de réponse
{
"id": "e5aa900c-ddc4-47e4-a81a-9dc1c863b6a2",
"start_date": "2019-03-12T03:31:25.755",
"end_date": "2019-03-12T03:32:00.594",
"running_time": "9:40:39",
"total_record": 6,
"processed_records": 6,
"invalid_records": 0
}
Annuler l'exécution de la validation courante pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Obtenir des statistiques d'exécution d'une tâche de validation pour un conteneur
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Les statistiques d'exécution d'une tâche de validation spécifiée pour un conteneur. |
Statut |
|
Exemple de réponse
{
"id": "e5aa900c-ddc4-47e4-a81a-9dc1c863b6a2",
"start_date": "2019-03-12T03:31:25.755",
"end_date": "2019-03-12T03:32:00.594",
"running_time": "9:40:39",
"total_record": 6,
"processed_records": 6,
"invalid_records": 0
}
Vérifier si un conteneur contient une Staging Area
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Retourne true si le conteneur spécifié existe, ou false s'il n'existe pas. |
Statut |
|
Data Stewardship
Obtenir le nombre de tâches Data Stewardship
Requête |
|
En-têtes |
|
Réponse | Entier représentant le nombre de tâches Data Stewardship pour l'utilisateur ou l'utilisatrice courant. |
Statut |
|
Définir les métadonnées Data Stewardship pour un modèle de données
Définit les métadonnées de Talend Data Stewardship pour un modèle de données MDM, avec une ou plusieurs règles de rapprochement liées à ses entités, dont un modèle de data stewardship et une campagne Merging pour chaque entité étant liée à une règle de rapprochement.
Le nouveau modèle de data stewardship est créé avec des attributs correspondant à chaque élément de type simple dans l'entité MDM, et la nouvelle campagne Merging est créée à l'aide du nouveau modèle de data stewardship.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Réponse JSON contenant le nom et le libellé du modèle de données et de la campagne Merging créés pour chaque entité étant liée à une règle de rapprochement. Le nom est au format tmdm_<mdm_data_model_name>_<mdm_entity_name> et le libellé est au format <mdm_data_model_name> - <mdm_entity_name> - tmdm, le tout en lettres minuscules. Remarque : Si l'exécution est partiellement réussie, le corps de la réponse inclut les noms et libellés des modèles de données et campagnes de data stewardship relatifs, créé(e)s avec succès, ainsi que les noms et libellés des modèles de données ou campagnes de data stewardship dont la création a échoué et un message indiquant la raison de l'échec de l'opération.
|
Statut |
|
Exemple de réponse
{
"success": {
"datamodel": [
{
"name": "tmdm_product_product",
"label": "product - product - tmdm"
},
{
"name": "tmdm_product_store",
"label": "product - store - tmdm"
}
],
"campaign": [
{
"name": "tmdm-product-product",
"label": "product - product - tmdm"
},
{
"name": "tmdm-product-store",
"label": "product - store - tmdm"
}
]
}
}
Transactions MDM
Récupérer tous les identifiants des transactions actives
Récupère les identifiants de toutes les transactions actives.
Requête |
|
En-têtes |
|
Réponse | Un tableau JSON qui contient les identifiants de toutes les transactions actives. |
Statut |
|
Exemple de réponse
{transactions:["db4655dd-dbae-4dc2-a6f9-5b1b08ca1410","9197782a-3375-427f-9eb5-a77c76e92305"]}
Démarrer une nouvelle transaction
Démarre une nouvelle transaction et retourne son identifiant.
Requête |
|
En-têtes |
|
Réponse | L'identifiant de la nouvelle transaction. |
Statut |
|
Exemple de réponse
Cette API REST retourne l'identifiant d'une nouvelle transaction, comme suit :2ff91416-b25b-4cbb-8fb1-45bc12f34806
Commite une transaction
Commite une transaction avec son identifiant.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Effectuer un rollback
Effectue un rollback sur une transaction avec son identifiant.
Requête |
|
Paramètres |
|
En-têtes |
|
Réponse | Aucun contenu. |
Statut |
|
Langage de requête
Clauses SELECT
Sélection de toutes les instances d'une entité
Vous pouvez interroger toutes les instances d'une entité. Par exemple, pour retourner toutes les instances des enregistrements de "Type1", utilisez la requête :
{
"select": {
"from": ["Type1"]
}
}
L'élément "from" constitue un type de tableau, vous permettant de sélectionner plusieurs types. Cela ne signifie pas que la requête peut retourner toutes les instances de Type1 et de Type2. Le tableau est utilisé pour des jointures.
Pagination : début et limite
La pagination peut être nécessaire dans certains cas d'utilisation, tels que la construction d'une table. Elle peut être réalisée à l'aide des éléments "start" et "limit".
Par exemple, pour retourner les résultats commençant avec la première instance de "Type1" (index à 0), ainsi que les 10 instances suivantes, utilisez la requête :
{
"select": {
"from": ["Type1"],
"start": 0,
"limit": 10
}
}
-
L'exécution standard de telles requêtes implique la création d'une liste de limites de taille (limit) côté serveur. Si vous spécifiez une valeur élevée, des problèmes de performances ou une erreur de type OutOfMemoryError peuvent survenir. Par conséquent, assurez-vous d'utiliser la pagination avec des valeurs relativement basses pour l'élément limit.
- Pour le code MDM, un élément limit ayant pour valeur Integer.MAX_VALUE (2^31 -1) n'indique aucune limite ("no limit"). Assurez-vous d'utiliser une stratégie de streaming plutôt qu'une liste de résultats. Cependant, cela signifie qu'une limite de (2^31 - 2) essayera de créer une liste de cette taille (causant généralement une erreur de type OutOfMemoryError).
Sélection des valeurs de champs
Plutôt que d'interroger l'enregistrement en entier, vous pouvez interroger un seul de ses champs.
Par exemple, pour retourner des valeurs du champ "id" de type "Type1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/id"}
]
}
}
Pour sélectionner plus d'un champ, répétez l'élément "field". Par exemple, pour retourner des valeurs des champs "id", "value1" et "value2" pour chaque enregistrement de "Type1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/id"},
{"field": "Type1/value1"},
{"field": "Type1/value2"}
]
}
}
Renommage (aliasing)
Pour des raisons client ou de nommage, vous souhaitez nommer différemment l'élément retourné. Ce type de renommage (aliasing) peut aider à différencier des valeurs en cas de problèmes de noms. Cette action peut être réalisée à l'aide de l'élément "alias".
Par exemple, pour retourner toutes les valeurs du champ "id" de toutes les instances de Type1, mais à la place de mettre des valeurs à l'intérieur d'un élément "id", l'élément entourant est nommé "a", utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/id"},
{
"alias": [
{"name": "a"},
{"field": "Type1/id"}
]
}
]
}
}
Par exemple, utilisez la requête suivante pour retourner les résultats de "Type1/containedField1/value1" mis dans "v1" et "Type1/containedField2/value1" mis dans "v2", en évitant ainsi l'éventuel problème de noms. Ce problème aurait été retourné si "Type1/containedField1/value1" et "Type1/containedField2/value1" avaient été mis tous les deux dans un élément "value1" :
{
"select": {
"from": ["Type1"],
"fields": [
{
"alias": [
{"name": "v1"},
{"field": "Type1/containedField1/value1"}
]
},
{
"alias": [
{"name": "v2"},
{"field": "Type1/containedField2/value1"}
]
}
]
}
}
Valeurs de champs distinctes
Vous pouvez utiliser le mot-clé "distinct" pour obtenir toutes les valeurs distinctes pour le champ d'une entité.
Par exemple :
{
"select": {
"from": ["Type1"],
"fields": [
{"distinct": {"field": "Type1/value1"}}
]
}
}
Cette requête retourne toutes les valeurs distinctes pour le champ "value1" dans le type "Type1".
Vous pouvez également nommer différemment un résultat à l'aide de l'élément "alias". Par exemple :
{
"select": {
"from": ["Type1"],
"fields": [
{
"alias": [
{"name": "a0"},
{"distinct": {"field": "Type1/value1"}}
]
}
]
}
}
Cette requête retourne toutes les valeurs distinctes pour le champ "value1", mais à l'intérieur d'un élément nommé "a0".
Compte
Vous pouvez compter le nombre de résultats retournés par une requête.
Par exemple, pour compter le nombre d'instances de Type1 disponibles, utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"count": {}}
]
}
}
Vous pouvez également associer l'opération de compte à des conditions afin de compter le nombre d'instances correspondant aux critères spécifiés.
Par exemple, pour retourner le nombre d'instances de Type1 ayant une valeur supérieure à 1 pour le champ "value1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"count": {}}
],
"where": {
"gt": [
{"field": "Type1/value1"},
{"value": "1"}
]
}
}
}
Le compte peut également être utilisé dans des clauses ORDER_BY.
Maximum et minimum
Vous pouvez sélectionner la valeur maximale et/ou minimale d'un champ dans une entité.
Par exemple, pour récupérer la valeur la plus faible du champ "id" dans l'entité Type1, utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"min": {"field": "Type1/id"}}
]
}
}
Par exemple, pour récupérer la valeur la plus élevée du champ "id" dans l'entité Type1, utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"max": {"field": "Type1/id"}}
]
}
}
Par exemple, pour récupérer la valeur la plus élevée et la plus faible du champ "id" dans Type1, utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{"max": {"field": "Type1/id"}},
{"min": {"field": "Type1/id"}}
]
}
}
Tri par valeur de champ
Vous pouvez utiliser autant de clauses "order_by" que nécessaire dans une requête pour configurer l'ordre de tri dans le résultat retourné, soit par ordre décroissant ou croissant.
Par exemple, pour sélectionner toutes les instances de Type1 et trier les résultats par ID (du plus élevé au plus faible) et par valeur de champ "value1" (du plus faible au plus élevé), utilisez la requête :
{
"select": {
"from": ["Type1"],
"order_bys": [
{
"order_by": [
{"field": "Type1/id"},
{"direction": "DESC"}
]
},
{
"order_by": [
{"field": "Type1/value1"},
{"direction": "ASC"}
]
}
]
}
}
Tri par occurrence de valeur de champ
Vous pouvez également trier par occurrence de valeur de champ pour retourner la valeur la plus fréquente en premier jusqu'à la valeur la moins fréquente (en cas de tri par ordre décroissant "DESC").
Par exemple, cette requête permet de retourner de la valeur la plus fréquente à la valeur la moins fréquente pour le champ "value1" :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/value1"},
],
"order_bys": [
{
"order_by": [
{"count": {"field": "Type1/value1"}},
{"direction": "DESC"}
]
}
]
}
}
Vous pouvez également inclure un champ "limit" dans la requête pour obtenir les N valeurs les plus fréquentes.
Par exemple, cette requête permet d'obtenir les 10 valeurs les plus fréquentes :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/value1"},
],
"order_bys": [
{
"order_by": [
{"count": {"field": "Type1/value1"}},
{"direction": "DESC"}
]
}
],
"limit": 10
}
}
order by
avec la fonction count
.Conditions
Les opérandes suivants peuvent être utilisés :
Opérande du langage de requêtes |
Signification |
---|---|
eq |
equals |
gt / gte |
supérieur à/supérieur ou égal à |
lt / lte |
inférieur à/ inférieur ou égal à |
startsWith |
commence par |
contains |
contient |
isEmpty |
est vide (") |
isNull |
est null |
in | spécifie plusieurs valeurs dans une clause WHERE |
full_text | effectue une recherche plein texte |
Prenez en compte les points suivants :
- La structure est toujours la suivante : "operand": { field, value }.
- Les opérandes contains et full_text ne peuvent être utilisées avec d'autres opérateurs de recherche. Puisqu'une recherche plein texte couvre en interne toutes les conditions de contains et full_text, ces opérandes ne peuvent être combinées.
- si le champ est de type numérique (int, short, integer, long, float, double, decimal) et que vous fournissez une valeur numérique pour celui-ci, la valeur peut être interprétée en étant ou non entourée de guillemets doubles. Sinon, la valeur doit être entourée de guillemets doubles. Assurez-vous de faire correspondre la valeur et le type d'élément. Par exemple, "value": "abc" est incorrect si le champ "Type1/id" est de type numérique.
- Si vous n'avez accès à aucun des champs utilisés dans la condition, la requête ne retournera rien.
- Lorsque vous cherchez un champ de type booléen égal à la valeur true, les enregistrements de données contenant uniquement la valeur true sont retournés.
- Lorsque vous cherchez un champ de type booléen égal à la valeur false, à une valeur vide, ou à toute autre valeur, les enregistrements de données contenant les valeurs false et null sont retournés.
- Lorsque vous cherchez un champ de type booléen qui n'est pas égal à la valeur true, les enregistrements de données contenant la valeur false et les valeurs null sont retournés.
- Lorsque vous cherchez un champ de type booléen qui n'est pas égal à la valeur false, à une valeur vide, ou à toute autre valeur, les enregistrements de données contenant uniquement la valeur true sont retournés.
Exemple 1 : la requête ci-après, qui utilise l'argument eq, retourne toutes les instances de Types1 où l'élément id est égal à 1.
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
}
}
}
Exemple 2 : la requête ci-après, qui utilise l'argument isEmpty, retourne toutes les instances de Store où la valeur de l'élément Address est égale à ".
{
"select": {
"from": ["Store"],
"where": {
"isEmpty": {
"field": "Store/Address"
}
}
}
}
Exemple 3 : la requête ci-après, qui utilise l'opérateur not et l'argument isNull, retourne toutes les instances de Store où la valeur de l'élément Address n'est pas null.
{
"select": {
"from": ["Store"],
"where": {
"not": {
"isNull": {
"field": "Store/Address"
}
}
}
}
}
Condition sur les index
Vous pouvez spécifier un index pour votre condition, si le champ est un élément répétable. L'index vaut 0.
Par exemple, pour retourner toutes les instances de Type1 dont la seconde valeur du champ "list" est égale à "1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"index": [
{"field": "Type1/list"},
1
]},
{"value": "1"}
]
}
}
}
Conditions entre champs
Vous pouvez utiliser des conditions entre différents champs. Généralement, seul "eq" (EQUALS) est supporté pour de telles comparaisons.
Par exemple, pour retourner les instances de Type1 dont la valeur "id" est égale à "value1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"field": "Type1/id"},
{"value": {"field": "Type1/value1"}}
]
}
}
}
Opérateur in
Vous pouvez utiliser l'opérateur in au sein d'une requête.
Par exemple, pour retourner toutes les instances de Type1 où "id" vaut 1, 2 ou 5, utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"in": [
{"field": "Type1/id"},
{"value": ["1","2","5"]}
]
}
}
}
Prenez en compte les points suivants :
- si le champ est de type numérique (int, short, integer, long, float, double, decimal) et que vous fournissez une valeur numérique pour celui-ci, la valeur peut être interprétée en étant ou non entourée de guillemets doubles. Sinon, la valeur doit être entourée de guillemets doubles. Assurez-vous de faire correspondre la valeur et le type d'élément. Par exemple, "value": ["a", "b", "c"] est incorrect si le champ "Type1/id" est de type numérique.
- La valeur "value" est formatée comme un tableau (array) JSON et les valeurs listées doivent être statiques. Par exemple, ["value1", "value2", "value3"...].
- Seuls des champs de type simple au niveau racine sont supportés. Cependant, les champs obligatoires de clés étrangères multi-occurrence ne sont pas supportés.
- L'opérateur in ne peut être utilisé avec la recherche plein texte.
- L'opérateur in peut fonctionner avec l'opérateur not. Pour plus d'informations, consultez la section Opérateur not.
Opérateurs logiques
Pour permettre des requêtes plus complexes, des opérateurs booléens (and/or/not) peuvent être inclus. La structure est similaire à ce qui a été présenté précédemment "operator": { left, right } où left et/ou right peuvent également être des opérateurs logiques.
Par exemple, pour retourner toutes les instances de Type1 où "id = 1 OR value1 = 0", utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"or": [
{
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
{
"eq": [
{"field": "Type1/value1"},
{"value": "0"}
]
}
]
}
}
}
Un opérateur logique binaire (and/or) doit forcément avoir deux enfants. Par exemple, vous pouvez écrire une condition avec "a OR b OR c" :
{
"select": {
"from": ["Type1"],
"where": {
"or": [
{
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
{
"or": [
{
"eq": [
{"field": "Type1/id"},
{"value": "2"}
]
},
{
"eq": [
{"field": "Type1/value1"},
{"value": "4"}
]
}
]
}
]
}
}
}
Vous pouvez également mélanger les opérateurs logiques. Il n'existe aucune ambiguïté dans l'ordre d'évaluation des conditions.
Par exemple, pour retourner toutes les instances de Type1 où "(id = 1 OR (id = 2 and value1 = 4))", utilisez la requête qui mélange and et or :
{
"select": {
"from": ["Type1"],
"where": {
"or": [
{
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
{
"and": [
{
"eq": [
{"field": "Type1/id"},
{"value": "2"}
]
},
{
"eq": [
{"field": "Type1/value1"},
{"value": "4"}
]
}
]
}
]
}
}
}
Opérateur not
L'opérateur not est supporté et suit la structure suivante : "not": { condition }.
Par exemple, pour retourner toutes les instances de Type1 où la valeur "id" n'est pas égale à 1, utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"not": {
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
}
}
}
}
Vous pouvez également utiliser l'opérateur not dans une condition plus complexe. Par exemple :
{
"select": {
"from": ["Type1"],
"where": {
"not": {
"or": [
{
"eq": [
{"field": "Type1/id"},
{"value": "2"}
]
},
{
"eq": [
{"field": "Type1/id"},
{"value": "4"}
]
}
]
}
}
}
}
Vous pouvez utiliser l'opérateur not avec l'opérateur in. Le résultat de la requête n'inclut pas les instances où le champ spécifié a une valeur nulle.
Par exemple :
{
"select": {
"from": ["Type1"],
"where": {
"not": {
"in": [
{"field": "Type1/id"},
{"value": ["1","3","4","5"]}
]
}
}
}
}
Cela retourne toutes les instances de Type1 où "id" ne vaut aucune des valeurs listées, à savoir 1, 3, 4 et 5.
Plein texte (dans le cadre du champ)
Le langage de requêtes inclut un support pour la recherche en plein texte.
Par exemple, pour réaliser une recherche en plein texte sur le champ "Type1/id" avec la valeur "1", utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"full_text": [
{"field": "Type1/id"},
{"value": "1"}
]
}
}
}
La requête en plein texte fonctionne également sur les sous-éléments. Par exemple, si vous avez la structure type suivante :
Type1
* id
* element
* value1
* value2
Puis la requête :
{
"select": {
"from": ["Type1"],
"where": {
"full_text": [
{"field": "Type1/element"},
{"value": "1"}
]
}
}
}
Équivaut à :
{
"select": {
"from": ["Type1"],
"where": {
"or": [
{
"full_text": [
{"field": "Type1/element/value1"},
{"value": "1"}
]
},
{
"full_text": [
{"field": "Type1/element/value2"},
{"value": "1"}
]
}
]
}
}
}
Plein texte (dans le cadre de l'entité)
Si vous ne souhaitez spécifier aucun champ, mais que vous recherchez une valeur dans l'entité, la requête suivante vous montre comment le faire :
{
"select": {
"from": ["Type1"],
"where": {
"full_text": [
{"value": "1"}
]
}
}
}
Si vous omettez de préciser le champ, MDM effectue la recherche en plein texte sur tous les champs de Type1.
Champs de métadonnées
MDM ajoute des champs "metadata" pour les enregistrements qu'il gère. Ces champs ne sont pas présents dans le modèle de données utilisateur·rice, mais peuvent être utilisés dans la requête.
Les champs de métadonnées supportés sont :
- taskId (aussi connu comme groupId)
- timestamp (dernière date de modification)
- groupSize
Pour le stockage de préparation (staging), des champs de métadonnées supplémentaires existent :
- Erreur (Staging error)
- Source (Staging source)
- Statut (Staging status)
- Clé de bloc (Staging block key)
-
Tâches (Staging has task)
Notez que le champ "Staging has task" indique si une tâche Talend Data Stewardship est liée à l'enregistrement.
Si la requête contient des champs "staging_" uniquement, vous pouvez rencontrer une erreur qui indique les expressions incompatibles. Les expressions incompatibles sont vérifiées dans les champs, les conditions, les expressions de tri et de jointure sélectionnés.
Obtention de valeurs de champs de métadonnées
Pour obtenir un champ de métadonnées, utilisez l'élément "metadata" plutôt que "field" dans les champs sélectionnés, comme l'exemple suivant le montre :
{
"select": {
"from": ["Type1"],
"fields": [
{"metadata": "timestamp"},
{"metadata": "task_id"},
{"metadata": "group_size"},
{"metadata": "staging_error"},
{"metadata": "staging_source"},
{"metadata": "staging_status"},
{"metadata": "staging_blockkey"},
{"metadata": "staging_hastask"}
]
}
}
Vous pouvez également mélanger les champs de l'entité et ceux de l'enregistrement :
{
"select": {
"from": ["Type1"],
"fields": [
{"metadata": "timestamp"},
{"metadata": "task_id"},
{"field": "Type1/id"}
]
}
}
Vous pouvez utiliser le mot-clé "distinct" pour les champs de métadonnées. Par exemple, pour retourner toutes les valeurs distinctes de "taskId" mises dans un élément nommé "distinctTaskId", utilisez la requête :
{
"select": {
"from": ["Type1"],
"fields": [
{
"alias": [
{"name": "distinctTaskId"},
{"distinct": {"metadata": "task_id"}}
]
}
]
}
}
Conditions incluant des champs de métadonnées
Vous pouvez inclure des champs de métadonnées dans des conditions. Quant aux champs sélectionnés, utilisez simplement l'élément "metadata" plutôt que "field". Par exemple :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"metadata": "task_id"},
{"value": "1"}
]
}
}
}
Mise en cache
MDM peut mettre en cache les résultats de la requête. Dans ce cas, il garde la requête en cache et remet le résultat mis en cache chaque fois que cette requête est exécutée.
Par exemple, pour mettre en cache le résultat d'une requête, utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
"cache": true
}
}
Par défaut, la valeur de l'élément "cache" est false, mais la requête est toujours valide :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
"cache": false
}
}
Un résultat mis en cache peut contenir au maximum 50 enregistrements. When the query yields too many results, the following log will appear in the MDM log at DEBUG level: Query is yielding more results than cache is allowed to keep, bypassing cache for query.
Jointure entre différents types
Les jointures sont un moyen de récupérer des données d'un autre type suivant les clés étrangères.
Par exemple, vous pouvez récupérer l'élément "Address's street" en suivant la clé étrangère entre les types Person et Address.
Voici un exemple de jointure simple :
{
"select": {
"from": [
"Type1",
"Type2",
],
"fields": [
{"field": "Type1/id"},
{"field": "Type2/value1"}
],
"joins": [
{
"from": "Type1/fk2",
"on": "Type2/id"
}
]
}
}
Cette requête retourne tous les éléments "id" de Type1 ainsi que les éléments "value1" situés dans Type2. La jointure s'effectue en utilisant l'élément "fk2" dans Type1.
Vous pouvez également effectuer plusieurs jointures dans la requête. Par exemple :
{
"select": {
"from": [
"Type1",
"Type2",
"Type3"
],
"fields": [
{"field": "Type1/id"},
{"field": "Type2/value1"},
{"field": "Type3/value2"}
],
"joins": [
{
"from": "Type1/fk2",
"on": "Type2/id"
},
{
"from": "Type2/fk3",
"on": "Type3/id"
}
]
}
}
Cette requête affiche la valeur "id" de Type1, la valeur "value1" de Type2 et la valeur "value1" de Type3. La valeur "value1" de Type3 est obtenue via une jointure entre Type1, Type2 et Type3.
Vous pouvez également attacher des jointures pour la clé composite dans la requête. Par exemple :
{
"select": {
"from": [
"Type2",
"Type1"
],
"fields": [{
"alias": [{
"name": "Type2/idC"
},
{
"field": "Type2/idC"
}
]
},
{
"alias": [{
"name": "Type2/idD"
},
{
"field": "Type2/idD"
}
]
},
{
"alias": [{
"name": "Type2/name"
},
{
"field": "Type2/name"
}
]
},
{
"alias": [{
"name": "Type1/name"
},
{
"field": "Type1/name"
}
]
},
{
"alias": [{
"name": "Type2/fk"
},
{
"field": "Type1/[idA][idB]"
}
]
}
],
"joins": [{
"from": "Type2/fk",
"on": "Type1/[idA][idB]"
}]
}
}
Cette requête retourne "idC", "idD", "name" et la clé étrangère depuis Type2 et "name" depuis Type1. La jointure est effectuée à l'aide de la clé étangère composite "fk" dans Type2.
Opérateurs liés à l'historique - opérateur “as of"
L'opérateur "as_of" vous permet de récupérer un enregistrement tel qu'il était à une date donnée.
Par exemple :
{
"select": {
"from": ["Type1"],
"as_of": {
"date": "1000"
}
}
}
L'opérateur "as of" n'échoue pas si aucun historique n'est disponible. À la place, il retourne l'enregistrement à son état actuel.
La navigation dans l'historique dépend du journal. Si vous insérez des données directement dans la base de données SQL ou si vous désactivez la création d'événements pour les composants tMDMOutput/tMDMDelete, vous n'aurez qu'un historique partiel.
MDM peut uniquement construire un historique des enregistrements basé sur les informations qu'il a stocké au niveau des mises à jour : si vous désactivez le journal pour des mises à jour, l'historique ne peut être complet et précis.
Par exemple, pour retourner toutes les instances de Type1 ayant comme valeur celle qu'elles avaient une seconde après le 1er janvier 1970 (1 000 ms après EPOCH), utilisez la requête :
{
"select": {
"from": ["Type1"],
"as_of": {
"date": "1970-01-01T00:00:01"
}
}
}
Raccourcis de navigation dans l'historique
Les éléments "date" pour les éléments "as_of" supportent des raccourcis utiles :
- yesterday : il y a 24 heures.
- creation : date de création de l'enregistrement. Lorsque vous utilisez l'élément "creation", vous ne pouvez pas utiliser le paramètre "swing". Autrement, vous devez vous attendre à ce qu'une erreur survienne.
- now : date actuelle.
Par exemple, pour retourner toutes les instances de Type1 comme elles étaient hier (il y a 24 heures), utilisez la requête :
{
"select": {
"from": ["Type1"],
"as_of": {
"date": "yesterday"
}
}
}
Filtrage de l'historique (par ID)
Vous souhaitez filtrer les enregistrements de l'historique au lieu d'obtenir toutes les instances.
Par exemple, pour retourner l'instance de Type1 ayant comme valeur "id = 1", comme elle l'était au 1er janvier 1970, utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"eq": [
{"field": "Type1/id"},
{"value": "1"}
]
},
"as_of": {
"date": "1000"
}
}
}
Vous pouvez améliorer cette requête en utilisant toutes les conditions avec "as_of", vous permettant d'interroger les valeurs précédentes. Les conditions n'ont pas besoin d'être uniquement sur des éléments "id".
Par exemple, pour retourner l'instance de Type1 qui contenait "text" au 1er janvier 1970, utilisez la requête :
{
"select": {
"from": ["Type1"],
"where": {
"contains": [
{"field": "Type1/value"},
{"value": "text"}
]
},
"as_of": {
"date": "1000"
}
}
}
Cependant, cette requête rencontre des problèmes d'extensibilité, puisqu'elle peut forcer MDM à construire un jeu complet d'instances de Type1. Cela mène alors à des problèmes de mémoire, si des états sont calculés en mémoire.
Utilisation de jointure avec as_of
Vous pouvez utiliser l'élément "joins" dans une requête avec l'opérateur "as_of".
Par exemple, utilisez la requête ci-dessous pour retourner trois champs ("id", "value1", "value2") venant de deux types ("Type1", "Type2") :
{
"select": {
"from": [
"Type1",
"Type2"
],
"fields": [
{"field": "Type1/id"},
{"field": "Type1/value1"},
{"field": "Type2/value2"}
],
"joins": [
{
"from": "Type1/fk2",
"on": "Type2/id"
}
],
"as_of": {
"date": "1000"
}
}
}
Les valeurs retournées ont les caractéristiques ci-dessous :
- L'élément "as_of" retourne les valeurs de "Type1" comme elles étaient au 01/01/1970.
- La valeur de la clé étrangère utilisée pour Type2 est la valeur de la clé étrangère au 01/01/1970.
- Les valeurs pour Type2 sont celles au 01/01/1970.
Sécurité et rôles utilisateur·rice
Rappelez-vous que la requête transmise au service n'est pas toujours celle que MDM exécute. Avant l'exécution de la requête, MDM réduit tous les éléments auxquels l'utilisateur ou l'utilisatrice connecté ne peut avoir accès, à savoir les champs, les conditions et les ordres de tri sélectionnés. Tous les éléments masqués aux utilisateurs et utilisatrices sont retirés de la requête sans reporter d'erreur.
Par exemple :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/id"},
{"field": "Type1/secret_field"}
]
}
}
Dans cet exemple, MDM retire automatiquement l'élément "secret_field" de la requête si l'utilisateur ou l'utilisatrice actuel (étant l'utilisateur ou l'utilisatrice connecté à l'API REST) n'a pas accès à l'élément "secret_field". Cependant, la requête exécutée actuellement est la suivante :
{
"select": {
"from": ["Type1"],
"fields": [
{"field": "Type1/id"}
]
}
}
Autre exemple de ce genre de requêtes :
{
"select": {
"from": ["Type1"],
"where": {
"gt": [
{"field": "Type1/secret_field"},
{"value": "1"}
]
}
}
}
Cette requête est lue de la manière suivante "retourne toutes les instances de Type1 où la valeur secret_field de Type1 est supérieure à 1". Le résultat retourné doit être les instances de Type1 où secret_field > 1.
Cependant, si les rôles de l'utilisateur ou de l'utilisatrice actuel ne lui donnent pas accès à l'élément "secret_field", la requête actuelle devient :
{
"select": {
"from": ["Type1"]
}
}
Cette requête est lue de la manière suivante "retourne toutes les instances de Type1". Le résultat retourné doit être toutes les instances de Type1 car l'utilisateur ou l'utilisatrice actuel n'a pas accès à l'élément "secret_field".
Ceci empêche les utilisateurs et utilisatrices dépourvus de droits d'accès de deviner indirectement les valeurs de l'élément "secret_field", en utilisant des conditions de valeurs sur ce champ.
Exemple d'exécution d'une opération GET HTTP avec l'API REST MDM dans Talend MDM Web UI
Dans Talend MDM Web UI, les utilisateurs et utilisatrices ayant les droits d'accès peuvent utiliser le menu Tools pour accéder à la page de la documentation de l'API REST MDM basée sur Swagger et tester les opérations de l'API REST sur cette page, si nécessaire.
L'exemple suivant vous montre comment exécuter une opération HTTP GET avec l'API REST MDM pour lister toutes les clés primaires des enregistrements de données maître dans un conteneur sur le serveur MDM.
Avant de commencer
Assurez-vous d'avoir importé au préalable le projet démo MDM et créé plusieurs enregistrements de données maître pour l'entité Product du conteneur Product.
Procédure
Intégration de l'API pour les transactions
L'API pour les transactions peut être intégrée à l'API pour les données.
Pour plus d'informations concernant les transactions MDM, consultez Transactions MDM.
Ajouter une requête REST à une transaction existante
Les modifications effectuées via l'API REST pour les données peuvent être ajoutées à une transaction créée via l'API pour les transactions.
Pour ajouter une requête REST à une transaction existante, configurez la valeur de l'en-tête HTTP personnalisé "transaction-id" avec l'identifiant de la transaction. Si l'identifiant de transaction fourni n'existe pas, il doit être créé.
PUT /talendmdm/services/rest/transactions, creates a new transaction and returns its id
POST /talendmdm/services/rest/data/Product (with transaction-id set to the id returned at step1), creates a new product but does not commit changes to the database
POST /talendmdm/services/rest/transactions/<id> commits the transactions and thus changes made at step 2
Cette fonctionnalité fonctionne également avec l'opération Insert de données par lots (/talendmdm/services/rest/data/Product/batch).