Valider la jointure (Gestion des données)

Synthèse

Valide une jointure entre deux couches ou deux tables afin de déterminer si les tables ou couches comportent des noms de champ valides et des champs d’ID d’objet, si la jointure produit des enregistrements correspondants, si la jointure est de type un vers un ou un vers plusieurs, ainsi que d’autres propriétés de jointure.

Cet outil ne produit pas de jointure. Il analyse une jointure potentielle. Il est possible de créer la jointure validée par cet outil à l’aide de l’outil Ajouter une jointure ou Joindre un champ. Cet outil présente les résultats de la validation de la jointure sous forme de messages et, éventuellement, sous forme d’une table en sortie.

Utilisation

  • Cet outil va créer des messages pour signaler les caractéristiques de la jointure validée et notamment :

    • Le nombre de lignes et le nombre d’appariements de la jointure entre la couche, ou la vue tabulaire, en entrée et la table de jointure. Si la jointure ne génère aucun appariement, un message d’avertissement est inclus. Le nombre de lignes et le nombre d’appariements sont également renvoyés sous forme de sorties générées par l’outil.
    • Si les tables de jointure ne comportent pas d’ID d’objet, un message d’avertissement est inclus.
    • La cardinalité de la jointure (si elle produit des résultats un à un ou un à plusieurs).
    • Si les noms des champs de jointure commencent par des caractères non valides ou comportent des caractères qui posent problème, un message d’avertissement est inclus.
    • Si les champs de jointure utilisent des mots-clés SQL réservés, un message d’avertissement est inclus.
    • Les champs de jointure sont indexés ou ne comportent pas d’index attributaire. Les index de champ présentent des performances optimales pour certains formats de données.
    • Les tables de jointure proviennent du même espace de travail. Lorsque la couche ou la vue tabulaire en entrée et la table de jointure sont stockées dans le même espace de travail ou la même base de données, les performances de la jointure seront considérablement améliorées. Il est possible de joindre des tables de différentes bases de données, mais les performances seront réduites car la base de données ne permet pas d’effectuer la jointure.

  • Cet outil produit une table en sortie facultative qui répertorie les problèmes détectés dans la jointure validée. La table en sortie contiendra les champs suivants :

    • TYPE : mot-clé utilisé pour indiquer une caractéristique ou un problème spécifique détecté dans la jointure validée. Les valeurs sont notamment les suivantes :

      Mot-cléDescription

      GPM_INVALID_CHARACTER_IN_NAME

      Le nom du champ contient un caractère non valide.

      GPM_INVALID_FIRST_CHARACTERS_MSG

      Le premier caractère du champ n’est pas valide.

      GPM_RESERVED_SQL_KEYWORD

      Le nom du champ comporte des mots-clés SQL réservés.

      GPM_NO_MATCH_JOIN

      La jointure ne génère aucun appariement.

      GPM_NO_OBJECTID_JOIN

      La couche ou la vue tabulaire n’a pas de champ d’ID d’objet.

      GPM_NOT_INDEX_FIELD

      Le champ n’est pas indexé.

      DIFFERENT_WORKSPACE

      Les tables sont stockées dans des espaces de travail ou des bases de données différentes.

    • TABLE_NAME : nom de la table qui a produit les messages de validation de la jointure ou l’avertissement.
    • FIELD_NAME : nom du champ figurant dans la couche en entrée, la vue tabulaire ou la table de jointure qui a produit le message de validation de la jointure ou l’avertissement.
    • DESC : description détaillée du message de validation ou de l’avertissement, comportant des informations sur le mode de résolution d’un problème.

  • La cardinalité de la jointure (jointure un à un ou un à plusieurs) sera validée par cet outil. Les enregistrements de la table de jointure peuvent être appariés à plusieurs enregistrements dans la couche ou la vue tabulaire en entrée. De la même façon, plusieurs enregistrements de la table de jointure peuvent être appariés à un enregistrement dans la couche ou la vue tabulaire en entrée afin de produire une jointure un à plusieurs.

  • Lorsqu’une jointure un vers plusieurs est générée, le résultat de la jointure peut être visualisé dans la table attributaire, où un message d’avertissement indique si la table contient des ID d’objet dupliqués. Étant donné que de nombreux outils de géotraitement ne prennent pas en charge les données contenant des ID d’objet dupliqués et que le traitement de telles données est susceptible de générer des résultats inattendus, il est recommandé de d’abord copier la couche jointe dans une nouvelle classe d’entités à l’aide de l’outil Exporter des entités. Utilisez ensuite cette nouvelle classe d’entités comme entrée d’autres outils de géotraitement.

