У меня есть таблица в базе данных Azure Data Explorer, определенная следующим образом:
.create table GetPrice (lpname: string, TimeUTC: datetime, base_volume: real, highest_bid: real, currency_pair: string, price: real, lowest_ask: real, change_percentage: real, quote_volume: real, high_24h: real, low_24h: real, EventProcessedUtcTime: datetime, current_time: datetime, ['guid']: string, epochtime: int, time_ms: real, channel: string, event: string)
Я получаю объект из внешнего API и анализирую его в JSON со следующим результатом:
{
{
"Time": 0,
"Time_ms": 0,
"Channel": "external",
"event": "update",
"Result": {
"currency_pair": "BABA",
"last": "0",
"lowest_ask": null,
"highest_bid": "71.93",
"change_percentage": "0",
"base_volume": "97",
"quote_volume": null,
"high_24h": "0",
"low_24h": "0",
"GUID": "<GUID>"
},
"TimeUTC": "2024-04-10T10:13:13.1732158Z",
"LPName": "NAME",
"Error": {
"Code": 0,
"Message": null
}
}
}
Проблема: в таблице GetPrice хранятся только TimeUTC, LPName, EventProcessedUtcTime и current_time.
Я не совсем понимаю, почему, если бы возникла проблема с вложенным объектом Result
, то также должны быть заполнены Channel
и event
, но это не так.
Я попытался сгладить Result
перед отправкой его в EventHub, но это тоже не сработало. Кроме того, я попытался создать новую таблицу и передать туда данные, но это тоже не удалось.
Я использую библиотеку Azure.Messaging.EventHubs
для подключения и взаимодействия с ADX.
Любые указания или предложения приветствуются.
Причина, по которой в таблице TimeUTC
хранятся только LPName
, EventProcessedUtcTime
, current_time
и GetPrice
, связана с тем, что группа ресурсов присутствует в регионе, а событие инициируется относительно этого временного кадра. Одним из способов решения этой проблемы является изменение местоположения ресурса.
// Create mapping command
.create table ['ravi'] ingestion json mapping 'ravi_mapping_1' '[{"column":"topic", "Properties":{"Path":"$[\'topic\']"}},{"column":"subject", "Properties":{"Path":"$[\'subject\']"}},{"column":"eventType", "Properties":{"Path":"$[\'eventType\']"}},{"column":"id", "Properties":{"Path":"$[\'id\']"}},{"column":"data", "Properties":{"Path":"$[\'data\']"}},{"column":"dataVersion", "Properties":{"Path":"$[\'dataVersion\']"}},{"column":"metadataVersion", "Properties":{"Path":"$[\'metadataVersion\']"}},{"column":"eventTime", "Properties":{"Path":"$[\'eventTime\']"}}]'
// Create table command
.create table ['ravi'] (['topic']:string, ['subject']:string, ['eventType']:string, ['id']:guid, ['data']:dynamic, ['dataVersion']:string, ['metadataVersion']:long, ['eventTime']:datetime)
Прием данных с помощью Kusto Azure Data Explorer с использованием .net.
Отправляйте и получайте события с помощью .NET в Azure Event Hubs Hubs
Примечание :
Azure.Messaging.EventHubs
— только для подключения к концентратору событий, а Microsoft.Azure.Kusto.Ingest
— для подключения к Azure Data Explorer. Один из способов приема данных из Центра событий в Azure Synapse Data Explorer. другой способ — получить данные из концентратора событий с помощью Azure Synapse Data Explorer
(или)
используйте Анализ данных в экземпляре Центров событий для анализа данных событий с помощью Azure Data Explorer.
Azure.Messaging.EventHubs
с C# по приведенной выше ссылке.Обозреватель данных Azure: Я создал таблицу и команду сопоставления для этого примера данных.
[
{
"currency_pair": "BABA",
"last": "0",
"lowest_ask": null,
"highest_bid": "89.93",
"change_percentage": "10",
"base_volume": "197",
"quote_volume": null,
"high_24h": "0",
"low_24h": "0",
"GUID": "<GUID>",
"nestedKey": {
"nestedKey1": "nestedValue1"
},
"arrayKey": [
"arrayValue1",
"arrayValue2"
]
}
]
// Create table command
.create table ['teja'] (['currency_pair']:string, ['last']:long, ['lowest_ask']:string, ['highest_bid']:real, ['change_percentage']:long, ['base_volume']:long, ['quote_volume']:string, ['high_24h']:long, ['low_24h']:long, ['GUID']:string, ['nestedKey']:dynamic, ['arrayKey']:dynamic)
// Create mapping command
.create table ['teja'] ingestion json mapping 'teja_mapping' '[{"column":"currency_pair", "Properties":{"Path":"$[\'currency_pair\']"}},{"column":"last", "Properties":{"Path":"$[\'last\']"}},{"column":"lowest_ask", "Properties":{"Path":"$[\'lowest_ask\']"}},{"column":"highest_bid", "Properties":{"Path":"$[\'highest_bid\']"}},{"column":"change_percentage", "Properties":{"Path":"$[\'change_percentage\']"}},{"column":"base_volume", "Properties":{"Path":"$[\'base_volume\']"}},{"column":"quote_volume", "Properties":{"Path":"$[\'quote_volume\']"}},{"column":"high_24h", "Properties":{"Path":"$[\'high_24h\']"}},{"column":"low_24h", "Properties":{"Path":"$[\'low_24h\']"}},{"column":"GUID", "Properties":{"Path":"$[\'GUID\']"}},{"column":"nestedKey", "Properties":{"Path":"$[\'nestedKey\']"}},{"column":"arrayKey", "Properties":{"Path":"$[\'arrayKey\']"}}]'
обязательно добавьте Channel
, event
и т. д. в команду table/table сопоставление .
Большое спасибо за расширенный ответ @Sampath. Это помогло мне увидеть более широкую картину. К вашему сведению, в данном конкретном случае проблема заключалась в сопоставлении таблицы. Я обновил его и теперь он работает!