Zusammenfassung
Mit diesem Werkzeug wird eine SQL-Abfrage auf eine Datenbank angewendet, 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 Datenbankverbindung.
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.
Dieses Werkzeug ermöglicht die Bereitstellung einer Schlüsselfeldoption und einer Schlüsselfeldliste. Mit diesen Informationen kann die eindeutige Identifizierung von Zeilen definiert und den Daten ein dynamische ObjectID-Feld hinzugefügt werden. Ohne ein ObjectID-Feld wird eine Auswahl nicht unterstützt.
Mithilfe der Schlüsselfeldliste können Sie verschiedene Felder auswählen, wenn die Kombination dieser Felder erforderlich ist, um Werte eindeutig 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 Erstellen von Abfrageausdrücken oder SQL-Referenz für in ArcGIS verwendete Abfrageausdrücke .
Die Schaltfläche Feld hinzufügen in den Parametern Felder und Schlüsselfelder wird nur in ModelBuilder verwendet. Die Parameter Felder und Schlüsselfelder sind in ModelBuilder nicht mit Feldnamen belegt, wenn das vorherige Werkzeug nicht ausgeführt wurde oder die abgeleiteten Daten nicht vorhanden sind. Mit der Schaltfläche Feld hinzufügen können Sie die erwarteten Felder hinzufügen, damit Sie das Dialogfeld Abfragetabelle erstellen abschließen und mit der Erstellung Ihres Modells fortfahren können.
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. Dies ist die einzige Art der Abfrageoptimierung für die Verwendung von File-Geodatabase-Daten mit dem Werkzeug. Im Allgemeinen funktionieren Verbindungen in File-Geodatabases am besten bei Eins-zu-viele- und Eins-zu-eins-Verbindungen.
Syntax
MakeQueryTable_management (in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
Parameter | Erläuterung | Datentyp |
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 sollen. Die Eingabetabelle kann aus einer Geodatabase oder einer Datenbankverbindung stammen. | Table View; Raster Layer |
out_table | Der Name des/der vom Werkzeug erstellten Layers/Tabellensicht. | Table View; Raster Layer |
in_key_field_option | Layer und Tabellensichten in ArcGIS erfordern ein ObjektID-Feld. Ein Objekt-ID-Feld ist ein Feld mit einem ganzzahligen Wert zur eindeutigen Identifizierung von Zeilen in den verwendeten Daten. In diesem Werkzeug wird mit diesem Parameter angegeben, ob und wie ein ObjectID-Feld für die Abfrage erstellt wird. Die Standardeinstellung lautet Schlüsselfelder verwenden (USE_KEY_FIELDS in Python).
| String |
in_key_field [in_key_field,...] (optional) | Gibt ein Feld oder eine Kombination von Feldern an, die zur eindeutigen Identifizierung einer Zeile in der Abfrage verwendet werden können. Dieser Parameter wird nur verwendet, wenn USE_KEY_FIELDS festgelegt wurde. | Field |
in_field [[field, {alias}],...] (optional) | Die Felder, die in den Layer/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 im Python-Fenster veranschaulicht die Verwendung der Funktion MakeQueryTable im unmittelbaren Modus.
import arcpy
arcpy.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'")
MakeQueryTable – Beispiel 2 (eigenständiges Skript)
Das folgende Skript veranschaulicht beispielhaft die Nutzung des Werkzeugs 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.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")
Umgebungen
Lizenzinformationen
- ArcGIS Desktop Basic: Ja
- ArcGIS Desktop Standard: Ja
- ArcGIS Desktop Advanced: Ja