Abfragetabelle erstellen (Datenmanagement)

Zusammenfassung

Wendet eine SQL-Abfrage auf eine Datenbank an, und die Ergebnisse werden in einem Layer oder einer Tabellensicht dargestellt. Die Abfrage kann verwendet werden, um mehrere Tabellen zu verbinden oder eine Teilmenge der Felder oder Zeilen aus den ursprünglichen Daten in der Datenbank zurückzugeben.

Dieses Werkzeug akzeptiert Daten aus einer Geodatabase oder einer OLE-DB-Verbindung.

Verwendung

  • Der vom Werkzeug erstellte Layer ist temporär und nur für die Dauer der Sitzung vorhanden, es sei denn, das Dokument wird gespeichert.

  • Alle Eingabe-Feature-Classes oder Tabellen müssen aus demselben Eingabe-Workspace stammen.

  • Wenn der Feldliste das Feld Shape hinzugefügt wird, ist das Ergebnis ein Layer. Andernfalls ist das Ergebnis eine Tabellensicht.

  • Wenn ein Layer ausgegeben wird, kann dieser mit dem Werkzeug In Layer-Datei speichern dauerhaft in einer Layer-Datei oder mit dem Werkzeug Features kopieren in einer Feature-Class gespeichert werden.

  • Die Felder im ausgegebenen Layer bzw. in der ausgegebenen Tabellensicht weisen dieselbe Reihenfolge auf wie die Felder in der Feldliste.

  • Sie haben die Möglichkeit, eine Schlüsselfeldoption und eine Schlüsselfeldliste anzugeben. Mit diesen Informationen kann die eindeutige Identifizierung von Zeilen definiert und den Daten ein dynamische Object ID-Feld hinzugefügt werden. Ohne ein Object ID-Feld wird eine Auswahl nicht unterstützt.

  • Sie können mehrere Felder aus der Schlüsselfeldliste auswählen, wenn eine Kombination der Felder erforderlich ist, um Einzelwerte zu definieren.

  • Wird ein SQL-Ausdruck verwendet, aber es werden keine passenden Datensätze zurückgegeben, bleibt die Ausgabe-Feature-Class leer.

  • Feature-Classes können miteinander verbunden werden. Hierfür darf die Feldliste jedoch höchstens ein Geometriefeld enthalten.

  • Weitere Informationen zur Syntax des Parameters Ausdruck finden Sie unter SQL-Modus.

  • Eingabetabellen aus einer File-Geodatabase werden im Allgemeinen in der im Parameter für die Eingabetabellen festgelegten Reihenfolge verbunden. Beispiel: Tabelle1 wird vor Tabelle2 aufgeführt. Tabelle2 wird mit Tabelle1 verbunden, indem eine Zeile aus Tabelle1 und anschließend alle übereinstimmenden Zeilen aus Tabelle2 abgerufen werden. Wenn dies jedoch bedeutet, dass Tabelle2 über ein nicht indiziertes Feld abgefragt wird und eine umgekehrte Reihenfolge dazu führen würde, dass Tabelle1 über ein indiziertes Feld abgefragt würde, wird die Reihenfolge der Tabellen umgekehrt, um die Performance zu verbessern. Bei der Verwendung von File-Geodatabase-Daten mit diesem Werkzeug wird nur diese Art der Abfrageoptimierung angewendet. Im Allgemeinen funktionieren Verbindungen in File-Geodatabases am besten bei Eins-zu-viele- oder Eins-zu-eins-Verbindungen.

Parameter

BeschriftungErläuterungDatentyp
Eingabetabellen

Der Name der in der Abfrage zu verwendenden Tabelle(n). Bei mehreren Tabellen können Sie mit dem Parameter Ausdruck definieren, wie die Tabellen verbunden werden.

Die Eingabetabelle kann aus einer Geodatabase oder einer Datenbankverbindung stammen.

Table View; Raster Layer
Tabellenname

Der Name des/der erstellten Layers/Tabellensicht.

Table View; Raster Layer
Schlüsselfeldoptionen

Gibt an, ob und wie ein Object ID-Feld für die Abfrage erstellt wird. Layer und Tabellensichten in ArcGIS erfordern ein Object ID-Feld. Ein Object ID-Feld ist ein ganzzahliges Feld, mit dem Zeilen in den verwendeten Daten eindeutig identifiziert werden.

  • Schlüsselfelder verwendenIm Parameter Schlüsselfelder angegebene Felder werden zur eindeutigen Identifizierung einer Zeile in der Ausgabetabelle verwendet. Hierbei kann es sich um ein einzelnes oder um mehrere Felder handeln, die bei Kombination eine Zeile in der Ausgabetabelle eindeutig identifizieren können. Wenn in der Schlüsselfeldliste keine Felder angegeben wurden, wird die Option Schlüsselfeld erstellen angewendet. Dies ist die Standardeinstellung.
  • Schlüsselfeld erstellenWenn keine Schlüsselfelder angegeben wurden, wird das Feld Object ID erstellt, das jede Zeile in der Ausgabetabelle eindeutig identifiziert.
  • Kein SchlüsselfeldEs wird kein Object ID-Feld generiert. Für die Tabellensicht wird eine Auswahl nicht unterstützt.
    Hinweis:

    Wenn bereits ein Object ID-Feld vorhanden ist, wird es verwendet, auch wenn diese Option ausgewählt wurde.

  • Schlüsselfelder verwendenIm Parameter in_key_field angegebene Felder werden zur eindeutigen Identifizierung einer Zeile in der Ausgabetabelle verwendet. Hierbei kann es sich um ein einzelnes oder um mehrere Felder handeln, die bei Kombination eine Zeile in der Ausgabetabelle eindeutig identifizieren können. Wenn in der Schlüsselfeldliste keine Felder angegeben wurden, wird die Option ADD VIRTUAL_KEY_FIELD angewendet.
  • Schlüsselfeld erstellenWenn keine Schlüsselfelder angegeben wurden, wird das Feld Object ID erstellt, das jede Zeile in der Ausgabetabelle eindeutig identifiziert.
  • Kein SchlüsselfeldEs wird kein Object ID-Feld generiert. Für die Tabellensicht wird eine Auswahl nicht unterstützt.
    Hinweis:

    Wenn bereits ein Object ID-Feld vorhanden ist, wird es verwendet, auch wenn diese Option ausgewählt wurde.

