¿En qué medida se puede acceder al lenguaje SQL a través de las herramientas de ArcGIS?

10

Esa pregunta suena tan redundante ...
En cualquier caso, me han pedido que explore los usos de SQL en ArcGIS. Utilizamos una base de datos SDE para todo el almacenamiento del lado del servidor y la gestión de bases de datos / edición a gran escala. Sin embargo, estoy intentando profundizar en cuán integrado está SQL en las herramientas de ArcGIS. Hay una nota en la Guía de referencia de consultas SQL de la ayuda de ArcGIS 10 que establece claramente que la sintaxis SQL no funciona cuando se usa la herramienta Calculadora de campo. Esto me parece muy decepcionante, ya que parece muy útil poder extraer y destrozar información directamente de la base de datos al calcular los valores de campo.

¿Cuáles son las mayores limitaciones y dificultades en las que uno podría caer al intentar utilizar SQL en ArcGIS? ¿Qué herramientas ven la mejor funcionalidad cuando se integran con SQL?

Si se requiere un ejemplo para que esta sea una pregunta más clara, estoy tratando de rastrear el número de puntos de interés que son de cierto tipo en una región determinada. Cada punto tiene un atributo que describe su tipo y región. Mi solución actual implica el uso intensivo de cursores para el conteo y la recuperación de datos, pero un superior señaló que una simple consulta SQL podría hacer todo esto y más. Desafortunadamente, parece que la funcionalidad no está presente para esto.

¿O es eso?

Nathanus
fuente
¿Alguna de las tablas consultadas está versionada?
Michael Todd
Versionado? No creo que esté familiarizado con ese término.
Nathanus
1
El control de versiones de una capa le permite a uno hacer cambios en la capa mientras conserva las características anteriores. Entonces, si se elimina una característica, la versión actual de la capa muestra que la característica ya no existe; sin embargo, la característica todavía existe en la capa "base" y las herramientas SIG se pueden usar para ver diferentes versiones de la capa que muestran la característica. Puede saber si su capa está versionada haciendo clic derecho en la capa en ArcCatalog y seleccionando Propiedades. La parte inferior de la pestaña General tiene una sección llamada Control de versiones y la información aquí le dirá si la capa está versionada.
Michael Todd

Respuestas:

9

Si desea utilizar Python, eche un vistazo al comando ArcSDESQLExecute . Esto le permitirá ejecutar SQL arbitrario, pero debe estar conectado a través de SDE. Si el resultado de la consulta es un conjunto de filas, los atributos se devolverán como una lista de listas de Python. De lo contrario, devolverá True si el SQL se ejecutó correctamente o Ninguno si no. Ver también: Ejecutar SQL usando una conexión ArcSDE

blah238
fuente
Definitivamente voy a hacer eso! Esto parece justo lo que estaba buscando, en este contexto. Muchas gracias.
Nathanus
5

Si está escribiendo ArcObjects personalizados, puede ejecutar SQL arbitrario contra un espacio de trabajo SDE utilizando el método ExecuteSQL . Este método está limitado a consultas que no devuelven conjuntos de resultados, como INSERT, UPDATE o algunos procedimientos almacenados.

Si está trabajando a través de la interfaz de usuario de ArcMap, sus opciones son un poco más limitadas. La razón por la que no puede usar SQL a través de Calcular campo es porque la expresión es en realidad VBScript y / o Python. Podría usar VBScript o Python para ejecutar una expresión SQL arbitraria y extraer valores del cursor resultante, pero no lo recomendaría.

Alternativamente, puede usar la respuesta de Regan y crear una capa de consulta. Para datos de solo lectura, este es su mejor enfoque. Si necesita actualizar datos, es un poco más complicado. Deberá crear una capa de consulta con sus "nuevos" valores, realizar una unión con su tabla existente y luego usar los campos de cálculo. Esto podría combinarse con ExecuteSQL para realizar actualizaciones complejas y luego ver los resultados (algo torpe).

Su última alternativa es ejecutar SQL contra tablas de ArcSDE directamente.

James Schek
fuente
1
Su último punto (ejecutar SQL directamente en las tablas) fue por qué hice mi pregunta de control de versiones. Una consulta SQL a nivel de base de datos solo se extrae de la capa base (a menos que se configure una vista multiversionada), por lo que no funcionará si la capa está versionada.
Michael Todd
El trabajo que estoy haciendo es principalmente en Python, pero parece cada vez más que la funcionalidad real en la interfaz de usuario se basa en ArcObjects.
Nathanus
Todo está construido en ArcObjects internamente, incluida la funcionalidad de Python.
James Schek
si ArcSDESQLExecute en Python puede devolver resultados, ¿cómo se puede lograr lo mismo a través de IWorkspace.ExecuteSQL?
Petr Krebs
@petr no puedes directamente ... He actualizado mi respuesta.
James Schek
1

Dependiendo de qué RDBMS esté utilizando, puede aprovechar las bibliotecas SQL fuera de ArcObjects o arcpy, siempre y cuando no dependa de recuperar los datos de entidades. Muchas de las consultas en la base de datos de SQL Server que uso a diario no son de naturaleza espacial, por lo que usaré las clases System.Data dentro de .NET o la biblioteca pymssql Python dentro de las aplicaciones Python. Si requiere el uso de datos espaciales, entonces las capas de consulta son su mejor opción. La única advertencia con Capas de consulta es que solo funcionan con datos almacenados utilizando tipos de datos espaciales (no el tipo SDEBINARY estándar).

SagebrushGIS
fuente
Esto está empezando a ponerse intenso. Supongo que necesito evaluar más cuidadosamente mis necesidades. No necesitaré datos "espaciales", si con eso te refieres a cosas como los polígonos y los puntos / líneas, sino simplemente valores en campos de texto / entero.
Nathanus
Si necesita devolver tipos de geometría, entonces usaría el acceso a datos estándar ArcObjects / arcpy. Si todo lo que está haciendo es acceder a datos "tabulares" (sin tipos espaciales involucrados), simplemente realice las llamadas a la base de datos utilizando SqlConnections regulares (para SQL Server; su tipo de conexión puede variar). Los resultados son más flexibles que los que obtiene de ICursor. Sin embargo, si entiendo su pregunta, y está limitado a usar la calculadora de campo, entonces no podrá usar SQL sin formato.
SagebrushGIS