Verbindung hinzufügen (Data Management)

Zusammenfassung

Verbindet einen Layer mit einem anderen Layer oder einer Tabelle auf Basis eines gemeinsamen Feldes. Feature-Layer, Tabellensichten und Raster-Layer mit einer Raster-Attributtabelle werden unterstützt.

Die Datensätze im Parameterwert für Join-Tabelle werden den Datensätzen im Parameterwert für Eingabetabelle zugeordnet. Eine Übereinstimmung tritt auf, wenn das Eingabefeld und das Join-Feld dieselben Werte aufweisen. Diese Verbindung ist temporär.

Abbildung

Abbildung des Werkzeugs "Verbindung hinzufügen"

Verwendung

  • Der Parameterwert für die Eingabetabelle kann ein Feature-Layer, eine Tabellensicht oder ein Raster-Layer mit einer Attributtabelle sein. Wenn ein Datenpfad verwendet wird, wird der Layer mit der Verbindung erstellt. Die Verbindung verbleibt immer beim Layer, nicht in den Daten.

  • Verwenden Sie zum Erstellen einer permanenten Verbindung das Werkzeug Feld verbinden. Sie können auch den verbundenen Layer als Eingabe für eines der folgenden Werkzeuge verwenden: Features kopieren, Zeilen kopieren, Features exportieren oder Tabelle exportieren. Beim Speichern der Ergebnisse in einer neuen Feature-Class oder Tabelle kann die Umgebungseinstellung Vollständig qualifizierte Feldnamen beibehalten verwendet werden, um zu steuern, ob die verbundenen Ausgabe-Feldnamen durch den Namen der Tabelle qualifiziert werden, aus der das Feld stammt. Feld-Aliasnamen werden vom Layer in die Ausgabe übernommen, es sei denn, die Ausgabe ist ein Shapefile.

  • Verwenden Sie die Werkzeuge Abfrage-Layer erstellen, Datenbanksicht erstellen oder Aggregations-Abfrage-Layer erstellen, um die Performance einer Verbindung zu optimieren und mehr Funktionen nutzen zu können, wenn Sie die Daten in einer Enterprise-Geodatabase oder SQLite-Datenbank verbinden möchten.

  • Wenn es sich bei der Eingabe um eine Feature-Class oder einen Dataset-Pfad handelt, wird von diesem Werkzeug ein neuer Layer erstellt und mit dem Ergebnis des angewendeten Werkzeugs zurückgegeben.

  • Wenn von der Verbindung eine Eins-zu-Viele-Verbindung erzeugt wird, kann das Ergebnis der Verbindung in der Attributtabelle angezeigt werden. Dort gibt eine Warnmeldung an, ob die Tabelle doppelte Objekt-IDs enthält. Da viele Geoverarbeitungswerkzeuge Daten mit doppelten Objekt-IDs nicht unterstützen und das Verarbeiten solcher Daten zu unerwarteten Ergebnissen führen kann, sollten Sie den verbundenen Layer zuerst mit dem Werkzeug Features exportieren in eine neue Feature-Class kopieren. Verwenden Sie dann die neue Feature-Class als Eingabe für andere Geoverarbeitungswerkzeuge.

    Zusätzlich können Sie den Parameter Verbindungsvorgang auf Eins-zu-Erster-Verbindung festlegen, um zu verhindern, dass Objekt-IDs doppelt vorhanden sind.

  • Der Parameter Verbindungsvorgang verfügt über drei Statusoptionen zum Anpassen der Beziehungsart. Der Standardwert ist leer. Damit kann die Datenquelle versuchen, eine Eins-zu-Viele-Verbindung herzustellen. Die Option Eins-zu-Viele-Verbindung funktioniert nur bei bestimmten Datenquellen, die über ein Objekt-ID-Feld verfügen. Bei der Option Eins-zu-Erster-Verbindung wird die erste Übereinstimmung in der Tabelle verwendet, was zu unterschiedlichen Ausgaben führen kann, wenn das Objekt-ID-Feld geändert wurde oder der Workspace, in den die Tabelle kopiert wird, geändert wird. Bei Eins-zu-Erster-Verbindungen wird die Groß-/Kleinschreibung nicht beachtet. Bei Eins-zu-Viele-Verbindungen muss die Groß-/Kleinschreibung beachtet werden.

  • In den folgenden Tabellen sind mögliche Ergebnisse von Verbindungen mit verschiedenen Eingaben dargestellt.

    Die erste Tabelle zeigt eine Verbindung des Typs "Eins-zu-Viele". Das Beibehalten von nur übereinstimmenden Datensätzen hat keine Wirkung, da alle Datensätze Übereinstimmungen aufweisen.

    EingabetabelleJoin-TabelleErgebnis

    Eingabefeld

    Typ

    Join-Feld

    Wert

    Eingabefeld

    Typ

    Join-Feld

    Wert

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    1

    300

    1

    A

    1

    300

    2

    400

    2

    B

    2

    400

    Verbindung hinzufügen – Beispiel: Eins-zu-Viele-Verbindung, wenn jede Tabelle über ein Objekt-ID-Feld verfügt

    In der zweiten Tabelle wird eine Join-Tabelle ohne Objekt-ID-Feld verwendet. Dabei ist nur eine Eins-zu-Erster-Verbindung möglich. Eine Eins-zu-Erster-Verbindung ist auch nur möglich, wenn jede Tabelle aus einem anderen Workspace stammt. Bei einer Eins-zu-Erster-Verbindung wird nicht zwischen Groß- und Kleinschreibung unterschieden.

    EingabetabelleJoin-TabelleErgebnis

    Eingabefeld

    Typ

    Join-Feld

    Wert

    Eingabefeld

    Typ

    Join-Feld

    Wert

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

    Verbindung hinzufügen – Beispiel: Eins-zu-Erster-Verbindung, wenn keine Tabelle über ein Objekt-ID-Feld verfügt.

    In der letzten Tabelle enthält die Eingabetabelle mehr Datensätze als die Join-Tabelle. Beim Beibehalten aller Datensätze werden alle übereinstimmenden Datensätze zuzüglich der Datensätze aus der Eingabetabelle beibehalten, die keine Übereinstimmungen aufweisen.

    EingabetabelleJoin-TabelleErgebnis

    Eingabefeld

    Typ

    Join-Feld

    Wert

    Eingabefeld

    Typ

    Join-Feld

    Wert

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <NULL>

    <NULL>

    4

    D

    <NULL>

    <NULL>

    Verbindung hinzufügen (Beispiel): Eins-zu-Viele-Verbindung, wenn jede Tabelle ein Objekt-ID-Feld aufweist und der Parameter Alle Eingabedatensätze beibehalten aktiviert ist.

    Die Eingabetabelle muss ein Objekt-ID-Feld aufweisen, um eine Eins-zu-Viele-Verbindung durchzuführen, und sie muss im selben Workspace vorliegen.

  • Datensätze aus der Join-Tabelle können mehreren Datensätzen zugewiesen werden, wenn in der Join-Tabelle ein Objekt-ID-Feld vorliegt. Andernfalls wird eine Eins-zu-Erster-Verbindung durchgeführt.

  • Beim Verbinden von Tabellen werden mit der Standardoption alle Datensätze beibehalten. Wenn ein Datensatz der Eingabetabelle keine Entsprechung in der Join-Tabelle besitzt, erhält dieser Datensatz NULL-Werte für alle Felder, die aus der Join-Tabelle an die Eingabetabelle angehängt werden.

    EingabetabelleJoin-TabelleErgebnis

    Eingabefeld

    Typ

    Join-Feld

    Wert

    Eingabefeld

    Typ

    Join-Feld

    Wert

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <NULL>

    <NULL>

    4

    D

    <NULL>

    <NULL>

    Bei deaktiviertem Parameter Alle Eingabedatensätze beibehalten wird ein Datensatz aus der erstellten Ausgabe entfernt, wenn für diesen Datensatz in der Eingabetabelle keine Entsprechung in der Join-Tabelle enthalten ist. Wenn die Eingabetabelle der Attributtabelle eines Layers entspricht, werden Features, die keine verbundenen Daten aufweisen, nicht auf der Karte angezeigt.

    EingabetabelleJoin-TabelleErgebnis

    Eingabefeld

    Typ

    Join-Feld

    Wert

    Eingabefeld

    Typ

    Join-Feld

    Wert

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

  • Wenn ein Eins-zu-Viele-Layer verwendet wird, dann aktualisiert das Werkzeug Feld berechnen den ersten gefundenen Datensatz und überspringt die restlichen doppelt vorhandenen Datensätzen. Wenn die Werte der verbundenen Layer-Felder manuell in der Tabellensicht bearbeitet werden, dann bleibt die zuletzt vorgenommene Änderung erhalten.

  • Feldeigenschaften, wie Aliasnamen, Sichtbarkeit und Zahlenformatierung, werden beim Hinzufügen oder Entfernen von Verbindungen beibehalten.

  • Die Verbindung besteht nur solange der Layer vorhanden ist. Ein Layer kann beibehalten werden, indem die ArcGIS AllSource-Sitzung gespeichert wird oder indem er unter Verwendung des Werkzeugs In Layer-Datei speichern in eine Layer-Datei gespeichert wird.

    Damit die Ergebnisse einer in einem Skriptwerkzeug erstellten Verbindung angezeigt werden können, muss das Werkzeug den Layer als abgeleiteten Ausgabeparameter enthalten. Dementsprechend muss der Parameter Aktualisierte Eingabe-Layer oder -Tabellensicht als abgeleiteter Ausgabeparameter in einem Modellwerkzeug festgelegt werden, um die verbundenen Ergebnisse anzuzeigen.

  • In der resultierenden Tabelle erhalten die Felder ein Präfix, das aus dem Namen der Eingabe und einem Punkt (.) besteht. Alle Felder aus der Join-Tabelle erhalten standardmäßig ein Präfix bestehend aus dem Namen der Join-Tabelle und einem Punkt.

    Beispiel: Sie verbinden den Layer "landuse", der die Felder A und B enthält, mit der Tabellensicht "lookup_tab", die die Felder C und D enthält. Der resultierende Layer bzw. die resultierende Tabellensicht enthält die Felder landuse.A, landuse.B, lookup_tab.C und lookup_tab.D.

  • Layer müssen eindeutige Feldnamen aufweisen. Wenn die Eingabe- und die Join-Tabelle denselben Namen haben und sich in verschiedenen Workspaces befinden, wird beim Herstellen der Verbindung ein unzureichend definierter Layer erzeugt.

  • Durch Indizieren des Eingabefeldes und Join-Feldes kann die Performance verbessert werden. Wenn der Parameter Join-Felder indizieren aktiviert ist, wird beiden Feldern ein Attributindex hinzugefügt. Alternativ können die einzelnen Verbindungsfelder mit dem Werkzeug Attributindex hinzufügen indiziert werden.

  • Wenn die Verbindungsergebnisse unerwartet oder unvollständig sind, dann überprüfen Sie, ob das Eingabefeld und das Join-Feld indiziert sind. Wenn die Felder nicht indiziert sind, dann versuchen Sie, einen Index hinzuzufügen. Wenn die Felder indiziert sind, dann versuchen Sie, den Index zu löschen und erneut hinzuzufügen, um Probleme mit dem Index zu beheben. Sie können aber auch den Parameter Indizes für Join-Felder neu erstellen aktivieren, um vorhandene Indizes zu entfernen und neu zu erstellen.

  • Wenn die Felder des Eingabe-Layers oder der Tabellensicht mit dem Parameter Feld-Info im Werkzeug Feature-Layer erstellen oder Tabellensicht erstellen geändert (umbenannt oder ausgeblendet) wurden, werden die Feldänderungen nicht in die Ausgabe des verbundenen Layers oder der verbundenen Tabellensicht eingebunden.

  • Die Definitionsabfrage der Join-Tabelle wird auf den Eingabe-Layer oder die Tabellensicht angewendet, indem eine neue aktive Abfrage hinzugefügt wird. Die vorherige Abfrage wird beibehalten und auf inaktiv gesetzt, sodass die Abfrage bei Bedarf von der verbundenen Tabelle aus deaktiviert werden kann. Die Definitionsabfrage kann mit dem Werkzeug Verbindung entfernen entfernt werden.

  • Wenn die Join-Tabelle eine Definitionsabfrage aufweist, hat der Parameter Alle Eingabedatensätze beibehalten keine Wirkung. Dies lässt sich möglicherweise korrigieren, indem durch manuelles Anhängen von or OBJECTID is null die Definitionsabfrage aktualisiert wird.

  • Mit dem Werkzeug Verbindung überprüfen kann eine Verbindung zwischen zwei Layern oder Tabellen überprüft werden, um zu bestimmen, ob die Layer oder Tabellen gültige Feldnamen und Objekt-ID-Felder enthalten, ob die Verbindung übereinstimmende Datensätze generiert, ob die Verbindung eine Eins-zu-Eins- oder Eins-zu-Viele-Verbindung ist, und um weitere Eigenschaften der Verbindung zu bestimmen.

    Aus Gründen der Benutzerfreundlichkeit ist im Dialogfeld des Werkzeugs eine Schaltfläche zum Überprüfen der Verbindung verfügbar.

  • Auswahlen in der Eingabe- oder der Join-Tabelle werden im Werkzeug Verbindung hinzufügen ignoriert. Das Werkzeug Feld verbinden unterstützt Auswahlen. Wenn die Verbindung nur mit einer ausgewählten Teilmenge erstellt werden soll, erstellen Sie einen Auswahl-Layer, und verwenden Sie ihn als Eingabe für das Werkzeug Verbindung hinzufügen. Die Eigenschaften eines Join-Layers werden kopiert, wenn Sie einen Auswahl-Layer erstellen.

