Compartir vía


¿Cuál es el lenguaje de consulta en Cosmos DB (en Azure y Fabric)

El lenguaje de consulta proporciona una sintaxis eficaz similar a SQL para trabajar con datos JSON. Este lenguaje está diseñado para familiarizarse con los usuarios con experiencia de SQL, a la vez que admite la flexibilidad y la naturaleza jerárquica de los documentos JSON. En este artículo se presentan los conceptos básicos, la sintaxis y las características del lenguaje de consulta.

Conceptos básicos del lenguaje de consulta

El lenguaje de consulta se crea para proporcionar acceso expresivo y eficaz a los datos almacenados como documentos JSON. En su base, el lenguaje está diseñado para trabajar de forma nativa con datos jerárquicos y flexibles, que admiten consultas simples y complejas sobre documentos que podrían tener estructuras variables.

Las consultas se componen mediante una sintaxis conocida de tipo SQL, pero se adaptan al modelo de documento. Esta adaptación significa que, a diferencia de las bases de datos relacionales tradicionales, no hay ningún esquema fijo: las propiedades pueden faltar o tener tipos diferentes en los documentos. El lenguaje distingue mayúsculas de minúsculas y admite la referencia a propiedades anidadas, matrices y objetos directamente dentro de las consultas. Los operadores lógicos, de comparación y aritméticos están disponibles, y el lenguaje está diseñado para ser intuitivo para los desarrolladores con experiencia de SQL, al tiempo que adopta la flexibilidad de los datos NoSQL.

El motor de consultas está optimizado para un alto rendimiento y escalabilidad, mediante el uso automático de índices para filtrar, ordenar y agregar datos de forma eficaz. Admite una amplia gama de patrones de consulta, desde búsquedas simples hasta agregaciones complejas y subconsultas. Esta compatibilidad hace que el motor de consultas sea adecuado para cargas de trabajo transaccionales y analíticas. El lenguaje también proporciona construcciones para trabajar con matrices, controlar valores NULL y sin definir y proyectar los resultados en formas JSON flexibles. Estas construcciones permiten a los desarrolladores recuperar exactamente los datos que necesitan en el formato requerido por sus aplicaciones.

Estructura de consulta básica

Una consulta típica consta de las siguientes cláusulas:

  • SELECT: especifica qué campos o valores se van a devolver.
  • FROM: identifica el contenedor de origen y puede asignar un alias.
  • WHERE: filtra los documentos en función de las condiciones.
  • ORDER BY: ordena los resultados.
  • GROUP BY: agrupa los resultados por una o varias propiedades.

Ejemplo: Consulta simple

SELECT p.id, p.name
FROM products p
WHERE p.price > 20
ORDER BY p.price ASC

Esta consulta devuelve los id productos y name con un precio superior a 20, ordenados por precio en orden ascendente.

Trabajar con propiedades JSON

Puede acceder a las propiedades anidadas mediante notación de puntos o notación de corchetes:

SELECT p.manufacturer.name, p["metadata"].sku
FROM products p

Las matrices se pueden recorrer mediante JOIN subconsultas o :

SELECT p.name, c AS color
FROM products p
JOIN c IN p.metadata.colors

Filtrado de datos

La WHERE cláusula admite una amplia gama de operadores, incluidas las operaciones aritméticas, lógicas, de comparación y de cadena:

SELECT *
FROM products p
WHERE p.category IN ("Accessories", "Clothing") AND p.price BETWEEN 10 AND 50

Agregación y agrupación

Puede usar funciones de agregado y resultados de grupo:

SELECT p.category, COUNT(1) AS productCount
FROM products p
GROUP BY p.category

Distinct, Top y Like

  • DISTINCT quita valores duplicados.
  • TOP N limita el número de resultados.
  • LIKE admite la coincidencia de patrones con caracteres comodín.
SELECT DISTINCT VALUE p.category
FROM products p

SELECT TOP 5 *
FROM products p
ORDER BY p.price DESC

SELECT *
FROM products p
WHERE p.name LIKE "%bike%"

Subconsultas

Las subconsultas permiten un filtrado y una proyección más avanzados, incluida la comprobación de la existencia de valores en matrices:

SELECT VALUE p.name
FROM products p
WHERE EXISTS (
    SELECT VALUE c FROM c IN p.metadata.colors WHERE c LIKE "%blue%"
)