У нас есть служба облачного облака, которая регистрирует все исключения для Azure Application Insights. Мы установили непрерывный экспорт всех исключений в лазурные таблицы хранения. Кроме того, у нас есть Azure Stream Analytics, который извлекает данные из блоков памяти и помещает их в базу данных Azure SQL. Теперь проблема заключается в том, что мы не можем корректно отображать/форматировать ParsedStack
из Exception json в varchar (max), чтобы мы могли вставить его в базу данных.Запрос аналитики Stream для ParsedStack Exception от Azure Application Insights непрерывного экспорта
Это запрос Стрим Analytics мы использовали -
SELECT
CASE
WHEN GetArrayLength(A.basicException) > 0
THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'assembly')
ELSE ''
END AS ExceptionAssembly
,
CASE
WHEN GetArrayLength(A.basicException) > 0
THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'exceptionType')
ELSE ''
END AS ExceptionType
,
CASE
WHEN GetArrayLength(A.basicException) > 0
THEN GetRecordPropertyValue(GetArrayElement(A.basicException, 0), 'parsedstack')
ELSE ''
END AS ParsedStack
,A.context.device.id as DeviceId
,A.context.device.type as DeviceType
,A.context.device.browser as Browser
,A.context.device.browserVersion as BrowserVersion
,A.context.location.country as Country
,A.context.location.province as Province
,A.context.location.city as City
INTO
myexceptionsoutput
FROM myexceptionsinput A
Все значения выглядят, как ожидается, в таблице SQL, но значение ParsedStack
столбца всегда Microsoft.EventProcessing.SteamR.Sql.ValueArray
Редактировать
Добавление объект Exception json (полная версия очень длинная, поэтому обрезается, чтобы быть более понятным) -
"basicException": [{
"assembly": "Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"exceptionType": "System.ServiceModel.CommunicationObjectFaultedException",
"outerExceptionType": "System.ServiceModel.CommunicationObjectFaultedException",
"failedUserCodeAssembly": "Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
"exceptionGroup": "System.ServiceModel.CommunicationObjectFaultedException at lambda_method",
"count": 1,
"outerExceptionMessage": "The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state."
},
{
"parsedStack": [{
"method": "System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage",
"assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"level": 0,
"line": 0
},
{
"method": "System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke",
"assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"level": 1,
"line": 0
},
{
"method": "System.IDisposable.Dispose",
"assembly": "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"level": 2,
"line": 0
}],
"hasFullStack": true,
"id": "22349146",
}],
"internal": {
"data": {
"id": "bd6f2355-ed02-4883-abb9-d8ed6ceba646",
"documentVersion": "1.61"
}
}
Каков тип A.basicException, это массив или массив массивов? Я попробовал ниже запрос на событие, которое нравится ниже, оно работает. Запрос, который у вас есть, аналогичен, он должен работать, если A.basicException является массивом. Событие: { "ArrayColumn": [{ "Идентификатор": 255}, { "Идентификатор": 215}], "NormalColumn": 40, "DeviceID": "D2"} ASA Запрос выберите NormalColumn, случай, когда getarraylength (ArrayColumn)> 0 затем GetRecordPropertyValue (getarrayelement (ArrayColumn, 0), 'Id') еще '' конца [Id], System.Timestamp [EventTimeStamp], DeviceID в tableOutput от iotInput –
@ Vigneshwa ranChandramohan Я добавил объект JSON. BasicException здесь представляет собой массив из двух объектов. Второй объект снова имеет два объекта, а второй объект - ParsedStack. Это становится еще более сложным, когда я увидел, что ParsedStack представляет собой массив объектов, размер которых всегда меняется, на основе строк в трассе стека исключения –