Parameter

BeschriftungErläuterungDatentyp
Eingabetabelle

Der Layer oder die Tabellensicht, mit dem bzw. der die Join-Tabelle verbunden wird.

Mosaic Layer; Raster Layer; Table View
Eingabefeld

Das Feld im Eingabe-Layer oder der Tabellensicht, auf dem die Verbindung basiert.

Field
Join-Tabelle

Die Tabelle oder Tabellensicht, mit der der Eingabe-Layer oder die Tabellensicht verbunden werden soll.

Mosaic Layer; Raster Layer; Table View
Join-Feld

Das Feld in der Join-Tabelle, das die Werte enthält, auf denen die Verbindung basiert.

Field
Alle Eingabedatensätze beibehalten
(optional)

Gibt an, ob nur die Datensätze der Eingabe, die einem Datensatz in der Join-Tabelle entsprechen, in die Ausgabe übernommen werden.

  • Aktiviert – Alle Datensätze im Eingabe-Layer oder der Tabellensicht werden in die Ausgabe übernommen. Dies wird auch als "Outer Join" bezeichnet. Dies ist die Standardeinstellung.
  • Deaktiviert: Es werden nur die Datensätze der Eingabe, die einer Zeile in der Join-Tabelle entsprechen, in die Ausgabe übernommen. Dies wird auch als "Inner Join" bezeichnet.
