Skip To Content

Consultar un gráfico de conocimiento

Puede consultar un gráfico de conocimiento para buscar un subconjunto de entidades y relaciones que contiene e identificar cómo se conectan las distintas entidades. Los registros de procedencia se pueden utilizar y pueden incluirse en los resultados de la consulta. Vea los siguientes ejemplos:

  • A partir de un gráfico de conocimiento que representa la propagación de una enfermedad infecciosa, trabaje con personas y animales vinculados a través de cualquier tipo de relación con una determinada instalación.
  • A partir de un gráfico de conocimiento que representa una cadena de suministro industrial, trabaje con cualquier contenido asociado a una pieza específica, incluidos proveedores, medios de entrega, almacenes, etc.
  • A partir de un gráfico de conocimiento que representa una organización, trabaje con dispositivos de un tipo determinado y enumere sus propiedades, incluido el nombre del empleado responsable.
  • A partir de un gráfico de conocimiento que representa las tortugas y su hábitat, identifique los hábitats en los que el nivel de riego se estableció utilizando información en una evaluación de impacto ambiental concreta.

Puede identificar el subconjunto de entidades y relaciones, o sus propiedades, consultando el gráfico de conocimiento. Utilice el lenguaje de consulta de openCypher para escribir consultas openCypher y descubrir entidades relacionadas y sus propiedades y trabajar con este conjunto restringido de información en el gráfico de conocimiento, un mapa o un gráfico de vínculos.

Escriba una consulta openCypher

Las consultas de openCypher son para las consultas de gráficos lo que las consultas de SQL a las bases de datos relacionales. La estructura básica de la consulta es buscar, o conciliar, entidades y devolver esas entidades, donde las entidades que desea buscar se identifican entre paréntesis. Por ejemplo, la consulta MATCH (e) RETURN e devuelve entidades de cualquier tipo. El número de entidades devueltas solo está limitado por la configuración del gráfico de conocimiento. Para restringir el número de elementos de gráfico devueltos, utilice una expresión LIMIT. Por ejemplo, la consulta MATCH (e) RETURN e LIMIT 5 devolverá cinco entidades de cualquier tipo.

La consulta puede identificar entidades relacionadas mediante símbolos que crean una flecha. Por ejemplo, la consulta MATCH (e1)-->(e2) RETURN e1,e2 devolverá pares de entidades, e1 y e2, donde existe cualquier tipo de relación entre las dos entidades y cualquier ruta de la entidad e1 a la entidad e2 conecta las entidades. Si la consulta se escribió con la flecha que apunta en la otra dirección, las rutas se considerarían desde la entidad de origen e2 hasta la entidad de destino e1: MATCH (e1)<--(e2) RETURN e1,e2. La manera en que las entidades están relacionadas entre sí se conoce como un patrón.

La consulta puede identificar relaciones específicas que se deben considerar entre corchetes. Por ejemplo, la consulta MATCH (e1)-[]->(e2) RETURN e1,e2 devolverá pares de entidades, e1 y e2, donde una relación única de cualquier tipo conecta las dos entidades. Esta consulta muestra otra forma de representar las mismas consultas que se ilustran anteriormente e ilustra la sintaxis de consulta preferida. La consulta se puede modificar para devolver toda la tupla completa que describe la relación al devolver la entidad de origen, e1, la relación, r y la entidad de destino, e2, como sigue: MATCH (e1)-[r]->(e2) RETURN e1,r,e2. Una consulta similar MATCH (e1)-[ ]->( )-[ ]->(e2) RETURN e1,e2 o MATCH (e1)-[*2]->(e2) RETURN e1,e2 devolverá pares de entidades que están conectadas por dos relaciones en la misma dirección. Las consultas también pueden identificar patrones en los que las relaciones tienen diferentes direcciones como MATCH (e1)-[ ]->(e2)<-[ ]-(e3) RETURN e1,e2,e3.

Las consultas de ejemplo anteriores se pueden utilizar con cualquier gráfico de conocimiento.

Personalice una consulta a un gráfico de conocimiento específico haciendo referencia a los tipos de entidad, los tipos de relación y las propiedades definidos en su modelo de datos. Incluya el nombre de un tipo de entidad específico en su consulta para restringir los elementos del gráfico que se consideran. Por ejemplo, la consulta MATCH (e1:Person)-[r]->(e2) RETURN e1,r,e2 devolverá todas las entidades Persona, e1, en las que cualquier relación, r, conecta la persona a otro tipo de entidad, e2, que puede ser una entidad de cualquier tipo. En comparación con el ejemplo anterior, las relaciones en las que una entidad Mascota, Vehículo o Documento es el origen de una relación no se incluye en los resultados.

