Cosmos DB 中的查询语言是什么(在 Azure 和 Fabric 中)

查询语言提供了一种功能强大的类似 SQL 的语法,用于处理 JSON 数据。 此语言旨在让用户熟悉 SQL 体验,同时支持 JSON 文档的灵活性和分层性。 本文介绍查询语言的核心概念、语法和功能。

查询语言的核心概念

查询语言旨在提供对存储为 JSON 文档的数据的表达和高效访问。 在基础之上,该语言旨在以本机方式处理分层和灵活的数据,支持对可能具有不同结构的文档进行简单和复杂的查询。

查询是使用熟悉的类似 SQL 的语法撰写的,但已针对文档模型进行调整。 这种适应意味着,与传统的关系数据库不同,没有固定架构-属性可能缺失或文档类型不同。 语言区分大小写,支持直接在查询中引用嵌套属性、数组和对象。 逻辑、比较和算术运算符可用,该语言旨在直观地面向具有 SQL 体验的开发人员,同时采用 NoSQL 数据的灵活性。

查询引擎针对高性能和可伸缩性进行了优化,自动使用索引来有效筛选、排序和聚合数据。 它支持各种查询模式,从简单的查找到复杂的聚合和子查询。 此支持使查询引擎适用于事务工作负荷和分析工作负荷。 该语言还提供用于处理数组、处理 null 值和未定义值以及以灵活的 JSON 形状投影结果的构造。 这些构造使开发人员能够准确检索应用程序所需的格式所需的数据。

基本查询结构

典型的查询包括以下子句:

  • SELECT:指定要返回的字段或值。
  • FROM:标识源容器,并可以分配别名。
  • WHERE:根据条件筛选文档。
  • ORDER BY:对结果进行排序。
  • GROUP BY:按一个或多个属性对结果进行分组。

示例:简单查询

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

此查询返回 id 价格大于 20 的产品, name 按升序排序。

使用 JSON 属性

可以使用点表示法或括号表示法访问嵌套属性:

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

可以使用或子查询遍历 JOIN 数组:

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

筛选数据

WHERE 子句支持各种运算符,包括算术、逻辑、比较和字符串运算:

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

聚合和分组

可以使用聚合函数和分组结果:

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

Distinct、Top 和 Like

  • DISTINCT 删除重复值。
  • TOP N 限制结果数。
  • LIKE 支持使用通配符进行模式匹配。
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%"

Subqueries

子查询允许更高级的筛选和投影,包括检查数组中是否存在值:

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