簡體   English   中英

如何在Azure Cosmos DB中“合並”或“轉換” JSON文檔

[英]How to “merge” or “transform” JSON documents in Azure Cosmos DB

我正在使用Microsoft Bot Framework和Azure設置Chatbot。 我想將“ UserState”保存在數據庫中,以便輕松分析用戶數據。 我設法將我的userState以JSON文檔的形式保存在Azure Cosmos DB中。

問題在於,與機器人的每次交互都會在Cosmos DB的“集合”中創建一個新的“文檔”。

我如何輕松地合並數據(數據結構是一致的),並在最佳情況下將數據存儲在某種表中? 我要用於分析的工具需要.txt或.csv文件。

在此處輸入圖片說明

這是存儲用戶數據的JSON文件的片段。

{
    "id": "emulator*2fusers*2f9321b527-4699-4b4a-8d9d-9cd9fa8f1967*2f",
    "realId": "emulator/users/9321b527-4699-4b4a-8d9d-9cd9fa8f1967/",
    "document": {
        "userData": {
            "name": "value",
            "age": 18,
            "gender": "value",
            "education": "value",
            "major": "value"
        },
        "userDataExtended": {
            "roundCounter": 3,
            "choices": [
                "A",
                "A",
                "B"
            ],
        },
    "_rid": "0k5YAPBrVaknAAAAAAAAAA==",
    "_self": "dbs/0k5YAA==/colls/0k5YAPBrVak=/docs/0k5YAPBrVaknAAAAAAAAAA==/",
    "_etag": "\"ac009377-0000-0000-0000-5c59c5610000\"",
    "_attachments": "attachments/",
    "_ts": 1549387105
}

在最好的情況下,我希望將數據包含在表結構中,並將“名稱”,“年齡”等列以及每個用戶(文檔)作為一行。

謝謝!

您的問題中有幾件事,我將分別解決。

擴展Drew的評論:

您正在創建多個文檔,因為您正在通過模擬器運行機器人。 模擬器每次重新啟動時,都會創建一個新的用戶ID,從而為該用戶創建一個新文檔,並為該用戶的會話創建一個新文檔。 如果您使用仿真器以外的其他渠道,則只要用戶ID保持一致,就不會出現此問題。

關於合並文件:

我不確定您要查找的是什么,但是您可以使用SQL查詢來完成所需的操作。 只需單擊“新建SQL查詢”。 例如,運行SELECT * FROM c將所有文檔合並到一個輸出中。

在此處輸入圖片說明

關於text / csv文件:

我不確定您的工具是什么,但是如果它可以處理JSON,那么上面的方法可能對您有用。 如果沒有,則可以實現自定義中間件來獲取所需的txt / csv輸出。 這是一個顯示相對相似的示例 C#中沒有等效的示例,但是您仍然可以實現自己的中間件來執行相同的操作。

關於表:

如果您確實在尋找表存儲, 則V3機器人支持該表存儲,但在V4中已由Blob存儲代替。 您可以在V3中編寫您的機器人。 與Jay所說的類似,您仍然可以使用觸發函數將其發送到表存儲,但是隨后您將數據存儲了兩次。

關於分析

如果您真正想要的只是分析,那么Application Insights / Bot Analytics可能就是您所需要的,盡管我認為它不會提供您所需要的詳細信息。

在最好的情況下,我希望將數據包含在表結構中,並將“名稱”,“年齡”等列以及每個用戶(文檔)作為一行。

顯然,您需要使用其他一些服務來實現此要求,因為由bot服務收集的數據已經存在。

在我看來,也許cosmos db觸發azure函數對您來說是一個不錯的選擇。 當任何更新流入您的cosmos db集合時,將觸發該功能。

當然,您可以從此鏈接獲得更多說明,然后我想說的是,可以將Cosmos db配置為輸入綁定 ,將Azure Blob存儲配置為輸出綁定 (也許是特定的csv文件)。 在該函數中,您可以使用cosmos db sdk獲得所需的列,並將其組合為所需的任何格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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