Puede restringir la consulta para considerar tipos de relaciones específicos y entidades relacionadas específicas agregando tipos de relación y tipos de entidad a las otras facetas de la consulta. Por ejemplo, MATCH (p:Person)-[v:HasVehicle]->(e) RETURN p,v,e devolverá todas las entidades de Persona, p, en las que una relación HasVehicle, v, conecta la persona a otra entidad de cualquier tipo, e. Las variables p y v se asignan a las entidades Persona y las relaciones HasVehicle, respectivamente, de modo que la consulta puede devolver la información sobre ellas. En comparación con el ejemplo anterior, las relaciones en las que una entidad Mascota o Documento son el destino de una relación no se incluyen en los resultados. Dependiendo del modelo de datos del gráfico de conocimiento, la entidad de destino, e, podría ser una entidad Vehículo genérica o puede ser uno de una serie de tipos de entidad específicos como Automóvil, Moto, Barco, Avión, Vehículo comercial, etc.

En los resultados de la consulta se pueden incluir propiedades específicas de entidades y relaciones. Por ejemplo, MATCH (p:Person)-[:HasVehicle]->(e) RETURN p,e.make,e.model,e.year ejecutará la misma consulta definida anteriormente. Sin embargo, en lugar de mostrar la propia entidad de destino, los resultados mostrarán los valores almacenados en varias de sus propiedades: la marca, el modelo y el año del vehículo, respectivamente. En este ejemplo, no se asignó una variable a la relación específica que la consulta tiene en cuenta porque los datos de la relación no se incluyen en los resultados de la consulta ni se evalúan en otro lugar de la consulta.

Del mismo modo, puede restringir las entidades y relaciones que se evalúan especificando propiedades que definen las entidades y relaciones de interés. Las propiedades que deben tenerse en cuenta se definen agregando una cláusula WHERE a la consulta. Al igual que con los ejemplos anteriores, se deben asignar variables para hacer referencia a información específica sobre entidades y relaciones en la cláusula WHERE. Por ejemplo, en la siguiente consulta, solo se evalúan las entidades Persona con un valor de propiedad lastName específico; las relaciones HasVehicle solo se consideran si tienen un valor NULL en la propiedad endDate y las entidades Vehículo relacionadas solo se consideran si la propiedad del año tiene un valor anterior a 1980: MATCH (p:Person)-[hv:HasVehicle]->(v:Vehicle) WHERE p.lastName = 'Doe' and hv.endDate IS NULL and v.year < 1980 RETURN p,p.firstName,v,v.make,v.year.

En lugar de devolver una serie de entidades y relaciones individuales, la consulta puede devolver la ruta completa representada por un patrón. Para ello, asigne el patrón definido en la cláusula MATCH a una variable y devuelva esa variable. Por ejemplo, la consulta MATCH path = (:Person)-[:HasVehicle]->(:Vehicle) RETURN path devolverá una lista de rutas para todas las combinaciones de entidades y relaciones que satisfagan el patrón especificado. Cada ruta contendrá todas las partes del patrón coincidente: Persona, relación HasVehicle y Vehículo. No es necesario asignar variables a las partes individuales de este patrón, ya que no las devuelve la consulta.

Utilizar valores de fecha-hora en una consulta

Cuando se crea un gráfico de conocimiento utilizando un graph store alojado o un data store NoSQL con datos administrados por ArcGIS, hay disponibles varias opciones para almacenar datos temporales con ArcGIS Enterprise 11.2 y las últimas versiones. Al almacenar y consultar datos temporales, debe considerar dónde se encuentran situados los eventos y dónde se encuentran situadas las personas que acceden a los datos.

Si está almacenando datos locales y utilizándolos en la misma área, la información de fecha y hora puede almacenarse sin preocuparse por la zona horaria. Estos datos pueden almacenarse en propiedades con el tipo de datos de fecha. Cuando se originan o se consultan los datos en diferentes zonas horarias, tenga cuidado de asegurarse de que se almacenen y consulten los valores correctos a pesar de su ubicación y zona horaria. Las propiedades con tipo de datos de desfase de marca de tiempo permiten registrar valores de fecha-hora que tienen en cuenta la zona horaria donde ocurrió el evento y la zona horaria donde se están utilizando los datos.

