[英]Cosmos DB query on key-value pairs
我收集了大量 json 份文件,其結構形式如下:
{
"id": "00000000-0000-0000-0000-000000001122",
"typeId": 0,
"projectId": "p001",
"properties": [
{
"id": "a6fdd321-562c-4a40-97c7-4a34c097033d",
"name": "projectName",
"value": "contoso",
},
{
"id": "d3b5d3b6-66de-47b5-894b-cdecfc8afc40",
"name": "status",
"value": "open",
},
.....{etc}
]
}
集合中可能有很多屬性,都是通過name的值來標識的。 屬性中的字段非常一致——可能會有一些變化,但它們都會有我關心的字段。 有一個 Id,一些標簽等
我想使用 projectId 將這些與 PowerBI 中的其他一些數據結合起來,以創建一些非常有價值的報告。
我想我想做的是將這些數據“規范化”到一個表中,例如:
項目編號 | 項目名 | 地位 | 打開日期 | 關閉日期 | 經理 |
---|---|---|---|---|---|
p001 | contoso | 打開 | 20200101 | 我 | |
ETC |
我在什么地方...
我可以 go:
SELECT c["value"] AS ProjectName
FROM c in t.Properties
WHERE c["name"] = "projectName"
...這將給我每個項目名稱
我可以多次這樣做以獲得“值”(狀態、openDate、經理等)
如果我想將它們組合在一起,那么我需要將所有這些子查詢與“id”組合在一起。 但是 'id' 不在 SELECT 的 scope 中,那我怎么獲取呢? 如果我要這樣做,這聽起來像是執行起來非常昂貴 (RU) 的事情。
我認為我過於復雜了,但我無法完全理解 Cosmos 語法。
幫助??
您可以使用JOINS
和WHERE
表達式來實現它,盡管該方案對於查詢來說並不理想,您應該考慮更改它。
SELECT
c['projectId'], --c.projectId also works, but value is a reserved keyword
n['value'] AS projectName,
s['value'] AS status
FROM c
JOIN n IN c.properties
JOIN s IN c.properties
WHERE n['name'] = 'projectName' AND s['name'] = 'status'
--note all filtered properties must appear exactly once for it to work properly
編輯; 解決過濾屬性必須恰好出現一次的潛在問題的新查詢。
SELECT
c['projectId'],
ARRAY(
SELECT VALUE n['value']
FROM n IN c.properties
WHERE n['name'] = 'projectName'
)[0] AS projectName,
ARRAY(
SELECT VALUE n['value']
FROM n IN c.properties
WHERE n['name'] = 'status'
)[0] AS status
FROM c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.