如何在 CosmosDB 中使用 Join 操作/子查询

Posted

技术标签:

【中文标题】如何在 CosmosDB 中使用 Join 操作/子查询【英文标题】:How to use Join operation/ Subquery in CosmosDB 【发布时间】:2021-12-09 03:00:52 【问题描述】:

我在 CosmosDB 中有一个容器。它包含大约 30 个变量。 CabId 是其中的列/变量之一。我想选择 CabId 的重复值,并为重复的 CabId 完全删除这些项目。 PartitionKey 是我项目中的另一个变量。 一项将如下所示。


     "CabId": "8dc2d0f4-d787-4e98-94d0-665a69bfbbf5",
     "OS_FlightRing": "*****",
     "CPU_FamilyName": "*****",
     "Incident_FailureBucketId": "*****",
     "Geo_ISOCountryShortCode": "cn",
     "OS_Version": "10.0.19042.985",
     "PartitionKey": "29997810-1199392862021-10-20"

我正在使用这样的查询来获取具有重复 CabId 的单个项目。但我收到语法错误。

Select * from e JOIN(
 SELECT * FROM( 
  (SELECT c.CabId,Count(c.CabId) AS CabCount
   FROM c
   where c.PartitionKey = "29997810-1238691972021-10-25"
   GROUP BY c.CabId)
 d WHERE d.CabCount > 1))
on d.CabId = e.CabId

【问题讨论】:

【参考方案1】:

下面的查询应该给你重复的,

Select d.CabId From
(SELECT c.CabId,Count(c.CabId) AS 
CabCount FROM c GROUP BY c.CabId) AS d WHERE d.CabCount > 1

"CabId": "8dc2d6f4-d787-4e98-94d0-665a69bfbbf5", "OS_FlightRing": "", "CPU_FamilyName": "", "Incident_FailureBucketId": "*****", "Geo_ISOCountryShortCode": "cn", "OS_Version": "10.0.19042.985", "PartitionKey": "29597810-1199392862021-10-20", "id": "703f5337-4fc2-4d77-acc9-2fbf15900366", "_rid": "uYFGAPqp2KYCAAAAAAAAAA==", "_self": "dbs/uYFGAA==/colls/uYFGAPqp2KY=/docs/uYFGAPqp2KYCAAAAAAAAAA==/", "_etag": ""8c00d214-0000-0700-0000-6172ba160000"", "_attachments": "附件/", "_ts": 1634908694

更新:

SELECT count(1) FROM
(SELECT c.CabId ,Count(c.CabId) AS CabCount
FROM c GROUP BY c.CabId,c.PartitionKey) d WHERE d.CabCount > 1

【讨论】:

感谢@Sajeetharan 的询问。我能够运行查询并获得重复的 CabIds。但是我的最终输出应该给我一个项目的所有输出列/变量输出。例如,假设 CabId "123445" 是重复值,那么我需要获取 CabId "123445" 的所有列/变量,例如 CabId : "123445", "OS_FlightRing": "", "CPU_FamilyName": "", " Incident_FailureBucketId”:“*****”,“Geo_ISOCountryShortCode”:“cn”,“OS_Version”:“10.0.19042.985”,“PartitionKey”:“29997810-1199392862021-10-20”,. . . . . 那样。

以上是关于如何在 CosmosDB 中使用 Join 操作/子查询的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据工厂中清除 CosmosDB?

如何安装CosmosDB模块

Azure CosmosDB (13) CosmosDB数据建模

如何在 CosmosDB 上查询最近 30 天?

如何通过查询获取 cosmosDB 中的数据库或容器大小?

如何允许将 Odata 选项应用于 cosmos db 集合并返回过滤后的记录