Boolean
Join-Felder indizieren
(optional)

Gibt an, ob dem Eingabefeld und dem Join-Feld Indizes der Tabellenattribute hinzugefügt werden sollen.

  • Aktiviert: Beide Felder werden indiziert. Wenn ein Index für die Tabelle bereits vorhanden ist, wird kein neuer Index hinzugefügt.
  • Deaktiviert: Es werden keine Indizes hinzugefügt. Dies ist die Standardeinstellung.
Boolean
Indizes verbundener Felder neu erstellen
(optional)

Gibt an, ob die Indizes des Eingabefeldes und des Join-Feldes entfernt und neu erstellt werden sollen.

  • Aktiviert: Vorhandene Indizes werden entfernt, und ein neuer Index wird hinzugefügt.
  • Deaktiviert: Vorhandene Indizes werden weder entfernt noch neu erstellt. Dies ist die Standardeinstellung.
Boolean
Verbindungsvorgang
(optional)

Gibt an, ob die Verbindung eine Eins-zu-Viele-Verbindung oder eine Eins-zu-Erster-Verbindung sein soll, wenn die Daten eine Eins-zu-viele-Kardinalität aufweisen.

Wenn kein Parameter angegeben ist, dann basiert der Verbindungsvorgang auf der Datenquelle.

  • Eins-zu-Erster-VerbindungDer Verbindungsvorgang verwendet die erste Übereinstimmung.
  • Eins-zu-Viele-VerbindungDer Verbindungsvorgang sucht mehrmals nach Übereinstimmungen bei der Groß- und Kleinschreibung.