Puede acceder a los valores de fecha y hora almacenados en el gráfico de conocimiento utilizando una consulta de openCypher. Para obtener los resultados correctos, deben utilizarse funciones específicas para consultar propiedades de cada tipo de datos como se describe en la tabla siguiente. El uso de funciones alternativas puede dar lugar a un error o resultados inesperados. Cuando se proporcionan valores temporales o se devuelven con una consulta, siempre utilizarán el formato de fecha-tiempo de ISO 8601.

Tipo de campofunciónSintaxisEjemplo

Fecha

localdatetime()

localdatetime('YYYY-MM-DDThh:mm:ss.sss')

localdatetime('2015-07-24T21:40:53.142')

Solo fecha

date()

date('YYYY-MM-DD')

date('2015-07-24')

Solo hora

localtime()

localtime('hh:mm:ss.sss')

localtime('21:40:53.142')

Desfase de marca de tiempo

datetime()

datetime('YYYY-MM-DDThh:mm:ss.sssZ') o datetime('YYYY-MM-DDThh:mm:ss.sss+00:00')

datetime('2015-07-24T21:40:53.142Z') o datetime('2015-07-21T21:40:53.142-08:00')

Para evaluar una propiedad de gráfico de conocimiento con el tipo de datos de desfase de marca de tiempo, utilice la función de datetime() en su consulta de openCypher. Utilice el formato de fecha-hora YYYY-MM-DDThh:mm:ss.sssZ cuando el valor especificado está en hora universal coordinada (UTC). Utilice el formato YYYY-MM-DDThh:mm:ss.sss+00:00 cuando el valor sea una fecha en una hora local con el desfase de zona horaria apropiado. Si se omiten partes significativas del valor de fecha-hora cuando se proporciona el valor en la consulta, la consulta devuelve un error.

Por ejemplo, para encontrar todos los vehículos comprados después de un tiempo específico, utilice una consulta como por ejemplo MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE hv.acquisitionDate > datetime('2014-10-18T12:36-08:00') RETURN path. Todas las rutas se devuelven si la relación de HasVehicle tiene una propiedad de acquisitionDate con un valor después de las 12:36 pm Hora estándar del Pacífico el 18 de octubre de 2014; Hora estándar del Pacífico es ocho horas por detrás de UTC.

Para encontrar todos los vehículos comprados en el año 1998, utilice una consulta como por ejemplo MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE hv.acquisitionDate > datetime('1998-01-01T00:00Z') and hv.acquisitionDate < datetime('1998-12-31T23:59Z') RETURN path. Todas las rutas se devuelven si la relación de HasVehicle tiene una propiedad de acquisitionDate entre el 1 de enero y media noche del 31 de diciembre UTC en el año 1998.

Comenzando con ArcGIS Enterprise 11.3, una consulta de openCypher puede evaluar valores temporales en el gráfico de conocimiento utilizando duraciones de tiempo. Esto permite comprender diferencias de tiempo entre puntos de datos. Puede encontrar entidades y relaciones donde los eventos capturados en sus propiedades duran un periodo de tiempo determinado, o donde transcurre una cantidad determinada de tiempo entre eventos.

Cuando la consulta proporciona o devuelve una duración de tiempo, siempre utiliza el formato de duración de tiempo ISO 8601. Por ejemplo, una duración de P1Y2M3DT4H5M6S representa un intervalo de tiempo de un año, dos meses, tres días, cuatro horas, cinco minutos y seis segundos. Pueden omitirse porciones de la duración si su valor es cero. Por ejemplo, un periodo de tiempo de un día y medio puede representarse como P1DT12H o PT36H. Si la cadena de caracteres de duración incluye componentes de tiempo, el carácter T debe especificarse después de los componentes de fecha y antes de los componentes de tiempo.

Pueden utilizarse varias funciones de duración para calcular el periodo entre dos tiempos, como se describe a continuación. La duración puede calcularse en unidades específicas de tiempo, si fuera necesario.

  • duration.between(a, b)—La cantidad de tiempo transcurrido entre un tiempo a y un tiempo b. Se devuelve una duración de tiempo que especifica la cantidad completa de tiempo transcurrido en años, meses, días y así sucesivamente.
  • duration.inMonths(a, b)—La cantidad de tiempo transcurrido entre el tiempo a y el tiempo b se calcula como un número de meses completos y se devuelve como una duración de tiempo. Se descartan cantidades de tiempo menores que un mes completo.
  • duration.inDays(a, b)—La cantidad de tiempo transcurrido entre el tiempo a y el tiempo b se calcula como un número de días completos y se devuelve como una duración de tiempo. Se descartan cantidades de tiempo menores que un día completo.
  • duration.inSeconds(a, b)—La cantidad de tiempo transcurrido entre el tiempo a y el tiempo b se calcula como un número de segundos completos y se devuelve como una duración de tiempo. Se descartan cantidades de tiempo menores que un segundo completo.

