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. 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.
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 cree un gráfico de conocimiento utilizando un graph store alojado o un data store NoSQL con datos administrados por ArcGIS, siempre se espera que los valores de fecha-hora se proporcionen en hora universal coordinada (UTC). De forma similar, cuando una consulta devuelve los valores de fecha-hora, siempre se proporcionan como horas UTC. Es decir, los valores de fecha-hora almacenados en una propiedad de una entidad o relación no pueden asociarse con una zona horaria específica. Al proporcionar un valor, las fechas-horas se almacenan tal cual. Es decir, el gráfico de conocimiento no convierte automáticamente un valor proporcionado en hora local en UTC. Debe realizar usted mismo la conversión y almacenar el valor correcto para evitar problemas al consultar el gráfico de conocimiento posteriormente.
Por ejemplo, si los datos se recopilan sobre un evento específico, todos aquellos que editen el gráfico de conocimiento deben proporcionar valores de fecha-hora relacionados con ese evento como la hora UTC apropiada. Los editores que se encuentren en diferentes zonas horarias no deben proporcionar el valor de fecha-hora asociado con su zona horaria local. De forma similar, al consultar el gráfico de conocimiento, las consultas deben hacer referencia a la hora UTC apropiada asociada con el evento y no a la hora local para su zona horaria. De esta forma, todos almacenarán los valores correctos y serán capaces de consultar los valores correctos independientemente de su ubicación física y hora local.
Para consultar el gráfico de conocimiento utilizando valores almacenados en propiedades de fecha, debe utilizar la utilidad de datetime(), que interpreta el valor proporcionado como una fecha. Especifique el valor utilizando el formato de fecha-hora YYYY-MM-DDThh:mm:ss.sssZ para indicar que la fecha-hora proporcionada está en hora UTC. Utilice el formato de fecha-hora YYYY-MM-DDThh:mm:ss.sss+00:00 para indicar que la fecha proporcionada es una hora local con el desplazamiento de zona horaria apropiado. Debe proporcionarse un valor de fecha-hora completo en formato ISO con una zona horaria especificada. Si se omiten partes del valor de fecha-hora o si se omite la zona horaria, la consulta devuelve un error.
Por ejemplo, para encontrar todos los vehículos comprados después de una fecha-hora específica, 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.
En este momento, ArcGIS Knowledge no admite consultas de un gráfico de conocimiento utilizando un intervalo de tiempo o periodo de tiempo.
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 , haga clic en el botó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.