String

Abgeleitete Ausgabe

BeschriftungErläuterungDatentyp
Aktualisierte Eingabe-Layer oder -Tabellensicht

Das aktualisierte Eingabe-Dataset.

Table View; Raster Layer; Mosaic Layer

arcpy.management.AddJoin(in_layer_or_view, in_field, join_table, join_field, {join_type}, {index_join_fields}, {rebuild_index}, {join_operation})
NameErläuterungDatentyp
in_layer_or_view

Der Layer oder die Tabellensicht, mit dem bzw. der die Join-Tabelle verbunden wird.

Mosaic Layer; Raster Layer; Table View
in_field

Das Feld im Eingabe-Layer oder der Tabellensicht, auf dem die Verbindung basiert.

Field
join_table

Die Tabelle oder Tabellensicht, mit der der Eingabe-Layer oder die Tabellensicht verbunden werden soll.

Mosaic Layer; Raster Layer; Table View
join_field

Das Feld in der Join-Tabelle, das die Werte enthält, auf denen die Verbindung basiert.

Field
join_type
(optional)

Gibt an, ob nur die Datensätze der Eingabe, die einem Datensatz in der Join-Tabelle entsprechen, in die Ausgabe übernommen werden.

  • KEEP_ALLAlle Datensätze im Eingabe-Layer oder der Tabellensicht werden in die Ausgabe übernommen. Dies wird auch als "Outer Join" bezeichnet. Dies ist die Standardeinstellung.
  • KEEP_COMMONEs werden nur die Datensätze der Eingabe, die einer Zeile in der Join-Tabelle entsprechen, in die Ausgabe übernommen. Dies wird auch als "Inner Join" bezeichnet.
