Как «объединить» или «преобразовать» документы JSON в Azure Cosmos DB - PullRequest
0 голосов
/ 05 февраля 2019

Я настраиваю чат-бота с помощью Microsoft Bot Framework и Azure.Я хочу сохранить свой «UserState» в базе данных, чтобы легко анализировать данные пользователя.Мне удалось сохранить свой userState в виде JSON-документов в Azure Cosmos DB.

Проблема состоит в том, что каждое взаимодействие с ботом создает новый «документ» в «коллекции» в базе данных Cosmos.

Как можно легко объединить данные (структура данных согласована) и в лучшем случае поместить данные в какую-то таблицу?Инструмент, который я хочу использовать для анализа, требует файлов .txt или .csv.

enter image description here

Это фрагмент файла 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
}

В лучшем случае я хочу, чтобы данные имели структуру таблицы со столбцами «имя», «возраст» и т. Д., А также каждый пользователь (документ) в виде строки.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

В ваших вопросах есть несколько вещей, и я рассмотрю их все по отдельности.

Расширение комментария Дрю:

У вас есть несколько документов, созданных, потому что вы запускаете бот черезэмулятор.Каждый раз, когда эмулятор перезапускается, он создает новый идентификатор пользователя и, следовательно, новый документ для пользователя, а также один для разговора этого пользователя.У вас не будет этой проблемы, если вы используете канал, отличный от эмулятора, при условии, что идентификатор пользователя остается непротиворечивым.

Относительно объединения документов:

Я не совсем уверен, что вы ищетедля, но вы можете использовать SQL-запросы , чтобы выполнить то, что вам нужно.Просто нажмите «Новый SQL-запрос».Например, запуск SELECT * FROM c объединяет все документы в один вывод.

enter image description here

Относительно текстовых / CSV-файлов:

Я не уверен, каков ваш инструмент, но если он может обрабатывать JSON, то вышеприведенное может работать для вас.Если нет, то вы можете внедрить пользовательское промежуточное программное обеспечение, чтобы получить вывод txt / csv, который вы ищете. Вот пример , который показывает что-то относительно похожее.В C # нет аналогичного примера, но вы все равно можете реализовать свое собственное промежуточное ПО , чтобы сделать то же самое.

Относительно таблиц:

Если вы действительно ищет Table Storage, он поддерживается в ботах V3 , но заменяется хранилищем больших двоичных объектов в V4.Вы можете написать свой бот в V3.Подобно тому, что сказал Джей, вы все еще можете использовать функцию триггера для отправки ее в хранилище таблиц, но затем вы сохраняете данные дважды.

Относительно анализа

Если все выдействительно нужен анализ, Application Insights / Bot Analytics может быть тем, что вам нужно, хотя я не верю, что он предоставит детали, которые вы ищете.

0 голосов
/ 06 февраля 2019

В лучшем случае я хочу, чтобы данные имели структуру таблицы со столбцами «имя», «возраст» и т. Д., А каждый пользователь (документ) представлял собой строку.

Очевидно, что вам нужно использовать некоторые другие сервисы для реализации этого требования, потому что данные, собираемые бот-сервисом, уже существуют.

По моему мнению, возможно, функция azure триггера cosmos db *хороший вариант для вас.Функция сработает, когда в вашу коллекцию космических БД попадут какие-либо обновления.

Конечно, вы можете получить больше объяснений по этой ссылке , тогда я хочу сказать, что вы можете настроить Cosmos db в качестве входной привязки и Хранилище BLOB-объектов Azure в качестве выходной привязки (может быть, определенный файл CSV).В этой функции вы можете получить нужные столбцы с помощью cosmos db sdk и собрать их в любой формат.

...