InlineQuerier
Crée des tables de base de données SQLite depuis les entités entrantes, exécute des requêtes SQL dessus et met en sortie les résultat sous forme d'entités.
Cas d'utilisation courants
- Effectuer des requêtes SQL sur des entités, qu'elles soient ou non originaires d'un format supportant le SQL.
- Exécuter des requêtes complexes et faire dans jointures sans utiliser plusieurs Transformers.
Comment fonctionne-t-il ?
InlineQuerier crée une base de données SQLite temporaire, et crée une table pour chaque objet d'entrée qui lui est connecté. Dans la boîte de dialogue des paramètres, vous pouvez créer un nombre quelconque de requêtes SQL qui utilisent ces tables. Chaque requête définie est associée à un port de sortie, et les résultats de la requête sont présentés sous forme d'entités.
Les définitions des tables d'entrée peuvent être facilement créées en se connectant au port Connecter une entrée. Elles peuvent également être définies en important le schéma de n'importe quel type d'entité dans le traitement, qu'il soit connecté ou non (la table ne sera toutefois pas alimentée si le type d'entité n'est pas connecté). Un nombre illimité de tables peut être créé.
Les requêtes SQL peuvent impliquer toutes les tables et colonnes définies en entrée. En particulier, des jointures multivoie peuvent être exécutées, des opérations SQL avancées impliquant des instructions Select imbriquées et des prédicats avancés peuvent être utilisés, et les tables d'entrée peuvent être utilisées par plusieurs requêtes.
Voir la documentation SQL pour une référence détaillée de la syntaxe de déclaration SQL Select supportée.
Exemples
Dans cet exemple, nous allons utiliser un InlineQuerier pour effectuer une jointure SQL entre des polygones de parc dans un fichier de forme et des attributs dans un fichier texte CSV. Les deux ensembles d'entités ont une clé commune : l'attribut ParkId.
En premier, quand InlineQuerier, est placé dans le traitement il n'a pas de ports d'entrée et de sortie.
Après avoir ajouté les deux Readers de jeux de données, nous connectons chacun d'eux à Connecter une entrée. Les définitions des tables et les ports d'entrée sont créés.
Dans la fenêtre, nous ajoutons un port de sortie nommé ParksOut et construisons une requête SQL qui fournit les entités à générer.
Cette requête joint les entités CSV à Parks via leur clé commune, et sélectionne trois nouveaux attributs à ajouter aux entités Park (ParkName, DogPark, et NeighborhoodName). De plus, seuls les parcs du quartier de West End seront affichés.
Pour chaque entité du parc, la requête est exécutée et de nouveaux attributs sont ajoutés. Les entités sont sorties via le port ParksOut que nous avons défini, associé à la requête SQL.
Notes
- Envisagez d'utiliser InlineQuerier pour remplacer plusieurs FeatureMergers. InlineQuerier permet de réutiliser ses données d'entrée plusieurs fois dans un seul Transformer, alors que si des jointures multiples doivent être effectuées avec un FeatureMerger, plusieurs FeatureMerger doivent être employés et des copies des entités envoyées à chacun. D'autre part, il y a une certaine surcharge pour le InlineQuerier de charger la base de données SQLite sous-jacente. L'utilisation d'un seul InlineQuerier au lieu de plusieurs FeatureMergers simplifie également le traitement.
À moins qu'un seul FeatureMerger ne soit nécessaire dans un flux de travail, le InlineQuerier peut être un meilleur choix. Les anciens traitements comportant plusieurs FeatureMergers en cascade peuvent bénéficier d'une amélioration des performances en remplaçant les FeatureMergers par un seul InlineQuerier correctement configuré. - Si toutes les données à requêter résident dans une source de données compatible avec le SQL, considérez utiliser SQLCreator ou SQLExecutor plutôt étant donné que ces requêtes seront plus efficaces lorsqu'utilisées sur la base de données source.
- Si la requête est une simple jointure entre entités et une base de données source, et que les clés sont indexées dans la base de données, considérez utiliser DatabaseJoiner pour un traitement plus performant.
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 ports d'entrée sont variables et apparaîtront quand l'utilisera connectera des entités, importera des définitions de tables ou les définira manuellement.
Ports de sortie
Les ports de sortie sont variables et apparaîtront quand l'utilisateur créera des paires de requêtes SQL avec des ports ne sortie nommés dans la fenêtre.
Paramètres
InlineQuerier a besoin de la définition de une ou plusieurs Tables, qui deviendront des ports d'entrée du Transformer.
La manière la plus simple de définir une table est de connecter les entités au port Connect Input.
Le bouton Importer... ajoutera une définition à partir des types d'entités sources dans le traitement.
Vous pouvez aussi manuellement définir des Tables et Colonnes.
Table |
Le nom de la table. |
Colonnes de requête |
Les noms des colonnes à définir, séparés par des virgules. |
Lorsque vous ajoutez des colonnes, vous pouvez spécifier que le type est géométrique. Le Transformer écrira alors une colonne géométrique portant ce nom. Ce nom peut ensuite être utilisé pour effectuer des requêtes spatiales dans la table Sorties.
A l'exécution, le Transformer construira un index pour chacune des colonnes avant de traiter les requêtes.
En plus des colonnes définies, une colonne spéciale fme_feature_content est implicitement définie sur chaque table. Au moment de l'exécution, on peut considérer que cette colonne contient le contenu complet de l'entité FME qui est entrée par le port de la table. Pour cette raison, seuls les attributs qui seront utilisés dans le filtrage ou la jonction doivent être définis pour la table - tout attribut supplémentaire (ainsi que la géométrie de l'entité) peut être placé sur les entités de sortie résultantes en sélectionnant la colonne fme_feature_content.
Alternativement, un AttributeRenamer ou NullAttributeMapper en amont peut être utilisé pour s'assurer que les valeurs d'attributs sont présentes pour les colonnes définies.
Ils ne doivent pas nécessairement contenir des attributs supplémentaires. Dans la plupart des cas, une requête de type SELECT * sera effectuée, qui comprendra tous les attributs et la géométrie source de l'entité originale, contenus dans la colonne spéciale fme_feature_content.
Supprimer les colonnes inutilisées peut optimiser les performances.
Ports de sortie |
Saisissez un nom pour chaque port de sortie souhaité. Une requête SQL est attribuée à chaque port de sortie. |
Requête SQL |
La requête SQL qui générera les entités pour le port de sortie. Un éditeur est disponible pour construire les requêtes, avec un accès glisser-déposer aux tables, colonnes et paramètres privés et publiés qui peuvent être utilisés avec la requête. Si le résultat d'une requête inclut l'attribut fme_feature_content (soit explicitement soit via l'utilisation de SELECT *), alors le contenu de l'entité originale sera inclus dans l'entité de sortie Notez que tous les attributs fme_feature_content prennent la forme de Dans le cas où la requête rejoint plusieurs tables avec plusieurs valeurs de fme_feature_content, les attributs des entités résultantes seront fusionnés dans l'ordre dans lequel les valeurs de fme_feature_content sont rencontrées dans la requête. Si les entités originales ont des attributs avec les mêmes noms, alors le premier fme_feature_content trouvé dans la ligne résultante aura ses attributs d'entité sur l'entité de sortie, et les fme_feature_content suivants auront leurs attributs d'entité dupliqués ignorés pendant la fusion. (Si cela n'est pas souhaité, vous pouvez utiliser un AttributeRenamer avant l'InlineQuerier pour garantir des noms d'attributs uniques dans les flux d'entrée). |
Géométrie |
Première entité - l'entité fusionnée résultant aura, par défaut, la géométrie de la première entité source rencontrée. Agréger toutes les entités - l'entité fusionnée résultant contiendra une géométrie agrégée de toutes les entités entrantes, dans l'ordre dans lequel leurs valeurs fme_feature_content sont rencontrées. Système de coordonnées des entités générées Le système de coordonnées des entités générées sera :
Autrement, il reste inchangé. |
Générer |
Le bouton Générer créera un port de sortie avec une requête Select * par défaut pour chaque table d'entrée. |
É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 | Aucun |
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.