![](/img/trans.png)
[英]Store “extended” metadata on entities stored in Azure Cosmos DB as JSON documents
[英]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
}
在最好的情況下,我希望將數據包含在表結構中,並將“名稱”,“年齡”等列以及每個用戶(文檔)作為一行。
謝謝!
您的問題中有幾件事,我將分別解決。
您正在創建多個文檔,因為您正在通過模擬器運行機器人。 模擬器每次重新啟動時,都會創建一個新的用戶ID,從而為該用戶創建一個新文檔,並為該用戶的會話創建一個新文檔。 如果您使用仿真器以外的其他渠道,則只要用戶ID保持一致,就不會出現此問題。
我不確定您要查找的是什么,但是您可以使用SQL查詢來完成所需的操作。 只需單擊“新建SQL查詢”。 例如,運行SELECT * FROM c
將所有文檔合並到一個輸出中。
我不確定您的工具是什么,但是如果它可以處理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.