Boolean
index_join_fields
(optional)

Gibt an, ob dem Eingabefeld und dem Join-Feld Indizes der Tabellenattribute hinzugefügt werden sollen.

  • INDEX_JOIN_FIELDSBeide Felder werden indiziert. Wenn ein Index für die Tabelle bereits vorhanden ist, wird kein neuer Index hinzugefügt.
  • NO_INDEX_JOIN_FIELDSEs werden keine Indizes hinzugefügt. Dies ist die Standardeinstellung.
Boolean
rebuild_index
(optional)

Gibt an, ob die Indizes des Eingabefeldes und des Join-Feldes entfernt und neu erstellt werden sollen.

  • REBUILD_INDEXVorhandene Indizes werden entfernt, und ein neuer Index wird hinzugefügt.
  • NO_REBUILD_INDEXVorhandene Indizes werden weder entfernt noch neu erstellt. Dies ist die Standardeinstellung.
Boolean
join_operation
(optional)

Gibt an, ob die Verbindung eine Eins-zu-Viele-Verbindung oder eine Eins-zu-Erster-Verbindung sein soll, wenn die Daten eine Eins-zu-viele-Kardinalität aufweisen.

Wenn kein Parameter angegeben ist, dann basiert der Verbindungsvorgang auf der Datenquelle.

  • JOIN_ONE_TO_FIRSTDer Verbindungsvorgang verwendet die erste Übereinstimmung.
  • JOIN_ONE_TO_MANYDer Verbindungsvorgang sucht mehrmals nach Übereinstimmungen bei der Groß- und Kleinschreibung.
String

Abgeleitete Ausgabe

NameErläuterungDatentyp
out_layer_or_view

Das aktualisierte Eingabe-Dataset.

Table View; Raster Layer; Mosaic Layer

Codebeispiel

AddJoin: Beispiel 1 (Python-Fenster)

Das folgende Skript für das Python-Fenster veranschaulicht, wie die Funktion AddJoin im unmittelbaren Modus verwendet wird.

import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
veg_joined_table = arcpy.management.AddJoin("vegetation", "HOLLAND95", 
                                            "vegtable", "HOLLAND95")
arcpy.management.CopyFeatures(veg_joined_table, "vegjoin")
AddJoin: Beispiel 2 (eigenständiges Skript)

Dieses eigenständige Skript zeigt die Funktion AddJoin als Teil eines Workflow, um eine Tabelle mit einer Feature-Class zu verbinden und die angegebenen Features zu extrahieren.

# Name: AttributeSelection.py
# Purpose: Join a table to a feature class and select the desired attributes

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
# The qualifiedFieldNames environment is used by Copy Features when persisting 
# the join field names.
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"
expression = "vegtable.HABITAT = 1"
outFeature = "vegjoin"

# Join the feature layer to a table
veg_joined_table = arcpy.management.AddJoin(inFeatures, joinField, joinTable, 
                                            joinField)

# Select desired features from veg_layer
arcpy.management.SelectLayerByAttribute(veg_joined_table, "NEW_SELECTION", 
                                        expression)

# Copy the layer to a new permanent feature class
result = arcpy.management.CopyFeatures(veg_joined_table, outFeature)

# See field names and aliases
resultFields = arcpy.ListFields(result)
print([field.name for field in resultFields])
print([field.aliasName for field in resultFields])

Verwandte Themen