[英]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.