DatabaseJoiner
Joint les attributs d'une table externe à des entités déjà dans un traitement en se basant sur une (ou plusieurs) clé(s) commune(s).
Cas d'utilisations typiques
- Joindre des attributs depuis une table de base de données externe dans un traitement.
Comment fonctionne-t-il ?
DatabaseJoiner interroge une table externe pour récupérer les attributs associés à une entité. Un ou plusieurs attributs de caractéristiques (clés primaires) sont mis en correspondance avec une ou plusieurs colonnes (clés étrangères) d'une table de la base de données, et les valeurs de la ou des lignes de la table correspondante sont ajoutées à l'entité en tant qu'attributs.
Un certain nombre de méthodes de mise en correspondance (Cardinalité) sont disponibles - Un à plusieurs (1:M), Un à zéro ou plus (1:0..1+), Un à un (1:1), ou Un à zéro ou un (1:0..1). Les entités qui ne remplissent pas les conditions de correspondance sont émises via le port <Rejected>.
L'attribut _matched_records indique le nombre d'enregistrements de la base de données auxquels l'entité correspond. Les correspondances multiples peuvent créer plusieurs entités ou ajouter un attribut de liste à une seule entité.
DatabaseJoiner permet des jointures simples de relations basées sur plusieurs clés d'attributs et ne nécessite pas des connaissances en SQL.
Exemples
Dans cet exemple, nous voulons récupérer les attributs d'une table dans une base de données PostGIS, et ajouter ces attributs aux polygones de parc stockés dans un fichier de forme. Les parcs ont un numéro d'identification qui sera utilisé pour effectuer la jonction.
Les entités sont acheminées vers un DatabaseJoiner, où nous récupérerons le reste des attributs que nous souhaitons.
Dans les Paramètres, la première étape est de définir la base de données externe - un peu comme configurer un type d'entités source de base de données classique.
Une fois la connexion à la base de données établie, nous sélectionnons la table souhaitée (public.Parks) à l'aide du bouton "Parcourir" situé à côté de "Table". Une liste des tables disponibles s'affiche alors. Nous choisissons ensuite l'attribut des parcs entrants (Feature Attribute) et de la table jointe (Table Field) pour effectuer la jointure. Dans les deux cas, l'attribut est appelé ParkId.
Champs à ajouter détermine quels attributs de la table de la base de données externe sont ajoutés aux entités du parc. Nous les sélectionnons tous.
Les valeurs par défaut pour Cardinalité, Correspondances multiples et la fusion des attributs fourniront les résultats souhaités.
Les entités de sortie du port joint ont maintenant des attributs supplémentaires qui ont été récupérés de la table de la base de données externe. Notez que l'attribut _matched_records indique combien de correspondances ont été rencontrées - dans le cas présent, une.
Notes
- Pour une performance optimale, assurez-vous que les clés (attributs à joindre) sont indexées dans la base de données. Si les clés sont indexées, le DatabaseJoiner peut être considérablement plus efficace que les autres Transformers de jonction.
- Pour joindre deux flux d'entités déjà dans un traitement, considérez utiliser FeatureMerger, qui fournit aussi des options de fusion de géométrie.
- Si toutes les données résident dans une source compatible avec SQL, envisagez d'utiliser SQLCreator ou SQLExecutor, qui peuvent également exécuter des requêtes de jointure plus complexes qui sont traitées dans la base de données source. Pour une jointure simple, le DatabaseJoiner peut être l'approche la plus efficace.
- DatabaseJoiner ne requiert aucune connaissance en SQL.
- Pour effectuer une requête SQL (simple ou complexe) sur des sources non-SQL, considérez utiliser InlineQuerier.
Choisir une méthode de jointure d'entités
De nombreux Transformers peuvent effectuer des jointures de données sur la base d'attributs, d'expressions et/ou de géométries correspondants. Lorsque vous en choisissez un pour une tâche de jointure spécifique, vous devez prendre en compte la complexité de la jointure, le format des données, l'indexation, la gestion des conflits et les résultats souhaités. Certains Transformers utilisent la syntaxe SQL, d'autres accèdent directement aux bases de données externes. Ils peuvent ou non prendre en charge la lecture et la création d'attributs de liste.
En général, le choix de la méthode la plus spécifique à la tâche à accomplir permet d'obtenir des résultats optimaux en termes de performances. S'il existe plus d'une façon de procéder (ce qui est souvent le cas), il peut être utile de consacrer du temps à tester les performances des autres méthodes. Les performances peuvent varier considérablement selon l'existence d'index clés lors de la lecture de tables externes (par opposition aux entités déjà présentes dans le traitement).
Transformer |
Correspondance selon |
Utilisation de requêtes SQL |
Création de liste |
Type en entrée |
A noter |
Description |
---|---|---|---|---|---|---|
FeatureJoiner | Attributs | Non | Non | Entités |
|
Joint les entités en combinant les attributs et/ou géométries d'entités en fonction de valeurs d'un attribut clé. Effectue l'équivalent des jointures SQL Inner, Left et Full. |
FeatureMerger | Attributs | Non | Oui | Entités |
|
Fusionne les attributs et/ou géométries d'un jeu d'entités en un autre jeu d'entités en fonction de la correspondance de valeurs clés d'attributs et d'expressions. |
ListBasedFeatureMerger | Attribut de liste vers attribut seul | Non | Oui | Entités |
|
Fusionne les attributs et/ou géométries d'un jeu d'entités en un autre jeu d'entités en fonction de la correspondance de valeurs d'un attribut de liste avec des valeurs de clés d'attributs et d'expressions. |
InlineQuerier | Requête SQL | Oui | Non | Entités |
|
Crée un ensemble de tables de base de données SQLite pour les entités en entrée, exécute des requêtes SQL sur elles et génère les résultats en tant qu'entités. |
SQLCreator | Requête SQL | Oui | Non | Base de données externe |
|
Génère des entités FME à partir des résultats d'une requête SQL exécutée une fois dans une base de données. Une entité FME est créée pour chaque ligne des résultats de la requête SQL. |
SQLExecutor | Requête SQL | Oui | Non | Base de données externe |
|
Exécute des requêtes SQL contre une base de données. Une requête est envoyée à la base de données pour chaque entité qui entre dans le Transformer. Les entités initiales et les résultats de la requête peuvent être édités en tant qu'entités. |
DatabaseJoiner | Attributs | Non | Oui | Base de données externe et entités |
|
Joint les attributs d'une table externe aux entités déjà présentes dans un traitement, sur la base d'une ou plusieurs clés communes. Des connaissances en SQL ne sont pas requises. Transformer non bloquant. |
Matcher | Géométrie et/ou attributs | Non | Oui | Entités |
|
Détecte les entités qui correspondent l'une à l'autre. Les entités sont déclarées correspondantes lorsqu'elles ont une géométrie correspondante, des valeurs d'attributs correspondantes, ou les deux. Une liste d'attributs qui doivent différer entre les entités peut également être spécifiée. Si la correspondance se fait uniquement sur des attributs (pas de géométries), utiliser FeatureMerger ou une autre méthode donnera de meilleures performances. |
Configuration
Ports d'entrée
Les entités à joindre avec des attributs depuis une table externe.
Ports de sortie
Entités jointes.
Entités n'ayant pas été jointes.
Si Cardinalité vaut Un à un ou Zéro à un, alors les entités ne répondant pas à ces critères ressortiront par ce port.
Gestion des entités rejetées : ce paramètre permet d'interrompre la traduction ou de la poursuivre lorsqu'elle rencontre une entité rejetée. Ce paramètre est disponible à la fois comme option par défaut de FME et comme paramètre de traitement.
Paramètres
DatabaseJoiner est un Transformer particulièrement puissant avec de nombreux paramètres très performants.
Format |
Sélectionnez le format du jeu de données externe ou autoriser sa détection automatique depuis le jeu de données sélectionné. |
Jeu de données ou connexion |
Sélectionnez le jeu de données à lire. Selon le format, il peut s'agir d'un fichier, d'un dossier ou d'une connexion à une base de données. |
Paramètres |
Accède aux paramètres du Reader spécifiques aux Reader et jeu de données sélectionnés. |
Table |
Spécifiez la table à joindre. Cliquez sur le bouton Parcourir pour sélectionner la table dans une liste. Notez que vous ne pouvez sélectionner cette option qu'après avoir entièrement spécifié le format du Reader, le jeu de données et les paramètres spécifiques au format. |
||||||||
Jointure |
Sélectionnez le ou les attributs de l'entité entrante et le ou les champs de table correspondants qui seront utilisés pour trouver des correspondances. Les correspondances sont établies lorsque les valeurs de tous les attributs sont égales aux valeurs des champs de table correspondants. Il y a une ligne pour chaque paire d'attributs et de colonnes dans le widget de saisie du tableau. Vous pouvez ajouter des paires supplémentaires en cliquant sur le bouton plus (+) situé à droite du tableau. De même, vous pouvez supprimer des paires en appuyant sur le bouton moins (-). Un minimum d'une paire doit être spécifié pour que la jointure fonctionne. Sélectionnez les attributs dans une liste déroulante dans la colonne Attributs de l'entité. (Vous pouvez saisir directement les champs de table correspondants ou les sélectionner dans une liste en cliquant sur le bouton Parcourir). Pour que le bouton Parcourir répertorie les champs de table disponibles, toutes les informations nécessaires à la lecture de la table doivent être spécifiées. Outils de jointure:
C'est outils permettent d'Ajouter, Supprimer, Couper, Copier, Coller des lignes. |
||||||||
Champs à ajouter |
Spécifier les champs des tables à ajouter aux entités entrantes. Pour sélectionner les champs à partir d'une liste, cliquez sur le bouton Parcourir. Une boîte de dialogue affichant la liste des champs possibles apparaît. Cochez la case de chaque champ que vous souhaitez ajouter, puis cliquez sur OK. Si aucun champ n'est spécifié, tous les champs seront ajoutés. |
||||||||
Cardinalité |
Indiquez le type de relation entre les lignes de la base de données et chaque entité. Ceci décrira combien de lignes correspondront à chaque entité et quelle action le DatabaseJoiner prendra si le nombre attendu n'est pas trouvé. Les options disponibles sont :
Les règles de correspondance sont très strictes. En cas de doute, il convient d'utiliser la règle Match First ou Match All. |
||||||||
Correspondances multiples |
Spécifie comment les résultats de plusieurs correspondances sont retournés. Créer une entité pour chaque correspondance : Chaque ligne correspondant à une entité est ajoutée à une copie de l'entité entrante. Dans ce scénario, pour chaque entité entrante, il y aura des entités correspondantes en sortie. S'il n'y a pas de correspondance, l'entité sort par le port de sortie Unjoined. Ajouter des champs à un attribut de liste : Chaque ligne correspondante est ajoutée à un attribut de liste de l'entité. S'il n'y a pas de correspondance, l'entité quitte le port de sortie Unjoined. |
||||||||
Nom de la liste des correspondances |
Nom de la liste qui stocke les attributs provenant de la base de données. Note Les attributs de liste ne sont pas accessibles à partir du schéma de sortie dans FME Workbench, sauf s'ils sont d'abord traités à l'aide d'un Transformer qui opère sur eux, comme ListExploder ou ListConcatenator. Il est également possible d'utiliser AttributeExposer.
|
Traitement des attributs |
Si Regrouper les éléments joints est choisi, les attributs des entités sources et des tables sont regroupés et en cas de conflits, la valeur spécifiée dans le paramètre Résolution de conflit. Si Préfixer les attributs des éléments joints est choisi, alors tous les attributs entrants seront présentés avec un préfixe défini dans le paramètre Préfixe. |
Résolution de conflit |
Ce paramètre est actif quand le paramètre Traitement des attributs vaut Regrouper les éléments joints. Utiliser les attributs d'origine et Utiliser les attributs des éléments joints indique quels attributs utiliser en cas de conflit. |
Préfixe |
La valeur spécifiée est utilisée pour préfixer les attributs quand Traitement des attributs vaut Préfixer les attributs des éléments joints. |
Requête Prefetch |
Pour les formats de base de données uniquement. Pour les formats qui prennent en charge SQL, le cache de DatabaseJoiner peut être préchargé (c'est-à-dire rempli avec un ensemble spécifique de données avant que la correspondance n'ait lieu) en émettant une requête de préextraction. Cette requête de recherche préalable peut sélectionner une table entière ou des parties sélectionnées d'une table les plus susceptibles de correspondre aux attributs de l'entité. Par exemple, un certain nombre d'entités FME de type " autoroutes " nécessitent une correspondance avec la base de données. La table de base de données (myrecords) possède un champ (record_type) avec un certain nombre de valeurs : route, autoroute, avenue, rue. Les entités FME ne seront jamais mises en correspondance que si le champ record_type=highway. Le processus de jointure global serait donc beaucoup plus efficace si la recherche préalable suivante était effectuée : SELECT * from mesenregistrements where type_enregistrement = 'autoroute' Note À moins que la requête de préextraction ne soit exhaustive, des limites de taille de cache s'appliquent. Consultez la section Pré-extraction exhaustive pour savoir ce qui constitue une requête de pré-extraction exhaustive.
|
Prefetch exhaustive |
Pour les formats de base de données uniquement. Une requête de préextraction dont on sait qu'elle récupère toutes les correspondances possibles est appelée requête exhaustive. Dans ce cas, la base de données n'est jamais consultée à nouveau pour trouver une correspondance. Lorsqu'une correspondance ne peut être trouvée dans les résultats mis en cache d'une requête exhaustive, on suppose qu'il n'existe aucune correspondance. Si la valeur de Prefetch Exhaustive est fixée à Oui , cela indique que la recherche préalable est exhaustive (et que l'utilisateur ne souhaite pas interroger la base de données plus avant). Toutefois, même si la valeur est Non, toute requête de recherche préalable est considérée comme exhaustive si elle ne contient pas de clause WHERE et qu'elle est de la forme suivante : SELECT * from TableName Note Lorsque FME considère qu'une requête de préextraction est exhaustive, la limite de taille du cache est ignorée. En effet, le cache doit contenir tous les résultats de la requête.
|
Taille du cache |
Pour les formats de base de données uniquement. Spécifiez le nombre de lignes à mettre en cache localement si vous ne voulez pas accepter la valeur par défaut de 5000. Vous pouvez éventuellement spécifier une requête SQL pour précharger le cache. Notez que la taille du cache est ignorée si la requête de préchargement est exhaustive. |
Nettoyer les clefs |
Apparaît pour les champs caractères. Ceci réduit les performances et peut avoir lieu si les valeurs de la colonne clé de la base de données sont connues. Cela n'a aucun effet si une requête exhaustive prefetch est utilisée. Note Ce paramètre est rétrocompatible et la plupart des utilisateurs n'ont pas à l'utiliser. Le paramètre n'est accessible qu'à partir du volet de FME Workbench.
|
Éditer les paramètres des Transformers
À l'aide d'un ensemble d'options de menu, les paramètres du Transformer peuvent être attribués en faisant référence à d'autres éléments de traitement. Des fonctions plus avancées, telles qu'un éditeur avancé et un éditeur arithmétique, sont également disponibles dans certains Transformers. Pour accéder à un menu de ces options, cliquez sur à côté du paramètre applicable. Pour plus d'informations, voir Options de menus et paramètres de Transformer.
Définir les valeurs
Il existe plusieurs façons de définir une valeur à utiliser dans un Transformer. La plus simple est de simplement taper une valeur ou une chaîne de caractères, qui peut inclure des fonctions de différents types comme des références d'attributs, des fonctions mathématiques et de chaînes de caractères, et des paramètres de traitement. Il existe un certain nombre d'outils et de raccourcis qui peuvent aider à construire des valeurs, généralement disponibles dans le menu contextuel déroulant adjacent au champ de valeur.
Utilisation de l'éditeur de texte
L'éditeur de texte fournit un moyen efficace de construire des chaînes de textes (dont les expressions régulières) à partir de données source diverses, telles que des attributs, des paramètres et des constantes, et le résultat est directement utilisé dans le paramètre.
Utilisation de l'éditeur arithmétique
L'éditeur arithmétique fournit un moyen simple de construire des expressions mathématiques à partir de plusieurs données source, telles que des attributs et des fonctions, et le résultat est directement utilisé dans un paramètre.
Valeur conditionnelle
Définit des valeurs selon un ou plusieurs tests.
Fenêtre de définition de conditions
Contenu
Les expressions et chaînes de caractères peuvent inclure des fonctions, caractères, paramètres et plus.
Lors du paramétrage des valeurs - qu'elles soient entrées directement dans un paramètre ou construites en utilisant l'un des éditeurs - les chaînes de caractères et les expressions contenant des fonctions Chaîne de caractères, Math, Date et heure ou Entité FME auront ces fonctions évaluées. Par conséquent, les noms de ces fonctions (sous la forme @<nom_de_fonction>) ne doivent pas être utilisés comme valeurs littérales de chaîne de caractères.
Ces fonctions manipulent les chaînes de caractères. | |
Caractères spéciaux |
Un ensemble de caractères de contrôle est disponible dans l'éditeur de texte. |
Plusieurs fonctions sont disponibles dans les deux éditeurs. | |
Fonctions Date/heure | Les fonctions de dates et heures sont disponibles dans l'Editeur texte. |
Ces opérateur sont disponibles dans l'éditeur arithmétique. | |
Elles retournent des valeurs spécifiques aux entités. | |
Les paramètres FME et spécifiques au traitement peuvent être utilisés. | |
Créer et modifier un paramètre publié | Créer ses propres paramètres éditables. |
Options - Tables
Les Transformers avec des paramètres de style table possèdent des outils additionnels pour remplir et manipuler des valeurs.
Réordonner
|
Activé une fois que vous avez cliqué sur un élément de ligne. Les choix comprennent :
|
Couper, Copier et Coller
|
Activé une fois que vous avez cliqué sur un élément de ligne. Les choix comprennent :
Copier, copier et coller peuvent être utilisés au sein d'un Transformer ou entre Transfromers. |
Filtre
|
Commencez à taper une chaîne de caractères, et la matrice n'affichera que les lignes correspondant à ces caractères. Recherche dans toutes les colonnes. Cela n'affecte que l'affichage des attributs dans le Transformer - cela ne change pas les attributs qui sont sortis. |
Importer
|
Le bouton d'import remplit la table avec un jeu de nouveaux attributs lus depuis un jeu de données. L'application spécifique varie selon les Transformers. |
Réinitialiser/Rafraîchir
|
Réinitialise la table à son état initial, et peut fournir des options additionnelles pour supprimer des entrées invalides. Le comportement varie d'un Transformer à l'autre. |
Note : Tous les outils ne sont pas disponibles dans tous les Transformers.
Références
Comportement |
|
Stockage des entités |
Non |
Dépendances | Dépendant d'un format, peut nécessiter des pilotes tiers pour certains formats. |
Alias | Joiner |
Historique |
FME Community
FME Community est l'endroit où trouver des démos, des tutoriaux, des articles, des FAQ et bien plus encore. Obtenez des réponses à vos questions, apprenez des autres utilisateurs et suggérez, votez et commentez de nouvelles entités.
Voir tous les résultats à propos de ce Transformer sur FME Community.
Les exemples peuvent contenir des informations sous licence Open Government - Vancouver et/ou Open Government - Canada.