String
Schlüsselfelder
(optional)

Ein Feld oder eine Kombination von Felder, die zur eindeutigen Identifizierung einer Zeile in der Abfrage verwendet werden können. Dieser Parameter wird nur verwendet, wenn der Parameter Schlüsselfeldoptionen auf Schlüsselfelder verwenden festgelegt ist.

Field
Felder
(optional)

Die Felder, die in den Layer oder die Tabellensicht aufgenommen werden. Wenn ein Aliasname für ein Feld festgelegt wurde, wird dieser angezeigt. Wenn keine Felder angegeben wurden, werden alle Felder aus allen Tabellen aufgenommen. Wenn der Feldliste das Feld Shape hinzugefügt wird, ist das Ergebnis ein Layer. Andernfalls ist das Ergebnis eine Tabellensicht.

Value Table
Ausdruck
(optional)

Ein SQL-Ausdruck, mit dem eine Teilmenge der Datensätze ausgewählt wird.

SQL Expression

arcpy.management.MakeQueryTable(in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
NameErläuterungDatentyp
in_table
[in_table,...]

Der Name der in der Abfrage zu verwendenden Tabelle(n). Bei mehreren Tabellen können Sie mit dem Parameter where_clause definieren, wie die Tabellen verbunden werden.

Die Eingabetabelle kann aus einer Geodatabase oder einer Datenbankverbindung stammen.

Table View; Raster Layer
out_table

Der Name des/der erstellten Layers/Tabellensicht.

Table View; Raster Layer
in_key_field_option

Gibt an, ob und wie ein Object ID-Feld für die Abfrage erstellt wird. Layer und Tabellensichten in ArcGIS erfordern ein Object ID-Feld. Ein Object ID-Feld ist ein ganzzahliges Feld, mit dem Zeilen in den verwendeten Daten eindeutig identifiziert werden.

  • USE_KEY_FIELDSIm Parameter in_key_field angegebene Felder werden zur eindeutigen Identifizierung einer Zeile in der Ausgabetabelle verwendet. Hierbei kann es sich um ein einzelnes oder um mehrere Felder handeln, die bei Kombination eine Zeile in der Ausgabetabelle eindeutig identifizieren können. Wenn in der Schlüsselfeldliste keine Felder angegeben wurden, wird die Option ADD VIRTUAL_KEY_FIELD angewendet.
  • ADD_VIRTUAL_KEY_FIELDWenn keine Schlüsselfelder angegeben wurden, wird das Feld Object ID erstellt, das jede Zeile in der Ausgabetabelle eindeutig identifiziert.
  • NO_KEY_FIELDEs wird kein Object ID-Feld generiert. Für die Tabellensicht wird eine Auswahl nicht unterstützt.
    Hinweis:

    Wenn bereits ein Object ID-Feld vorhanden ist, wird es verwendet, auch wenn diese Option ausgewählt wurde.

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

Ein Feld oder eine Kombination von Felder, die zur eindeutigen Identifizierung einer Zeile in der Abfrage verwendet werden können. Dieser Parameter wird nur verwendet, wenn der Parameter in_key_field_option auf USE_KEY_FIELDS festgelegt ist.

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

Die Felder, die in den Layer oder die Tabellensicht aufgenommen werden. Wenn ein Aliasname für ein Feld festgelegt wurde, wird dieser angezeigt. Wenn keine Felder angegeben wurden, werden alle Felder aus allen Tabellen aufgenommen. Wenn der Feldliste das Feld Shape hinzugefügt wird, ist das Ergebnis ein Layer. Andernfalls ist das Ergebnis eine Tabellensicht.

Value Table
where_clause
(optional)

Ein SQL-Ausdruck, mit dem eine Teilmenge der Datensätze ausgewählt wird.

SQL Expression

Codebeispiel

MakeQueryTable – Beispiel 1 (Python-Fenster)

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

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'")
MakeQueryTable – Beispiel 2 (eigenständiges Skript)

Das folgende Skript veranschaulicht beispielhaft die Nutzung der Funktion MakeQueryTable in der Python-Skriptumgebung.

# 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")