Leer datos
NamiDB implementa un subset estricto de openCypher 9 más GQL (ISO/IEC 39075:2024). Cada consulta LDBC SNB Interactive Complex Read (IC01 hasta IC12) parsea, planifica y se ejecuta de extremo a extremo sobre esta superficie, así que las cláusulas de lectura de abajo están bien ejercitadas en la práctica.
Para la cobertura exacta del parser y los gaps conocidos, consulta Subset soportado. Para el catálogo de operadores y funciones, ver Operadores y funciones.
MATCH
La cláusula básica de matching de patrones. Las variables en () bindean
nodos; las variables en [] bindean relaciones.
MATCH (p:Person)RETURN p.nameLos patrones pueden encadenarse a través de relaciones:
MATCH (a:Person)-[:KNOWS]->(b:Person)RETURN a.name AS a, b.name AS bMúltiples labels y predicados de propiedades inline:
MATCH (p:Person {name: 'Alice'})-[:KNOWS]->(friend:Person)WHERE friend.age >= 18RETURN friend.namePatrones de relación con longitud variable (acotada):
MATCH (a:Person {name: 'Alice'})-[:KNOWS*1..3]->(reach:Person)RETURN DISTINCT reach.nameWHERE
Filtra las filas bindeadas. Soporta operadores de comparación (=, <>,
<, <=, >, >=), operadores booleanos (AND, OR, NOT), IN,
IS NULL / IS NOT NULL, predicados sobre strings (STARTS WITH,
ENDS WITH, CONTAINS) y acceso a propiedades (n.prop).
MATCH (p:Person)WHERE p.age >= 18 AND p.country IN ['US', 'CA', 'MX'] AND p.name STARTS WITH 'A'RETURN p.name, p.ageWHERE puede aparecer después de MATCH, OPTIONAL MATCH o WITH. El
optimizador empuja los predicados hacia la capa de almacenamiento para
que bloom filters, fence pointers y el pruning de row groups de Parquet
puedan saltar trabajo.
OPTIONAL MATCH
Como MATCH, pero si el patrón falla en bindear, las columnas del patrón
opcional quedan en NULL en vez de descartar la fila. Semántica de left
join.
MATCH (p:Person)OPTIONAL MATCH (p)-[:OWNS]->(car:Car)RETURN p.name, car.modelWITH
Encadena resultados intermedios hacia la siguiente cláusula. Úsalo para
proyectar antes de encadenar otro MATCH, filtrar sobre una agregación,
o partir una consulta en etapas.
MATCH (p:Person)-[:KNOWS]->(friend)WITH p, count(friend) AS friend_countWHERE friend_count > 5RETURN p.name, friend_countORDER BY friend_count DESCRETURN
Proyecta las columnas finales. Soporta aliasing (AS), DISTINCT,
expresiones y agregaciones.
MATCH (p:Person)RETURN DISTINCT p.country AS country, count(*) AS nORDER BY n DESCLIMIT 10Formas comunes:
RETURN p -- nodo completoRETURN p.name, p.age -- propiedadesRETURN p.name AS name -- con aliasRETURN p.first_name + ' ' + p.last -- expresiónRETURN count(*) AS n -- agregaciónORDER BY, SKIP, LIMIT
Ordenamiento y paginación. Se encadenan sobre RETURN (o WITH).
MATCH (p:Person)RETURN p.name, p.ageORDER BY p.age DESCSKIP 20LIMIT 10Múltiples claves de ordenamiento, direcciones mixtas:
MATCH (p:Person)RETURN p.country, p.age, p.nameORDER BY p.country ASC, p.age DESCAgregaciones
El set estándar: count(*), count(expr), sum, avg, min, max,
collect.
MATCH (p:Person)-[:LIVES_IN]->(city:City)RETURN city.name AS city, count(p) AS people, avg(p.age) AS avg_ageORDER BY people DESCcollect(expr) acumula filas en una lista, útil para dar forma a la
salida:
MATCH (p:Person)-[:KNOWS]->(friend)RETURN p.name, collect(friend.name) AS friendsDISTINCT funciona dentro de las agregaciones:
MATCH (p:Person)-[:LIVES_IN]->(city:City)RETURN count(DISTINCT city) AS citiesEXISTS (subconsulta)
Verifica si un patrón existe, sin materializarlo. El optimizador decorrelaciona esto a un hash semi-join (RFC-014) para que se ejecute en una sola pasada.
MATCH (p:Person)WHERE EXISTS { MATCH (p)-[:KNOWS]->(:Person {country: 'MX'})}RETURN p.nameUNWIND
Expande una lista a filas. Útil para conectar datos externos (parámetros) dentro de un patrón.
UNWIND $names AS nameMATCH (p:Person {name: name})RETURN p.name, p.ageInspección del plan
Agrega EXPLAIN VERBOSE a cualquier consulta para ver el plan elegido,
las estimaciones de selectividad y las anotaciones de costo por operador:
namidb explain --verbose \ "MATCH (a:Person)-[:KNOWS]->(b) RETURN b ORDER BY b.id LIMIT 20"La inspección del plan toca el parser, el lowerer y el optimizador, pero no el almacenamiento, así que es seguro ejecutarla contra un namespace de producción sin I/O.
Consulta la página de la CLI para la referencia
completa de los flags de explain.
Siguientes pasos
- Escribir datos —
CREATE,MERGE,SET,DELETE. - Operadores y funciones — la referencia completa de operadores y funciones integradas.
- Subset soportado — la porción exacta de openCypher / GQL que NamiDB parsea.