SQLExecutor
Exécute des requêtes SQL en base de données une fois pour chaque entité initiatrice qui entre dans le Transformer. Le schéma, les entités Initiator et les résultats de la requête peuvent être édités.
Cas d'utilisations typiques
- Extrait des enregistrements d'une base de données en tant qu'entités FME selon une déclaration SQL.
- Exécuter une jointure de base de données
- Effectuer des opérations sur des tables de base de données SQL (créer, supprimer, modifier, tronquer)
- Créer ou supprimer des index ou contraintes avant ou après le chargement de données
Comment fonctionne-t-il ?
Le SQLExecutor reçoit des entités via le port Initiator et, pour chaque entité reçue, il exécute une requête SQL dans une base de données externe. Les résultats de la requête, ainsi que les entités initiatrices, sont édités.
Les instructions SQL sont construites dans le Transformer, en utilisant la syntaxe appropriée pour la base de données utilisée. Les requêtes spatiales sont supportées si la base de données supporte les prédicats spatiaux.
Des schémas peuvent également être produits s'ils sont pris en charge par la base de données. Une entité de schéma sera produite pour chaque entité Initiator.
Exemples
Dans cet exemple, nous avons un jeu de données de casernes de pompiers, qui comprend une géométrie de points et quelques attributs. Ils ont une adresse de rue, mais pas une adresse postale complète.
Nous allons utiliser un SQLExecutor pour joindre une table de base de données (en utilisant le champ Address en tant que clé) et récupérer l'adresse postale complète.
En plus, nous allons effectuer une seconde jointure depuis la table de la base de données vers une autre table et récupérer le Civic Number de chaque caserne.
Le jeu de données FireHalls est connecté au port Initiator d'un SQLExecutor. Chaque entité FireHalls entraînera l'exécution de la requête SQL, pour cette entité.
La première étape consiste à se connecter à la base de données externe. Sélectionnez le type, dans ce cas, PostGIS. Ensuite, configurez (ou sélectionnez, si elle est pré-enregistrée) la connexion à la base de données.
Ensuite, nous créons une instruction SQL pour joindre les deux tables. Note :
- @value(Address) fournit une valeur de l'entité Initiator - l'adresse d'une entité spécifique, ce qui restreint les résultats aux seuls enregistrements correspondants à cette entité. Puisque la requête est exécutée à chaque fois qu'une entité passe par là, cela se répète pour chaque entité FireHall.
- La table PostalAddress est jointe à l'entité en utilisant le champ PostalAddress.
- La table AdressPoints (qui convient l'attribut CivicNo) est jointe à la table PostalAddress (et non pas à l'entité Initiator), en utilisant une clé différente - AddressId.
Comme les attributs seront cachés par défaut, nous choisissons un jeu d'attributs pour les exposer sur nos entités en générées.
Les entités avec des résultats pour la requête ressortent via le port Results et ont de nouveaux attributs ajoutés par déclaration SQL.
Notes
- Si la base de données supporte les prédicats spatiaux, des requêtes spatiales peuvent être utilisées.
- SchemaScanner peut également être utile comme alternative pour produire des schémas.
- Pour des jointures simples d'une table de base de données vers des entités, DatabaseJoiner peut être plus efficace (si le(s) champ(s) clé(s) sont indexés). DatabaseJoiner ne nécessite pas de connaissances en SQL.
- L'exécuteur SQLE ne peut être utilisé que sur des sources de données compatibles avec SQL (en plus des entités de l'initiateur). Pour utiliser SQL avec des données non-SQL, envisagez l'utilisation de InlineQuerier.
- Si toutes les données à interroger existent déjà dans une source de données compatible SQL, il est toujours plus efficace d'utiliser SQLCreator ou SQLExecutor, car cela permet de travailler sur (et de filtrer) les données à traiter avant de les lire dans l'environnement FME.
- Les entités qui entrent dans ce Transformer ne sont pas éditées tant que la requête SQL n'est pas terminée. Ce comportement garantit que les Transformers SQLExecutor supplémentaires, s'ils sont présents, n'exécutent pas leurs requêtes avant que la requête précédente ne soit terminée.
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 en entrée
Entité qui déclenche une requête SQL à exécuter.
Ports de sortie
Si cela est demandé dans les paramètres et supporté par la base de données, les entités du schéma sont éditées ici.
Un attribut nommé fme_query est ajouté au schéma d'entités contenant le SQL associé.
Résultats de la requête.
Entité Initiator entrantes avec un attribut supplémentaire (_matched_records) qui contient le nombre d'entités générées suite à la requête.
Lorsque d'une requête échoue, l'entité d'origine Initiator ressort par ce port avec un attribut supplémentaire appelé _reader_error contenant le dernier message d'erreur.
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
Format |
Sélectionner un format de jeu de données. |
Jeu de données/Connexion |
Selon le format choisi, sélectionner un jeu de données ou utiliser/configurer une connexion à une base de données. |
Paramètres |
Paramètres spécifiques à un format |
Système de coordonnées |
Le système de coordonnées de la base de données à laquelle on se connecte (et non pas l'Initiator), ainsi que le système de coordonnées du résultat. Laisser par défaut (Lire depuis la source) ou utiliser une sélection dans la galerie de systèmes de coordonnées. |
Instruction SQL |
Spécifier la requête SQL en utilisant l'éditeur de texte ou choisir un attribut qui contient la requête. Plusieurs commandes SQL peuvent être délimitées par un caractère spécifié à l'aide du mot-clé FME_SQL_DELIMITER, intégré au tout début de l'instruction SQL. Le caractère unique qui suit immédiatement ce mot-clé sera utilisé pour diviser le SQL qui sera ensuite envoyé à la base de données pour exécution. (Note : Inclure un espace avant le caractère). Insérer un trait d'union devant une commande indique que les erreurs doivent être ignorées. Certains formats de base de données supportent les commentaires avec /* ... */ ou doubles traits d'union (--). L'exemple suivant contient deux commandes SQL où les erreurs de la première commande seront ignorées : FME_SQL_DELIMITER ; -SELECT * FROM TABLEA; SELECT * FROM TABLEB; |
Attributs à exposer : |
Entrez les noms des attributs à exposer sur les entités créées par la requête. Les attributs seront affichés dans la même séquence que celle spécifiée dans la liste. Par défaut, les attributs des entités résultantes sont masqués. Spécifiez les attributs à exposer en entrant les noms des attributs. Cliquez sur le bouton de navigation à côté du paramètre Attributs à exposer. Vous pouvez également utiliser une instruction SQL pour remplir la liste en cliquant sur "Populate from SQL Query…" et en saisissant une requête SQL. Les colonnes de la première entité correspondante seront utilisées pour remplir la liste des attributs. |
Intégration des attributs |
Attributs Result uniquement : les entités en sortie ne contiennent que les attributs du résultat de la requête. Conserver les attributs Initiator en cas de conflit : Les attributs de l'entité résultante sont une combinaison des résultats de la requête et des attributs de l'entité initiatrice. En cas de conflit, les valeurs des attributs sont reprises de l'entité initiatrice. Conserver les attributs Result en cas de conflit : Les attributs de l'entité de résultat sont une combinaison des attributs des résultats de la requête et de l'entité de l'initiateur. En cas de conflit, les valeurs des attributs sont extraites des résultats de la requête. |
Ignorer les valeurs nulles |
Activé quand Intégration des attributs vaut Conserver les attributs Initiator en cas de conflit ou Conserver les attributs Result en cas de conflit. Si Oui, lorsqu'il y a des attributs avec le même nom sur les entités Initiator et Result, si l'un d'entre eux a une valeur <null>, alors la valeur de l'autre attribut sera utilisée. Si Non, la sélection de l'Intégration des attributs sera strictement respectée, y compris le maintien des valeurs nulles. |
Joindre la géométrie |
Géométrie de Result : les géométries des entités résultats correspondent uniquement à celles produites par la requête SQL.Géométrie Initiator uniquement : les géométries des entités résultats correspondent uniquement à celles présentes dans les entités Initiator. Combiner les géométries Initiator et Résulats : les entités résultats contiennent les géométries combinées des entités Initiator et celles de la requête. |
Entités à lire |
Sélectionnez le type d'entités à lire et à écrire :
|
É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 |
Non applicable |
Stockage des entités |
Non applicable |
Dépendances | Dépendant d'un format, peut nécessiter des pilotes tiers pour certains formats. |
Alias | |
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.