Por ejemplo, para encontrar personas que vendieron un vehículo que tuvieron durante menos de dos años, utilice una consulta como por ejemplo MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE hv.endDate < (hv.acquisitionDate + duration('P2Y')) RETURN path, duration.between(hv.acquisitionDate,hv.endDate) as TimeOwned. Todas las rutas se devuelven si la relación de HasVehicle tiene una propiedad de endDate y la duración entre la propiedad endDate y acquisitionDate es menor de dos años. La consulta devuelve la ruta y la duración de tiempo que se tuvo el vehículo.

Al calcular una duración, puede especificar la fecha u hora actuales como uno de los dos instantes de tiempo proporcionando una función de fecha-hora en el lugar apropiado. Además, se puede acceder a porciones de la duración y devolverse o utilizarse en la consulta. El siguiente ejemplo identifica personas que compraron un vehículo hace más de cuatro años: MATCH path=(:Person)-[hv:HasVehicle]->(:Vehicle) WHERE duration.between(hv.acquisitionDate, datetime()).years > 4 RETURN path. La fecha-hora actual se utiliza en la consulta proporcionando la función datetime() sin proporcionar una fecha específica. Se accede y evalúa la parte de los años de la duración calculada para encontrar las rutas apropiadas. De esta manera se puede acceder a todas las partes de la duración, incluyendo los días, horas, minutos y así sucesivamente.

La duración también puede calcularse entre eventos que se producen entre partes relacionadas. Por ejemplo, la siguiente consulta evalúa un gráfico de conocimiento para determinar la relación entre las entidades de Teléfono y relaciones Llamadas y la cantidad de tiempo entre llamadas telefónicas: MATCH (:Phone)-[c1:Called]-(:Phone)-[c2:Called]-(:Phone) WHERE duration.between(c1.datecalled, c2.datecalled).minutes < 45 RETURN c1, c2. En esta consulta, se calcula una duración entre el tiempo que un teléfono recibe una llamada y realiza una segunda llamada. Se accede a la propiedad de minutos de la duración y si han transcurrido menos de cuarenta y cinco minutos entre las llamadas, la consulta devuelve tanto la primera como la segunda llamada telefónica.

Utilizar registros de procedencia en una consulta

Cuando se crea un gráfico de conocimiento utilizando un graph store alojado o un data store NoSQL con datos administrados por ArcGIS, es posible habilitar la procedencia. Los registros de procedencia permiten indicar dónde se originó el contenido del gráfico de conocimiento. Puede especificar que el valor almacenado en una propiedad de una entidad o relación se extraiga de un documento o sitio web concreto. Esta información puede utilizarse después al consultar el gráfico de conocimiento. Puede encontrar entidades y relaciones con valores de propiedad con origen en una fuente de información específica.

Los registros de procedencia se excluyen de todas las consultas de forma predeterminada. En ArcGIS Pro, debe activar la opción Incluir procedencia para aprovechar la información almacenada en los registros de procedencia en la consulta e incluir los registros de procedencia en los resultados de la consulta. Si crea una aplicación personalizada que se comunica con un sitio de ArcGIS Knowledge Server utilizando una de las API de desarrollador disponibles, su aplicación cliente debe especificar que los resultados de la consulta deben incluir los registros de procedencia.

La consulta debe determinar qué entidades y relaciones tienen propiedades asociadas con los registros de procedencia comparando los identificadores de instancias de los elementos del gráfico con los identificadores de instancias almacenados en los registros de procedencia. La consulta también puede evaluar las propiedades de los elementos del gráfico y los registros de procedencia para obtener resultados. En los resultados de la consulta se pueden incluir los registros de procedencia mismos o sus propiedades.

Por ejemplo, utilice una consulta como MATCH (p:Person)-[hv:HasVehicle]->(v:Vehicle), (pr:Provenance) WHERE ID(hv)=pr.instanceID and pr.sourceName ="California Department of Motor Vehicles" RETURN p,hv,v,pr para encontrar a los propietarios de todos los vehículos para los que el departamento de vehículos a motor de California es la fuente de información almacenada en las propiedades de la relación HasVehicle. La consulta evalúa qué relaciones HasVehicle tienen registros de procedencia comparando los identificadores de instancias de las relaciones con la propiedad instanceID de los registros de procedencia. Los registros de procedencia evaluados solamente son aquellos en los que la propiedad sourceName del registro tiene el valor apropiado. Además, en los resultados de la consulta también se incluyen las entidades Persona y Vehículo asociadas con las relaciones HasVehicle que se han encontrado y los registros de procedencia mismos.

