Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conformidad con la especificación de openCypher en Amazon Neptune
La versión de openCypher de Amazon Neptune suele admitir las cláusulas, los operadores, las expresiones, las funciones y la sintaxis que se definen en la especificación de openCypher actual, que es Cypher Query Language Reference Version 9
Amazon Neptune también admite varias características que van más allá del alcance de la especificación de openCypher. Consulte Extensiones de openCypher en Amazon Neptune para obtener más información.
nota
La implementación actual de Neo4j de Cypher contiene una funcionalidad que no está incluida en la especificación de openCypher mencionada anteriormente. Si va a migrar el código de Cypher actual a Neptune, consulte Compatibilidad de Neptune con Neo4j y Reescritura de consultas de Cypher para ejecutarlas en openCypher en Neptune para obtener más información.
Compatibilidad con las cláusulas de openCypher en Neptune
Neptune admite las siguientes cláusulas, salvo que se indique lo contrario:
MATCH: se admite, peroyshortestPath()no se admiten en este momento.allShortestPaths()OPTIONAL MATCH: no se admite en este momento en Neptune. Sin embargo, Neptune admite valores de ID personalizados en las consultasMANDATORY MATCHMATCH.-
RETURN: se admite, excepto cuando se utiliza con valores no estáticos paraSKIPoLIMIT. Por ejemplo, lo siguiente no funciona actualmente:MATCH (n) RETURN n LIMIT toInteger(rand()) // Does NOT work! -
WITH: se admite, excepto cuando se utiliza con valores no estáticos paraSKIPoLIMIT. Por ejemplo, lo siguiente no funciona actualmente:MATCH (n) WITH n SKIP toInteger(rand()) WITH count() AS count RETURN count > 0 AS nonEmpty // Does NOT work! UNWINDWHEREORDER BYSKIPLIMITCREATE: Neptune permite crear valores de identificadores personalizados en las consultasCREATE.DELETESETREMOVEMERGE: Neptune admite valores de identificadores personalizados en las consultasMERGE.: no se admite en este momento en Neptune.CALL[YIELD...]UNION, UNION ALL: se admiten consultas de solo lectura, pero actualmente no se admiten consultas de mutación.-
USING:USINGes compatible con la versión 1.3.2.0 del motor. Para obtener más información, consulte Sugerencias de consulta.
Compatibilidad con las operadores de openCypher en Neptune
Neptune admite los siguientes operadores, salvo que se indique lo contrario:
Operadores generales
DISTINCTEl operador
.para acceder a las propiedades de un mapa literal anidado.
Operadores matemáticos
El operador de suma
+.El operador de resta
-.El operador de multiplicación
*.El operador de división
/.El operador de división de módulo
%.El operador de
^exponenciación.is NOT supported
Operadores de comparación
El operador de suma
=.El operador de desigualdad
<>.Se admite el operador menor que
<, excepto cuando alguno de los argumentos es una ruta, una lista o un mapa.Se admite el operador mayor que
>, excepto cuando alguno de los argumentos es una ruta, una lista o un mapa.Se admite el operador
<=less-than-or-equal -to excepto cuando alguno de los argumentos es una ruta, una lista o un mapa.Se admite el operador
>=greater-than-or-equal -to excepto cuando alguno de los argumentos es una ruta, una lista o un mapa.IS NULLIS NOT NULLSTARTS WITHse admite si los datos que se buscan son una cadena.ENDS WITHse admite si los datos que se buscan son una cadena.CONTAINSse admite si los datos que se buscan son una cadena.
Operadores booleanos
ANDORXORNOT
Operadores de cadena
El operador de concatenación
+.
Operadores de lista
El operador de concatenación
+.IN(comprueba la presencia de un elemento en una lista)
Compatibilidad con expresiones de openCypher en Neptune
Neptune admite las siguientes expresiones, salvo que se indique lo contrario:
CASE-
La expresión
[]no se admite actualmente en Neptune para acceder a claves de propiedad calculadas dinámicamente dentro de un nodo, una relación o un mapa. Por ejemplo, lo siguiente no funciona:MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name
Compatibilidad con las funciones de openCypher en Neptune
Neptune admite las siguientes funciones, salvo que se indique lo contrario:
Funciones de predicados
exists()
Funciones escalares
coalesce()endNode()epochmillis()head()id()last()length()randomUUID()properties()removeKeyFromMapsize(): este método sobrecargado solo funciona actualmente para expresiones de patrones, listas y cadenasstartNode()timestamp()toBoolean()toFloat()toInteger()type()
Funciones de agregación
avg()collect()count()max()min()percentileDisc()stDev()percentileCont()stDevP()sum()
Lista de funciones
join() (concatena las cadenas de una lista en una sola cadena)
keys()labels()nodes()range()relationships()reverse()tail()
Funciones matemáticas: numéricas
abs()ceil()floor()rand()round()sign()
Funciones matemáticas: logarítmicas
e()exp()log()log10()sqrt()
Funciones matemáticas: trigonométricas
acos()asin()atan()atan2()cos()cot()degrees()pi()radians()sin()tan()
Funciones de cadena
join() (concatena las cadenas de una lista en una sola cadena)
left()lTrim()replace()reverse()right()rTrim()split()substring()toLower()toString()toUpper()trim()
Funciones definidas por el usuario
User-defined functionsactualmente no son compatibles con Neptune.
Detalles de la implementación de openCypher específica de Neptune
En las siguientes secciones, se describen las formas en las que la implementación de openCypher de Neptune puede diferir o ir más allá de las especificaciones de openCypher
Evaluaciones de la ruta de longitud variable (VLP) en Neptune
Las evaluaciones de rutas de longitud variable (VLP) detectan rutas entre nodos en el gráfico. La longitud de la ruta no puede estar restringida en una consulta. Para evitar ciclos, en la especificación de openCypher
Pues VLPs, la implementación de Neptune se desvía de la especificación OpenCypher en el sentido de que solo admite valores constantes para los filtros de igualdad de propiedades. Tomemos como ejemplo la siguiente consulta:
MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y
Dado que el valor del filtro de igualdad de la propiedad x.name no es una constante, esta consulta da como resultado una UnsupportedOperationException con el mensaje: Property predicate over variable-length relationships with non-constant
expression is not supported in this release.
Compatibilidad temporal en la implementación de openCypher de Neptune (Neptune Database 1.3.1.0 y anteriores)
Actualmente, Neptune proporciona una compatibilidad limitada con la función temporal en openCypher. Admite el tipo de datos DateTime para los tipos temporales.
La función datetime() se puede utilizar para obtener la fecha y hora UTC actuales de la siguiente manera:
RETURN datetime() as res
Los valores de fecha y hora se pueden analizar a partir de cadenas en un formato de "fechaThora" en el que la fecha y la hora se expresan en uno de los formatos admitidos que se indican a continuación:
Formatos de fecha admitidos
yyyy-MM-ddyyyyMMddyyyy-MMyyyy-DDDyyyyDDDyyyy
Formatos de tiempo admitidos
HH:mm:ssZHHmmssZHH:mm:ssZHH:mmZHHmmZHHZHHmmssHH:mm:ssHH:mmHHmmHH
Por ejemplo:
RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')
Tenga en cuenta que todos date/time los valores de Neptune OpenCypher se almacenan y recuperan como valores UTC.
openCypher de Neptune usa un reloj statement, lo que significa que se usa el mismo instante en el tiempo durante toda la consulta. Una consulta diferente dentro de la misma transacción podría utilizar un instante diferente en el tiempo.
Neptune no admite el uso de una función en una llamada a datetime(). Por ejemplo, lo siguiente no funciona:
CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!
Neptune admite la función epochmillis() que convierte una datetime en epochmillis. Por ejemplo:
MATCH (n) RETURN epochMillis(n.someDateTime) 1698972364782
Neptune no admite actualmente otras funciones y operaciones en objetos DateTime, como la suma y la resta.
Compatibilidad temporal en la implementación de openCypher con Neptune (Neptune Analytics y Neptune Database 1.3.2.0 y posteriores)
La siguiente funcionalidad de fecha y hora OpenCypher se aplica a Neptune Analytics. Como alternativa, puede usar el parámetro de modo de laboratorio DatetimeMillisecond=enabled para habilitar la siguiente funcionalidad de fecha y hora en la versión 1.3.2.0 y posteriores del motor de Neptune. Para obtener más información sobre el uso de esta funcionalidad en modo de laboratorio, consulte Compatibilidad ampliada con fecha y hora.
-
Compatibilidad con milisegundos. El literal de fecha y hora siempre se devolverá con milisegundos, incluso si los milisegundos son 0. (El comportamiento anterior consistía en truncar los milisegundos).
CREATE (:event {time: datetime('2024-04-01T23:59:59Z')}) # Returning the date returns with 000 suffixed representing milliseconds MATCH(n:event) RETURN n.time as datetime { "results" : [ { "n" : { "~id" : "0fe88f7f-a9d9-470a-bbf2-fd6dd5bf1a7d", "~entityType" : "node", "~labels" : [ "event" ], "~properties" : { "time" : "2024-04-01T23:59:59.000Z" } } } ] } -
Compatibilidad con la llamada a la función datetime() sobre propiedades almacenadas o resultados intermedios. Por ejemplo, las siguientes consultas no eran posibles antes de esta característica.
Datetime() sobre propiedades:
// Create node with property 'time' stored as string CREATE (:event {time: '2024-04-01T23:59:59Z'}) // Match and return this property as datetime MATCH(n:event) RETURN datetime(n.time) as datetimeDatetime() sobre resultados intermedios:
// Parse datetime from parameter UNWIND $list as myDate RETURN datetime(myDate) as d -
Ahora también es posible guardar propiedades de fecha y hora creadas en los casos mencionados anteriormente.
Guardar la fecha y hora de la propiedad de cadena de una propiedad a otra:
// Create node with property 'time' stored as string CREATE (:event {time: '2024-04-01T23:59:59Z', name: 'crash'}) // Match and update the same property to datetime type MATCH(n:event {name: 'crash'}) SET n.time = datetime(n.time) // Match and update another node's property MATCH(e:event {name: 'crash'}) MATCH(n:server {name: e.servername}) SET n.time = datetime(e.time)Crear nodos por lotes a partir de un parámetro con una propiedad de fecha y hora:
// Batch create from parameter UNWIND $list as events CREATE (n:crash) {time: datetime(events.time)} // Parameter value { "x":[ {"time":"2024-01-01T23:59:29", "name":"crash1"}, {"time":"2023-01-01T00:00:00Z", "name":"crash2"} ] } -
Support para un subconjunto mayor de ISO86 10 formatos de fecha y hora. Consulte a continuación.
Formatos admitidos
El formato de un valor de fecha y hora es [Fecha]T[Hora][Zona horaria], donde T es el separador. Si no se proporciona una zona horaria de forma explícita, se asume que UTC (Z) es la predeterminada.
Timezone
Los formatos de zona horaria admitidos son:
-
+/-HH:mm
-
+/-HHmm
-
+/-HH
La presencia de una zona horaria en una cadena de fecha y hora es opcional. En caso de que la diferencia de zona horaria sea 0, se puede usar Z en lugar del sufijo de zona horaria anterior para indicar la hora UTC. El rango admitido de una zona horaria es de -14:00 a +14:00.
Date
Si no hay ninguna zona horaria o la zona horaria es UTC (Z), los formatos de fecha admitidos son los siguientes:
nota
DDD hace referencia a una fecha ordinal, que representa un día del año comprendido entre 001 y 365 (366 en los años bisiestos). Por ejemplo, 2024-002 representa el 2 de enero de 2024.
yyyy-MM-ddyyyyMMddyyyy-MMyyyyMMyyyy-DDDyyyyDDDyyyy
Si se elige una zona horaria distinta de la Z, los formatos de fecha admitidos se limitan a los siguientes:
yyyy-MM-ddyyyy-DDDyyyyDDD
El rango de fechas admitido es del 1 de enero de 1400 al 31 de enero de 9999.
Time
Si no hay ninguna zona horaria o la zona horaria es UTC (Z), los formatos de hora admitidos son:
HH:mm:ss.SSSHH:mm:ssHHmmss.SSSHHmmssHH:mmHHmmHH
Si se elige una zona horaria distinta de la Z, los formatos de hora admitidos se limitan a los siguientes:
HH:mm:ssHH:mm:ss.SSS
Diferencias en la semántica del lenguaje openCypher de Neptune
Neptune representa el nodo y la relación IDs como cadenas en lugar de números enteros. El identificador es igual al identificador proporcionado a través del programa de carga de datos. Si hay un espacio de nombres para la columna, se utiliza el espacio de nombres más el identificador. En consecuencia, la función id devuelve una cadena en lugar de un número entero.
El tipo de datos INTEGER está limitado a 64 bits. Al convertir valores de cadena o coma flotante más grandes en un número entero mediante la función TOINTEGER, los valores negativos se truncan a LLONG_MIN y los valores positivos se truncan a LLONG_MAX.
Por ejemplo:
RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808
Propiedades de varios valores
Aunque CREATE de openCypher no crea propiedades con varios valores, sí que pueden existir en los datos creados con Gremlin (Neptune Database) o al cargar datos (Neptune Database y Neptune Analytics). Si openCypher de Neptune encuentra una propiedad con varios valores, uno de los valores se elige arbitrariamente, lo que da lugar a un resultado no determinista.
Gestión de valores NaN
La gestión que Neptune hace de la comparación de valores de propiedad NaN no está definida. Basarse en tales comparaciones puede dar lugar a resultados inesperados o no deterministas.