He escrito este script que se repite a través de todas las clases de entidades en un conjunto dado de conjuntos de datos de entidades y elimina todas sus funciones. Parece que hace el trabajo pero funciona bastante lento. ¿Hay algo que estoy haciendo mal aquí o hay formas obvias de acelerar las cosas?
Estoy usando DeleteFeatures_management para hacer la escritura. DeleteRows_management también parece funcionar.
import sys
import os
import arcpy
from arcpy import env
import datetime
import getpass
try:
passwd = getpass.getpass("Enter the sde user password: ")
sdeConnectionFileDir = os.environ.get("TEMP")
databaseName = ""
fileName = "temp.sde"
# Delete any pre-existing SDE connection file.
fullPath = sdeConnectionFileDir + '\\' + fileName
if os.path.exists(fullPath):
os.remove(fullPath)
# Create temporary SDE connection file.
arcpy.CreateArcSDEConnectionFile_management (
sdeConnectionFileDir, fileName,
"sdeserver", "5151", "",
"DATABASE_AUTH", "my_sde_user", passwd,
"SAVE_USERNAME", "SDE.DEFAULT", "SAVE_VERSION"
)
env.workspace = fullPath
# ArcPy status codes.
returnCodes = {'WARN' : 0, 'INFO' : 1, 'ERROR' : 2}
featureDatasets = []
featureDatasets.extend(arcpy.ListDatasets("dataset1*"))
featureDatasets.extend(arcpy.ListDatasets("dataset2*"))
featureDatasets.extend(arcpy.ListDatasets("dataset3*"))
list = '[%s]' % ', '.join(map(str, featureDatasets))
response = raw_input("\n***** WARNING!!! ***** \nAll data will be deleted from all feature classess in the following datasets: \n\n" + list + "\n\n |--> Type DELETE to begin removal: ")
if response == "DELETE":
print "\nStarted: " + str(datetime.datetime.now()) + "\n"
for dataset in featureDatasets:
print "Processing dataset: " + dataset
for fc in arcpy.ListFeatureClasses("*", "ALL", dataset):
rowCount = int(arcpy.GetCount_management(fc).getOutput(0))
if rowCount > 0:
print " -- Processing feature class: " + str(fc) + " (" + str(rowCount) + " rows)"
#arcpy.DeleteRows_management(fc)
arcpy.DeleteFeatures_management(fc)
print "\nCompleted: " + str(datetime.datetime.now())
except Exception as e:
if arcpy:
arcpyErrors = arcpy.gp.getMessages(returnCodes['ERROR'])
if arcpyErrors:
sys.stderr.write(arcpyErrors + "\n")
sys.stderr.write(str(e) + "\n")
sys.exit(1)
EDITAR -
Puse algunos temporizadores de rendimiento en el script y aquí están los datos:
- Tiempo para recuperar conjuntos de datos: 0: 00: 01.254000
- Clases de características totales: 1682
- Total de clases de entidad con datos: 124
- Total de características procesadas: 190222
- Tiempo total de ejecución : 3 horas, 16 minutos
La caida:
Conjunto de datos de entidad -> lista de llamadas de clase de entidad:
* AVG 0:00:02
* MIN 0:00:01
* MAX 0:00:07
* COUNT 40
* TOTAL 0:01:08
Llamadas de recuento de funciones (la mayoría de las veces):
* AVG 0:00:06
* MIN 0:00:01
* MAX 0:00:16
* COUNT 1682
* TOTAL 2:41:00
Llamadas de eliminación de funciones (reducidas porque solo se procesan las clases de entidades con filas):
* AVG 0:00:17
* MIN 0:00:02
* MAX 0:03:22
* COUNT 124
* TOTAL 0:34:31
fuente
Si actualizar a ArcGIS 10.1 (ahora lanzado) es una opción, acabo de encontrar esto en el PDF de Novedades de ArcGIS 10.1:
Su ayuda en línea se puede encontrar aquí .
fuente
¿Por qué no simplemente eliminar los datasets de características con ellos mismos
arcpy.DeleteFeatures_management(dataset)
? Si aún necesita que exista el dataset de características, simplemente puede volver a crearlo después de que se haya eliminado.fuente