Générer une table de requête (Gestion des données)
Récapitulatif
Cet outil applique une requête SQL à une base de données, et présente les résultats dans une couche ou une vue tabulaire. Vous pouvez utiliser une requête pour joindre plusieurs tables ou renvoyer un sous-ensemble de colonnes ou de lignes à partir des données d'origine dans la base de données.
Cet outil accepte les données d'une géodatabase ArcSDE, d'une géodatabase fichier, d'une géodatabase personnelle ou d'une connexion OLE DB.
Utilisation
La couche créée par l'outil est temporaire et disparaîtra à la fin de la session si le document n'est pas enregistré.
-
Toutes les tables ou les classes d'entités en entrée doivent provenir du même espace de travail en entrée.
-
Si une colonne de forme est ajoutée à la liste de champ, le résultat est une couche ; sinon, c'est une vue tabulaire.
-
Si le résultat en sortie est une couche, celle-ci peut être conservée dans un fichier de couches à l'aide de l'outil Enregistrer dans un fichier de couche ou dans une classe d'entités à l'aide de l'outil Copier des entités.
-
L'ordre des champs dans la liste de champ indique l'ordre dans lequel les champs apparaîtront dans la vue tabulaire ou la couche en sortie.
-
L'outil vous permet de fournir une option de champ de clé et une liste de champs de clé. Ces informations définissent le mode d'identification unique des lignes et permettent d'ajouter aux données une colonne ObjectID générée de façon dynamique. Sans colonne ObjectID, les sélections ne seront pas prises en charge.
-
La liste de champs de clé vous permet de choisir plusieurs colonnes si la combinaison de ces colonnes est nécessaire pour définir des valeurs uniques.
-
Si une expression SQL est utilisée mais ne renvoie pas d'enregistrements correspondants, la classe d'entités en sortie sera vide.
-
Les classes d'entités peuvent être jointes, mais la liste des champs doit contenir au plus un champ de type géométrie. Si vous ajoutez plusieurs colonnes de géométrie, l'outil affiche une erreur lorsque vous cliquez sur OK et l'exécution est interrompue.
-
Pour en savoir plus sur la syntaxe du paramètre Expression, reportez-vous à la rubrique Construction d'une expression SQL ou Référence SQL.
-
Le bouton Ajouter un champ des paramètres Champs et Champs de clé est utilisé uniquement dans ModelBuilder. Dans ModelBuilder, lorsque l'outil précédent n'a pas été exécuté ou si ses données dérivées n'existent pas, les paramètres Champs et Champs de clé peuvent ne comporter aucun nom de champ. Le bouton Ajouter un champ permet d'ajouter le ou les champs prévus pour terminer la saisie dans la boîte de dialogue Générer une table de requête et de continuer la construction du modèle.
-
Lorsque les tables en entrée proviennent d'une géodatabase fichier, les tables sont généralement jointes dans l'ordre dans lequel elles sont répertoriées dans le paramètre Tables en entrée. Par exemple, si la Table1 est répertoriée avant la Table2, la Table2 sera jointe en extrayant un enregistrement de la Table1, puis en extrayant les lignes correspondantes de la Table2. Toutefois, si cela provoque l'interrogation de la Table2 sur un champ non indexé et si l'inversion de l'ordre provoquer l'interrogation de la Table1 sur un champ indexé, l'ordre est inversé afin de tenter d'optimiser la performance. C'est la seule logique d'optimisation de requête qui s'applique lorsque vous utilisez des données de géodatabase fichier avec cet outil. En général, les jointures dans les géodatabases fichier sont plus performantes lorsqu'elles sont effectuées de un vers plusieurs et de un vers un.
Syntaxe
Paramètre | Explication | Type de données |
in_table [in_table,...] |
Nom de la ou des tables à utiliser dans la requête. Si plusieurs tables sont répertoriées, le paramètre Expression peut être utilisé pour définir comment les joindre. La table d'entrée peut provenir d'une géodatabase ArcSDE, d'une géodatabase fichier, d'une géodatabase personnelle ou d'une connexion OLE DB. | Table View; Raster Layer |
out_table |
Nom de la couche ou de la vue tabulaire qui va être créée par l'outil. | Table View;Raster Layer |
in_key_field_option |
Indique comment un champ ObjectID est généré, le cas échéant, pour la requête. La valeur par défaut est USE_KEY_FIELDS.
| String |
in_key_field [in_key_field,...] (Facultatif) |
Spécifie un champ ou une combinaison de champs qu'il est possible d'utiliser pour identifier de manière unique une ligne dans la requête. Ce paramètre est utilisé uniquement lorsque l'option USE_KEY_FIELDS est sélectionnée. Le bouton Ajouter un champ, qui est utilisé uniquement dans ModelBuilder, vous permet d'ajouter des champs attendus afin que vous puissiez remplir la boîte de dialogue et poursuivre la création du modèle. | Field |
in_field [[Field, {Alias}],...,...] (Facultatif) |
Champs à inclure dans la couche ou la vue tabulaire. Si un alias est défini pour un champ, ceci correspond au nom qui s'affiche. Si aucun champ n'est spécifié, tous les champs de toutes les tables sont inclus. | Value Table |
where_clause (Facultatif) |
Expression SQL permettant de sélectionner un sous-ensemble d'enregistrements. La syntaxe de l'expression diffère légèrement en fonction de la source des données. Par exemple, lorsque vous interrogez des géodatabases fichier ou ArcSDE, des fichiers de formes, des couvertures, ou des tables dBase ou INFO, placez le nom des champs entre guillemets doubles : "MY_FIELD" Si vous interrogez des géodatabases personnelles, placez les champs entre crochets : [MON_CHAMP] Dans Python, les chaînes se trouvent entre guillemets simples ou doubles. Pour créer une chaîne contenant des guillemets (comme c'est souvent le cas pour les clauses WHERE dans les expressions SQL), vous pouvez désactiver les guillemets (à l'aide d'une barre oblique inverse) ou placer la chaîne entre guillemets triples. Par exemple, si la clause WHERE souhaitée est "CITY_NAME" = 'Chicago' vous pouvez mettre la chaîne entière entre guillemets doubles, puis désactiver les guillemets doubles intérieurs de la manière suivante : " \"CITY_NAME\" = 'Chicago' " Ou vous pouvez mettre la chaîne entière entre guillemets simples, puis désactiver les guillemets simples intérieurs de la manière suivante : ' "CITY_NAME" = \'Chicago\' ' Ou vous pouvez mettre la chaîne entière entre guillemets triples sans désactiver les guillemets : """ "CITY_NAME" = 'Chicago' """ Pour en savoir plus sur la syntaxe SQL et sur ses différences selon les sources de données, reportez-vous à la rubrique d'aide Référence SQL pour les expressions de requête utilisées dans ArcGIS. | SQL Expression |
Exemple de code
Le script de fenêtre Python suivant illustre l'utilisation de l'outil MakeQueryTable en mode immédiat.
import arcpy
from arcpy import env
env.workspace = "C:/data/data.gdb"
arcpy.MakeQueryTable_management (["Counties","codemog"], "queryout","ADD_VIRTUAL_KEY_FIELD", "",
[["Counties.OBJECTID", 'ObjectID'],["Counties.NAME", 'Name'],
["codemog.Males", 'Males'], ["codemog.Females", 'Females']],
"Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
Le script suivant est un exemple de l'utilisation de l'outil MakeQueryTable dans l'environnement de création de scripts Python.
# MakeQueryTableOLEDB.py
# Description: Create a query table from two OLE DB tables using a limited set of
# fields and establishing an equal join.
# Author: ESRI
# Import system modules
import arcpy
try:
# Local variables...
tableList = ["Database Connections/balrog.odc/vtest.COUNTIES",\
"Database Connections/balrog.odc/vtest.CODEMOG"]
fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'],["vtest.COUNTIES.NAME", 'Name']\
["vtest.CODEMOG.Males", 'Males'],["vtest.CODEMOG.Females", 'Females']]
whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\
"and vtest.COUNTIES.STATE_NAME = 'California'"
keyField = "vtest.COUNTIES.OBJECTID"
lyrName = "CountyCombined"
# Make Query Table...
arcpy.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
# Print the total rows
print arcpy.GetCount_management(lyrName)
# Print the fields
Fields = arcpy.ListFields(lyrName)
for field in Fields:
print Field.name
# Save as a dBASE file
arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")
except Exception, e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "Line %i" % tb.tb_lineno
print e.message