Utilizar operadores espaciales en una consulta

ArcGIS Knowledge admite el uso de operadores espaciales en consultas de openCypher con geometrías de punto, multipunto, línea y polígono. Estos son los mismos tipos de geometría admitidos por tipos de entidad creados en un gráfico de conocimiento utilizando un graph store alojado o un data store NoSQL con datos administrados por ArcGIS. Si su gráfico de conocimiento utiliza un data store NoSQL con datos administrados por el usuario, pueden admitirse diferentes tipos de geometría.

Se admiten los siguientes operadores espaciales:

  • ST_Equals: devuelve entidades con geometrías iguales. La sintaxis es esri.graph.ST_Equals(geometry1, geometry2).
  • ST_Intersects: devuelve entidades con geometrías intersecantes. La sintaxis es esri.graph.ST_Intersects(geometry1, geometry2).
  • ST_Contains: devuelve entidades cuyas geometrías están contenidas por la geometría especificada. La sintaxis es esri.graph.ST_Contains(geometry1, geometry2).

Pueden incorporarse operadores espaciales en la cláusula WHERE de una consulta. Los parámetros de geometría pueden hacer referencia a la geometría de la entidad o puede especificar una geometría que representa una ubicación espacial. Puede construir una geometría desde una cadena utilizando el operador esri.graph.ST_WKTToGeometry(string), donde el parámetro de cadena es una entidad simple OGC especificada en el formato de texto bien conocido. Por ejemplo, para crear una geometría que representa las coordenadas 117.1964763°W 34.0572046°N, utilizaría el operador esri.graph.ST_WKTToGeometry("POINT (-117.1964763 34.0572046)"). Una geometría construida de esta manera solo puede especificarse en el primer argumento de la geometría para los operadores espaciales. El segundo argumento de la geometría siempre debe hacer referencia a la geometría asociada con una entidad en el gráfico de conocimiento.

Considere los siguientes ejemplos donde las entidades del tipo persona pueden tener geometrías de punto y entidades del tipo instalación pueden tener geometrías de polígono:

  • La consulta MATCH (p1:Person), (p2:Person) WHERE esri.graph.ST_Equals(p1.shape, p2.shape) RETURN p1, p2 devuelve entidades de persona p1 y entidades p2 con formas iguales; es decir, ambas entidades de persona tienen idénticas geometrías de ubicación.
  • La consulta MATCH (e:Employee), (f:Facility) WHERE esri.graph.ST_Intersects(e.shape, f.shape) RETURN e, f devuelve entidades de empleado y entidades de instalación, e y f, respectivamente, donde las geometrías para las entidades de empleado e instalación intersecan.
  • La consulta MATCH (f:Facility) WHERE esri.graph.ST_Contains(esri.graph.ST_WKTToGeometry("POINT (-117.1964763 34.0572046)"), f.shape) RETURN f devuelve entidades de instalación, f, cuyas geometrías contienen el punto especificado.

La utilidad espacial ST_GeoDistance también está disponible, que tiene la sintaxis esri.graph.ST_GeoDistance(geometry, geometry). Esta utilidad devuelve la distancia entre las dos geometrías. Por ejemplo, en la consulta MATCH (n), (e) WHERE esri.graph.ST_GeoDistance(n.shape, e.shape) as distance RETURN n, e, la variable de distancia en la cláusula WHERE almacena la distancia geodésica que se calcula entre las entidades n y e.

Más información sobre las consultas openCypher

Puede obtener más información sobre el lenguaje de consulta openCypher mediante un documento proporcionado por openCypher Implementers Group. ArcGIS Knowledge no es compatible con todos los aspectos del lenguaje de consulta openCypher Por ejemplo, las consultas no se pueden utilizar para actualizar el gráfico de conocimiento, solo para devolver valores.

En ArcGIS Pro, puede obtener información sobre openCypher viendo las consultas que recuperan los datos de un gráfico de conocimiento para crear histogramas. En el panel Buscar y filtrar, en la pestaña Histograma Histograma, haga clic en el botón Configuración Configuración y en Enviar consulta a la pestaña Consulta. La consulta utilizada para recuperar datos para el conjunto actual de histogramas aparece en el cuadro de texto Consulta.