簡體   English   中英

Cosmos DB 鍵值對查詢

[英]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 語法。

幫助??

您可以使用JOINSWHERE表達式來實現它,盡管該方案對於查詢來說並不理想,您應該考慮更改它。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM