Créer une table de requête (Gestion des données)

Synthèse

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 champs ou de lignes à partir des données d’origine dans la base de données.

Cet outil accepte les données provenant d’une connexion à une géodatabase ou une base de données OLE.

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 un champ Shape est ajouté à la liste des champs, 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 couche à 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 des champs correspond à l’ordre dans lequel les champs apparaîtront dans la couche ou la vue tabulaire en sortie.

  • Vous pouvez 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 un champ Object ID généré de façon dynamique. Sans champ Object ID, les sélections ne seront pas prises en charge.

  • Vous pouvez choisir plusieurs champs dans la liste des champs de clé si une combinaison des champs 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.

  • Pour plus d’informations sur la syntaxe du paramètre Expression, reportez-vous à la rubrique SQL mode (Mode SQL).

  • 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 entraîne l’interrogation de la Table2 sur un champ non indexé,+ et si l’inversion de l’ordre provoque l’interrogation de la Table1 sur un champ indexé, l’ordre sera inversé afin de tenter d’optimiser la performance. Il s’agit de 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 fonctionnent mieux lorsqu’elles sont effectuées de un vers plusieurs ou de un vers un.

Paramètres

ÉtiquetteExplicationType de données
Tables en entrée

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 en entrée peut provenir d’une connexion à une géodatabase ou une base de données.

Table View; Raster Layer
Nom de la table

Nom de la couche ou de la vue tabulaire qui va être créée.

Table View; Raster Layer
Options de champs de clé

Indique comment un champ Object ID sera généré, le cas échéant, pour la requête. Les couches et vues tabulaires dans ArcGIS nécessitent un champ Object ID. Un champ Object ID est un champ d’entier qui permet d’identifier de façon unique les lignes dans les données en cours d’utilisation.

  • Utiliser les champs de cléLes champs spécifiés dans le paramètre Key Fields (Champs de clé) serviront à identifier de manière unique une ligne dans la table en sortie. Il peut s’agir d’un champ unique ou de plusieurs champs qui, lorsqu’ils sont associés, identifient de manière unique une ligne dans la table en sortie. Si aucun champ n’est spécifié dans la liste des champs de clé, l’option Générer un champ de clé est appliquée automatiquement. Il s’agit de l’option par défaut.
  • Générer un champ de cléSi aucun champ de clé n’est spécifié, un champ Object ID qui identifie de manière unique chaque ligne dans la table en sortie sera généré.
  • Aucun champ de cléAucun champ Object ID ne sera généré. Les sélections ne seront pas prises en charge pour la vue tabulaire.
    Remarque :

    S’il existe un champ Object ID, il est utilisé même si cette option est choisie.

  • Utiliser les champs de cléLes champs spécifiés dans le paramètre in_key_field serviront à identifier de manière unique une ligne dans la table en sortie. Il peut s’agir d’un champ unique ou de plusieurs champs qui, lorsqu’ils sont associés, identifient de manière unique une ligne dans la table en sortie. Si aucun champ n’est spécifié dans la liste des champs de clé, l’option ADD VIRTUAL_KEY_FIELD est appliquée.
  • Générer un champ de cléSi aucun champ de clé n’est spécifié, un champ Object ID qui identifie de manière unique chaque ligne dans la table en sortie sera généré.
  • Aucun champ de cléAucun champ Object ID ne sera généré. Les sélections ne seront pas prises en charge pour la vue tabulaire.
    Remarque :

    S’il existe un champ Object ID, il est utilisé même si cette option est choisie.

String
Champs de clé
(Facultatif)

Un champ ou une combinaison de champs permettant d’identifier de manière unique une ligne dans la requête. Ce paramètre n’est utilisé que si le paramètre Options de champs de clé est défini sur Utiliser les champs de clé.

Field
Champs
(Facultatif)

Champs allant être inclus 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. Si un champ Shape est ajouté à la liste des champs, le résultat est une couche ; sinon c’est une vue tabulaire.

Value Table
Expression
(Facultatif)

Expression SQL utilisée pour sélectionner un sous-ensemble d’enregistrements.

SQL Expression

arcpy.management.MakeQueryTable(in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
NomExplicationType 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 where_clause peut être utilisé pour définir comment les joindre.

La table en entrée peut provenir d’une connexion à une géodatabase ou une base de données.

Table View; Raster Layer
out_table

Nom de la couche ou de la vue tabulaire qui va être créée.

Table View; Raster Layer
in_key_field_option

Indique comment un champ Object ID sera généré, le cas échéant, pour la requête. Les couches et vues tabulaires dans ArcGIS nécessitent un champ Object ID. Un champ Object ID est un champ d’entier qui permet d’identifier de façon unique les lignes dans les données en cours d’utilisation.

  • USE_KEY_FIELDSLes champs spécifiés dans le paramètre in_key_field serviront à identifier de manière unique une ligne dans la table en sortie. Il peut s’agir d’un champ unique ou de plusieurs champs qui, lorsqu’ils sont associés, identifient de manière unique une ligne dans la table en sortie. Si aucun champ n’est spécifié dans la liste des champs de clé, l’option ADD VIRTUAL_KEY_FIELD est appliquée.
  • ADD_VIRTUAL_KEY_FIELDSi aucun champ de clé n’est spécifié, un champ Object ID qui identifie de manière unique chaque ligne dans la table en sortie sera généré.
  • NO_KEY_FIELDAucun champ Object ID ne sera généré. Les sélections ne seront pas prises en charge pour la vue tabulaire.
    Remarque :

    S’il existe un champ Object ID, il est utilisé même si cette option est choisie.

String
in_key_field
[in_key_field,...]
(Facultatif)

Un champ ou une combinaison de champs permettant d’identifier de manière unique une ligne dans la requête. Ce paramètre n’est utilisé que si le paramètre in_key_field_option est défini sur USE_KEY_FIELDS.

Field
in_field
[[field, {alias}],...]
(Facultatif)

Champs allant être inclus 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. Si un champ Shape est ajouté à la liste des champs, le résultat est une couche ; sinon c’est une vue tabulaire.

Value Table
where_clause
(Facultatif)

Expression SQL utilisée pour sélectionner un sous-ensemble d’enregistrements.

SQL Expression

Exemple de code

Exemple 1 d’utilisation de l’outil MakeQueryTable (fenêtre Python)

Le script ci-dessous pour la fenêtre Python illustre l’utilisation de la fonction MakeQueryTable en mode immédiat.

import arcpy
arcpy.env.workspace = "C:/data/data.gdb"
arcpy.management.MakeQueryTable(["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'")
Exemple 2 d’utilisation de l’outil MakeQueryTable (script autonome)

Le script suivant est un exemple de l’utilisation de la fonction 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.
 
# Import system modules
import arcpy
 
# Local variables...
tableList = ["c:/Connections/balrog.odc/vtest.COUNTIES",\
             "c:/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.management.MakeQueryTable(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)

# Print the total rows
print(arcpy.management.GetCount(lyrName))
 
# Print the fields
fields = arcpy.ListFields(lyrName)
for field in fields:
    print(field.name)

# Save as a dBASE file
arcpy.management.CopyRows(lyrName, "C:/temp/calinfo.dbf")

Informations de licence

  • Basic: Oui
  • Standard: Oui
  • Advanced: Oui

Rubriques connexes