Paramètres

ÉtiquetteExplicationType de données
Couche ou vue tabulaire en entrée

Couche ou vue tabulaire dont la jointure avec la table de jointure est à valider.

Mosaic Layer; Raster Layer; Table View
Champ de jointure en entrée

Champ de la couche ou de la vue tabulaire en entrée sur lequel la jointure sera basée.

Field
Table de jointure

Table ou vue tabulaire dont la jointure avec la couche ou vue tabulaire en entrée est à valider.

Mosaic Layer; Raster Layer; Table View
Champ de la table de jointure

Champ dans la table de jointure qui contient les valeurs sur lesquelles sera basée la jointure.

Field
Table en sortie
(Facultatif)

Table en sortie contenant les messages de validation sous forme tabulaire.

Table

Sortie obtenue

ÉtiquetteExplicationType de données
Nombre d’appariements

Nombre d’enregistrements uniques de la couche ou table en entrée correspondant à un enregistrement dans la couche ou table de jointure.

Long
Nombre de lignes

Nombre d’enregistrements produits par la jointure entre les couches ou tables en entrée et de jointure. Les jointures un à plusieurs comptabilisent chaque paire d’enregistrements appariés. En raison des jointures un à plusieurs, le nombre de lignes en sortie peut être supérieur au nombre d’appariements.

Long

arcpy.management.ValidateJoin(in_layer_or_view, in_field, join_table, join_field, {output_msg})
NomExplicationType de données
in_layer_or_view

Couche ou vue tabulaire dont la jointure avec la table de jointure est à valider.

Mosaic Layer; Raster Layer; Table View
in_field

Champ de la couche ou de la vue tabulaire en entrée sur lequel la jointure sera basée.

Field
join_table

Table ou vue tabulaire dont la jointure avec la couche ou vue tabulaire en entrée est à valider.

Mosaic Layer; Raster Layer; Table View
join_field

Champ dans la table de jointure qui contient les valeurs sur lesquelles sera basée la jointure.

Field
output_msg
(Facultatif)

Table en sortie contenant les messages de validation sous forme tabulaire.

Table

Sortie obtenue

NomExplicationType de données
match_count

Nombre d’enregistrements uniques de la couche ou table en entrée correspondant à un enregistrement dans la couche ou table de jointure.

Long
row_count

Nombre d’enregistrements produits par la jointure entre les couches ou tables en entrée et de jointure. Les jointures un à plusieurs comptabilisent chaque paire d’enregistrements appariés. En raison des jointures un à plusieurs, le nombre de lignes en sortie peut être supérieur au nombre d’appariements.

Long

Exemple de code

Exemple 1 d’utilisation de la fonction ValidateJoin (fenêtre Python)

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

import arcpy
arcpy.management.ValidateJoin_management("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
arcpy.AddJoin_management("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
Exemple 2 d’utilisation de l’outil ValidateJoin (script autonome)

Ce script autonome illustre la fonction ValidateJoin dans le cadre d’un processus permettant de joindre une table à une classe d’entités.

# Name: AttributeJoin.py
# Purpose: Join a table to a feature class and find one-to-many matches

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"  # both tables have HOLLAND95 field
outFeatures = "Vegtype_Joined"

# Join the feature layer to a table
val_res = arcpy.ValidateJoin_management(inFeatures, joinField, joinTable, joinField)
matched = int(val_res[0]) 
row_count = int(val_res[1])

print(arcpy.GetMessages())  # Tool messages about the Join

# Validate the join returns matched rows before proceeding
if matched >= 1:
    joined = arcpy.AddJoin_management(inFeatures, joinField, joinTable, joinField)

    # Copy the joined layer to a new permanent feature class
    arcpy.CopyFeatures_management(joined, outFeatures)

print(f"Output Features: {outFeatures} had matches {matched} and created {row_count} records")