如何在 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 操作/子查询的主要内容,如果未能解决你的问题,请参考以下文章