Geoverarbeitung für ArcSDE-Daten – Überlegungen
Dynamische Erstellung von ArcSDE-Verbindungsdateien
ArcSDE-Verbindungsdateien können bei Bedarf mit dem Werkzeug ArcSDE-Verbindungsdatei erstellen erstellt werden. Mit diesem Werkzeug können Sie die Erstellung von ArcSDE-Verbindungsdateien automatisieren, statt Verbindungsdateien vor der Ausführung von Werkzeugen vorbereiten zu müssen, die auf ArcSDE-Daten zugreifen. Sie können die Verbindungseigenschaften aus jeder Quelle abrufen, z. B. einer Textdatei, einem kodierten XML-Stream oder einer sicheren Datenbank, und diese Eigenschaften an das Werkzeug ArcSDE-Verbindungsdatei erstellen übergeben, um die erforderliche ArcSDE-Verbindungsdatei zu erstellen. Nach dem Erstellen der Verbindungsdatei können Sie sie sofort mit dem Werkzeug Löschen oder dem entsprechenden Betriebssystembefehl löschen.
Geoverarbeitungsverlauf und Ergebnisse speichern alle Parameter, die an Werkzeuge übergeben werden. Da sich die Verbindungsinformationen in den Werkzeugparametern von ArcSDE-Verbindungsdatei erstellen befinden, werden diese auch gespeichert, außer wenn Sie die Verlaufsprotokollierung deaktivieren. Jedes Mal bei Ausführung eines System-, Modell- oder Skriptwerkzeugs wird ein Datensatz für die Ausführung in eine Verlaufsprotokolldatei geschrieben. Die Informationen in der Protokolldatei sind im Wesentlichen deckungsgleich mit den Informationen im Fenster Ergebnisse. Um zu verhindern, dass Verbindungsinformationen (Kennwort oder andere sichere Informationen in einem Parameter) im Verlaufsprotokoll oder Fenster Ergebnisse gespeichert werden, wenn das Werkzeug ArcSDE-Verbindungsdatei erstellen ausgeführt wird, deaktivieren Sie die Verlaufsprotokollierung. Details finden Sie unter Verlaufsprotokolldateien.
Performance von Geoverarbeitungswerkzeugen beim Verwenden von ArcSDE-Daten
Die Geoverarbeitung hat keine Kontrolle über die tatsächliche Performance des ArcSDE-Servers, der Geodatabase oder der Datenbank. Beim Verwenden von ArcSDE-Daten sind die richtige Optimierung der Datenbank und der Entwurf und die Implementierung der Anwendung mit der Datenbank (in diesem Fall ArcSDE und die Geodatabase) die wichtigsten Faktoren für maximale Performance. Es müssen bei der Verwendung von ArcSDE-Daten in Geoverarbeitungswerkzeugen jedoch einige Dinge berücksichtigt werden, um Probleme im Workflow zu verhindern, die sich auf die Performance Ihrer Werkzeuge und Workflows auswirken könnten.
Geoverarbeitungswerkzeuge umfassen meistens Datenerstellungs-/Ladevorgänge
Die meisten Geoverarbeitungswerkzeuge erstellen neue Daten. Größtenteils sollte die Geoverarbeitungsausgabe deshalb als Datenladevorgang gesehen werden, wenn es um das Senden der Werkzeugausgabe an ArcSDE geht. Es ist wichtig, alle Datenladevorgänge zu planen, sodass nicht die komplette Datenbank beeinträchtigt wird. Die meisten Datenbankadministratoren (und Benutzer) sind nicht sehr glücklich, wenn die Ausgabe des Werkzeugs Vereinigen (Union) 50 Millionen Datensätze enthält und morgens zur Stoßzeit von Netzwerk und Datenbank Daten in die ArcSDE-Datenbank geladen werden. Übermäßig große Datenladevorgänge können sich auf jeden Benutzer der Datenbank (in einigen Fällen Hunderte oder Tausende von Benutzern) sowie auf jeden Benutzer des Netzwerks auswirken, an den die Daten gesendet werden. Wenn die Eingaben für den Geoverarbeitungsvorgang sehr groß sind oder kombiniert werden (z. B. beim Verwenden der Overlay-Werkzeuge), um eine sehr große Ausgabe-Feature-Class zu erstellen, sollten Sie diese Ausgabe zu einem Zeitpunkt erstellen, an dem sich dies am wenigsten auf das Netzwerk und die Datenbanklast auswirkt.
In den meisten Fällen ist es möglicherweise vorteilhaft, dass die Werkzeuge die Ausgabe in einer File-Geodatabase erstellen. Nach der Validierung der Ausgabe in der File-Geodatabase können Sie die Daten in ArcSDE übertragen (zum Beispiel mit Features kopieren oder Feature-Class in Feature-Class), wenn dies geringe Auswirkungen auf die Netzwerk- und Datenbank-Performance hat.
Wann Daten NICHT in ArcSDE gespeichert werden sollten
Beim Ausführen von Modellen und Skripten, für die viele Schritte für eine finale Ausgabe erforderlich sind, werden Zwischendaten erstellt. Wenn sich die Daten in ArcSDE befinden und Sie auch alle Ihre Zwischendaten an ArcSDE senden, kann dies den Netzwerkverkehr/Konkurrenzbetrieb sowie die Last auf dem Datenbankserver unnötig erhöhen. Es wird empfohlen, dass alle Zwischendaten an eine File-Geodatabase gesendet werden, oder, im Fall von Simple-Feature-Classes, an eine Feature-Class im Arbeitsspeicher.
Wenn die Ausgabe der Analyse temporär oder nicht für alle freigegeben ist, speichern Sie sie nicht in ArcSDE. Einen Vergleich der anderen Geodatabase-Typen finden Sie unter Geodatabase-Typen.
Räumlicher Index für Geoverarbeitungswerkzeuge, die vorhandene Daten bearbeiten – Überlegungen
In ArcGIS werden räumliche Indizes verwendet, um Features in Feature-Classes schnell zu lokalisieren. Jedes Mal, wenn ein Feature eingefügt oder gelöscht wird, muss der räumliche Index aktualisiert werden. Wenn Sie eine neue Ausgabe erstellen, verzögert die Geoverarbeitung die Erstellung des räumlichen Index der neuen Feature-Classes, bis alle Daten geladen wurden. Bei der Bearbeitung vorhandener Feature-Classes gibt es zwei Optionen für die Aktualisierung des räumlichen Index. Sie können den räumlichen Index beibehalten und ihn nach jeder Änderung aktualisieren, oder Sie können den räumlichen Index vor der Durchführung der Änderungen entfernen und ihn einmal nach der Durchführung aller Änderungen aktualisieren.
Räumliche Indizes und Geoverarbeitungswerkzeuge
Mit einigen der Geoverarbeitungswerkzeuge können vorhandene Daten bearbeitet werden:
Bei der Verwendung von Geoverarbeitungswerkzeugen zur Bearbeitung vorhandener Daten ist die Umgebungseinstellung MaintainSpatialIndex verfügbar, um die Verwendung des räumlichen ArcSDE-Index beim Einfügen, Löschen und Aktualisieren (auch Änderungen genannt) zu kontrollieren. Es sind zwei Optionen verfügbar, die möglicherweise eine Verbesserung der Performance bei der Bearbeitung vorhandener Daten bieten. Sie können MaintainSpatialIndex auf "true" festlegen, um den räumlichen Index beizubehalten und ihn bei Änderungen automatisch mit ArcSDE zu aktualisieren. Oder Sie können sie auf "false" festlegen. Geoverarbeitungswerkzeuge, die vorhandene Daten ändern, löschen den räumlichen ArcSDE-Index dann, bevor Änderungen durchgeführt werden. Sie müssen den räumlichen Index nach der Durchführung aller Änderungen lesen.Räumliche Indizes beim Verwenden von Aktualisierungs- und Einfüge-Cursorn
Aktualisierungs- und Einfüge-Cursor können auch für vorhandene Daten verwendet werden. Bei der Verwendung von Aktualisierungs- und Einfüge-Cursorn zur Bearbeitung von Daten können Sie mit dem Werkzeug Räumlichen Index entfernen den räumlichen ArcSDE-Index vor Änderungen entfernen, die eine große Anzahl von Zeilen umfassen. Nach der Durchführung der Änderungen können Sie mit dem Werkzeug Räumlichen Index hinzufügen den räumlichen Index neu erstellen. Dies verbessert möglicherweise die Performance des Gesamtbearbeitungsvorgangs, wenn eine sehr große Anzahl von Zeilen bearbeitet wird. Informationen zu räumlichen Indizes finden Sie unter Überblick über räumliche Indizes in der Geodatabase.
ArcSDE-Datenrichtlinien beim Erstellen von Skripten
Relationale Datenbankmanagementsysteme (RDBMS), z. B. Oracle, SQL Server, IBM DB2 und PostgreSQL, erfordern vollständig qualifizierte Objektnamen, besonders, wenn sich die Daten, auf die Sie zugreifen, außerhalb des Schemas befinden. Die Verwendung vollständig qualifizierter Namen ermöglicht es Ihnen, den Namen eines Objekts eindeutig zu qualifizieren, damit das richtige Objekt (Feature-Class, relationale Tabelle, Tabelle usw.) verwendet wird. Beim vollständigen Qualifizieren eines Objektnamens weist jede Datenbank einen etwas anderen Standard auf. Schlagen Sie dies in der Datenbankdokumentation nach.
Verwenden des vollständig qualifizierten Tabellen- oder Feature-Class-Namens
Wenn ein nicht qualifizierter Tabellen- oder Feature-Class-Name an ein Werkzeug übergeben wird, qualifiziert die Geoverarbeitung den Namen automatisch mit dem aktuell verbundenen Benutzernamen des verbundenen Workspace, der mit der ArcSDE-Verbindungsdatei erstellt wurde. Wenn ein Skript auf Daten eines anderen Benutzers als des verbundenen Benutzers zugreifen muss, sollte es den Namen der Tabelle oder Feature-Class vollständig qualifizieren, um zu verhindern, dass das Geoverarbeitungswerkzeug ihn mit dem verbundenen Benutzer qualifiziert. Andernfalls tritt möglicherweise ein Fehler auf, oder das Werkzeug verwendet möglicherweise die falschen Daten.
Zeigt die Verwendung einer vollständig qualifizierten Feature-Class eines Benutzers, der nicht der verbundene Benutzer ist. Der Toolbox-Datenbankbenutzer muss über Auswahlberechtigungen für die Daten des Kartenbenutzers verfügen.
import arcpy # Create and ArcSDE connection file that connects as the toolbox database user arcpy.CreateArcSDEConnectionFile_management(r'C:\temp',r'toolboxuser.sde','gpserver','5151','',"DATABASE_AUTH",'toolbox','toolbox') # Perform a union operation using data owned by the connected user, toolbox, # and another feature class owned by the map database user. arcpy.Union_analysis(r'C:\temp\toolboxuser.sde\toolbox.states;C:\temp\toolboxuser.sde\map.counties',r'C:\temp\toolboxuser.sde\statesCountiesUnion')
Jede Datenbank handhabt die vollständige Qualifizierung eines Objekts anders. Informationen hierzu finden Sie in der DBMS-SQL-Dokumentation.
Verwenden vollständig qualifizierter Feldnamen
Felder sind auch Objekte in der Datenbank. Beim Zugriff auf Objekte eines anderen Benutzers als dem verbundenen Benutzer sollten Sie auf Felder mithilfe ihres vollständig qualifizierten Namens zugreifen. Bei der Erstellung einer komplexen SQL-Anweisung stellen vollständig qualifizierte Feldnamen sicher, dass der SQL-Code wie gewünscht funktioniert. Noch einmal: Jede Datenbank handhabt die vollständige Qualifizierung ihrer Objekte anders. Informationen hierzu finden Sie in der DBMS-SQL-Dokumentation.
Geoverarbeitung mit versionierten Daten
Die Geodatabase-Versionierung ist nur in Enterprise-Geodatabases verfügbar. Die Enterprise-Geodatabase ist ArcSDE. Geoverarbeitungswerkzeuge greifen auf zwei Arten auf versionierte Daten zu, abhängig davon, ob die ArcSDE-Daten als Dataset-Pfad oder Layer-Name übergeben werden.
Wenn Sie Feature-Classes verwenden, verwendet die Geoverarbeitung immer die Verbindungsinformationen in der Verbindungsdatei, die Teil des Pfads zur ArcSDE-Feature-Class ist, um die Feature-Class zu öffnen. Das bedeutet, dass Sie an die Version in den Verbindungseigenschaften der .sde-Datei gebunden sind, wenn Sie auf die Daten zugreifen.
Wenn Sie ArcMap Daten hinzufügen, werden die Daten als Feature-Layer oder Tabellenansichten dargestellt. Wenn ein Geoverarbeitungswerkzeug eine Eingabe als Feature-Layer oder Tabellenansicht identifiziert, öffnet es die Feature-Class nicht erneut in der ArcSDE-Verbindungsdatei mit den Verbindungseigenschaften. Stattdessen greift es auf die Feature-Class mithilfe des bereits geöffneten Workspace des Layers zu. Wenn Änderungen am Workspace durchgeführt wurden, z. B. auf welche Version der Workspace verweist, berücksichtigt das Werkzeug sie. Wenn Sie das Werkzeug Version ändern in ArcMap für ArcSDE-Daten im ArcMap-Inhaltsverzeichnis verwenden, verwendet das Geoverarbeitungswerkzeug die Version der Daten, mit der der Workspace verbunden ist, nachdem das Werkzeug Version ändern aufgerufen wurde.
Verwenden von versionierten Feature-Classes mit Geoverarbeitungswerkzeugen
Wenn Sie mit einem Pfad, der die ArcSDE-Verbindungsdatei (.sde) enthält, direkt in Geoverarbeitungswerkzeugen auf Feature-Classes zugreifen, verwalten Sie die Version, mit der die Feature-Classes verbunden sind, wie folgt:
- Verknüpfen Sie Ihre Feature-Classes mithilfe eines Pfads mit einer ArcSDE-Verbindungsdatei.
- Erstellen Sie mit dem Werkzeug Version erstellen eine neue Version. Wenn Sie auf diese Weise eine Version erstellen, ist die neue Version ein Child der Version in der Verbindungsdatei, die als Argument an das Werkzeug übergeben wird.
- Erstellen Sie mit dem Werkzeug ArcSDE-Verbindungsdatei erstellen eine neue Verbindungsdatei, und stellen Sie sicher, dass Sie die neu erstellte Version im Parameter "Version" des Werkzeugs verwenden.
- Greifen Sie mithilfe dieser neuen Verbindungsdatei auf die Feature-Class zu, während Sie mit der neuen Version verbunden sind.
- Um wieder die Feature-Class zu verwenden und mit der Parent-Version verbunden zu sein, verwenden Sie die ursprüngliche Verbindungsdatei.
Es ist hilfreich, die .sde-Dateien eindeutig zu benennen:
- Verwenden der Verbindungsparameter: gpserver5151toolboxVersion1.sde (Servername + Port + Benutzername + Version)
- Verwenden des Namens des GIS-Analysten, der die .sde-Datei verwendet: Ken.sde
- Benennen der .sde-Datei nach dem Projekt, für das sie verwendet wird: waterDeptJune2010Upgrade.sde
Egal, welche Namenskonvention Sie verwenden, stellen Sie sicher, dass der Dateiname verständlich ist und die Sicherheitsrichtlinien Ihrer Organisation erfüllt.
Python-Skript mit dem Workflow zum Verwenden von versionierten Feature-Classes
# VersionedFeatureClassExample.py # Description: Simple example showing how to access versioned feature classes in geoprocessing tools. # Author: ESRI # import system modules import arcpy import sys, os # Set variables sdeConnFilePath = sys.path[0] + os.sep + "sdeconnectionfiles" analysisVersion = "TOOLBOX.proposedStreets2k9" defaultVersionConnection = r'gpserver5151toolboxDEFAULT.sde' proposedStreetsVersion = r'gpserver5151toolboxproposedStreets2k9.sde' # Perform analysis on the Default version to determine current number of streams within 100 meters of streets. inputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams' selectFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street' outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'StreamsNearStreets' arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','') print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management(outputFC)) # Create an ArcSDE connection file for connecting to the proposedStreets2k9 version folderName = sdeConnFilePath fileName = proposedStreetsVersion serverName = "gpserver" serviceName = "5151" databaseName = "" authType = "DATABASE_AUTH" username = "toolbox" password = "toolbox" saveUserInfo = "SAVE_USERNAME" versionName = analysisVersion saveVersionInfo = "SAVE_VERSION" arcpy.CreateArcSDEConnectionFile_management (folderName, fileName, serverName, serviceName, databaseName, authType, username, password, saveUserInfo, versionName, saveVersionInfo) # Perform the same analysis on the proposedStreets2k9 version to see the effect of the proposed changes. inputFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams' selectFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street' outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'NewStreamsNearStreets' arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','') print "Streams projected to be within 100 Meters of streets after proposed street additions:" + str(arcpy.GetCount_management(outputFC))
Zugreifen auf versionierte Feature-Classes mit Feature-Layern/Tabellenansichten mit Geoverarbeitungswerkzeugen
Der Workflow zum Zugreifen auf versionierte Feature-Classes mit Feature-Layern oder Tabellenansichten ist wie folgt:
- Erstellen Sie mit dem Werkzeug Feature-Layer erstellen oder Tabellensicht erstellen einen Layer für alle Eingaben. Stellen Sie sicher, dass Sie die ArcSDE-Verbindungsdatei verwenden, die über die Parent-Version oder Startversion verfügt, die in der Eigenschaft "Version" der Verbindungsdatei angegeben ist.
- Verwenden Sie diese Layer in all Ihren Werkzeugen.
- Wenn Sie die Version ändern möchten, die Sie bearbeiten, verwenden Sie das Werkzeug Version ändern.
- Verwenden Sie weiterhin die Feature-Layer in den Werkzeugen. Die Geoverarbeitung berücksichtigt die Version, auf die der geöffnete Workspace zeigt, nachdem das Werkzeug Version ändern aufgerufen wurde.
- Verwenden Sie das Werkzeug Version ändern wie für das Projekt erforderlich, um zu anderen Versionen zu wechseln und eine Analyse auszuführen.
Python-Skript mit dem Workflow zum Verwenden von versionierten Feature-Layern
# VersionedFeatureLayersExample.py # Description: Simple example showing how to access versioned feature classes using layers. # Author: ESRI # import system modules import arcpy from arcpy import env import sys, os # Set Environments env.workspace = sys.path[0] + os.sep + "gpserver5151toolboxDEFAULT.sde" # Create the layers arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.street', 'RedlandsStreets') arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.streams', 'RedlandsStreams') # Perform analysis on the Default version to determine current number of streams within 100 meters of streets. arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'StreamsNearStreets','','','') print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management("StreamsNearStreets")) # Change to the development version arcpy.ChangeVersion_management('RedlandsStreets','TRANSACTIONAL', 'TOOLBOX.proposedStreets2k9','') # Perform the same analysis on the development version to see the effect of the proposed changes. arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'NewStreamsNearStreets','','','') print "Streams projected to be within 100 Meters of streets after proposed street additions: " + str(arcpy.GetCount_management("NewStreamsNearStreets"))
ArcSDE-Daten und gemeinsame Nutzung von Werkzeugen
Nutzen Sie Werkzeuge im Netzwerk oder in Geoverarbeitungs-Services in einer ToolShare-Ordnerstruktur gemeinsam, wie unten dargestellt. Die erforderliche ArcSDE-Verbindungsdatei wird zusammen mit beliebigen anderen Daten, die für die erfolgreiche Ausführung des Werkzeugs erforderlich sind, in den Ordner "ToolData" kopiert oder dort erstellt.
Von Ihnen entwickelte Modell- und Skriptwerkzeuge sollten erstellt werden, um auf die ArcSDE-Verbindungsdatei mit einem relativen Pfad zur Verbindungsdatei zugreifen zu können, die sich im Ordner "ToolData" befindet.
Eine andere Methode ist, die ArcSDE-Verbindungsdatei im Netzwerk zu speichern. Das Werkzeug greift dann auf diese ArcSDE-Verbindungsdatei mithilfe eines UNC-Pfads zu.
Sie haben möglicherweise bemerkt, dass sich dies nicht maßgeblich von der Freigabe anderer Geodatabase-Daten unterscheidet, z. B. File-Geodatabase-Daten. Für File-Geodatabases müssen Sie auch den File-Geodatabase-Ordner (siehe Bereitstellung der ArcSDE-Verbindungsdatei) zusammen mit den Werkzeugen bereitstellen oder Zugriff auf die File-Geodatabase im Netzwerk und für die Werkzeuge auf die Daten mit UNC-Pfaden ermöglichen.
Weitere Informationen zur gemeinsamen Nutzung von Werkzeugen