我正在使用Microsoft Bot Framework和Azure建立一个聊天机器人。我想将“ 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
}
在最佳情况下,我想将数据包含在具有“名称”,“年龄”等列以及每个用户(文档)为一行的表结构中。
谢谢!
答案 0 :(得分:1)
您的问题中有几件事,我将分别解决。
您正在创建多个文档,因为您正在通过模拟器运行机器人。模拟器每次重新启动时,都会创建一个新的用户ID,从而为该用户创建一个新文档,并为该用户的会话创建一个新文档。如果您使用仿真器以外的其他渠道,则只要用户ID保持一致,就不会出现此问题。
我不确定您要查找的是什么,但是您可以使用SQL Queries完成所需的操作。只需单击“新建SQL查询”。例如,运行SELECT * FROM c
将所有文档合并到一个输出中。
我不确定您的工具是什么,但是如果它可以处理JSON,那么上面的方法可能对您有用。如果没有,则可以实现自定义中间件来获取所需的txt / csv输出。 Here's a sample显示相对相似的内容。 C#中没有等效的示例,但是您仍然可以implement your own middleware做同样的事情。
如果您真的正在寻找Table Storage,it was supported in V3机器人,但是在V4中已被Blob存储取代。您可以在V3中编写您的机器人。与Jay所说的类似,您也许仍然可以使用触发函数将其发送到表存储,但是随后您将数据存储了两次。
如果您真正想要的只是分析,Application Insights/Bot Analytics可能就是您所需要的,尽管我不相信它会提供您想要的详细信息。
答案 1 :(得分:0)
在最好的情况下,我想将数据包含在表结构中 列“名称”,“年龄”等,每个用户(文档)排成一行。
显然,您需要使用其他一些服务来实现此要求,因为由bot服务收集的数据已经存在。
我认为,cosmos db trigger azure function也许对您来说是一个不错的选择。当任何更新流入您的cosmos db集合时,将触发该功能。
当然,您可以从此link得到更多的解释,然后我想说的是,您可以配置Cosmos db as input binding和Azure Blob Storage as output binding(也许是一个特定的csv文件)。在该函数中,您可以使用cosmos db sdk获取所需的列,并将其组合为所需的任何格式。