Ich versuche einige protokollierte Ereignisse aus Application Insights in unsere SQL-Datenbank zu ziehen. Ich habe keine Kontrolle über das Format der Eingänge, die JSON-Dateien sind, die aus mehreren JSON-Arrays innerhalb der Datei bestehen. In jedem Datensatz befinden sich 5 Informationen in einem json-Array unter [context]. [Custom]. [Dimensions] in der Datei und mit einem OUTER APPLY werden diese Werte abgeflacht. Das Problem ist, dass die Ergebnisse nicht als eine Zeile pro Datensatz ausgegeben werden, sondern als eine Zeile mit 5 (was tatsächlich der Fall ist) und die Werte der 5 Daten in 4 Fällen NULL und der tatsächliche Wert in sind das andere. Ich brauche nur 2 der 5 Werte - PageType und UserId - und in meiner GROUP BY gibt es 3 Datensätze, einen mit jedem Wert und einen mit beiden null.Zusammenführen mehrerer Datensätze mit Zeichenfolgen und Nullen in einer Stream Analytics-Gruppe. Durch
In normalen SQL würden Sie einfach einen MAX-Ausdruck verwenden, um die tatsächlichen Werte für jeden zu erhalten, aber in Stream Analytics können Sie MAX nicht für Strings verwenden. Sie können auch nicht COALESCE und eine Reihe anderer Methoden verwenden, mit denen ich versucht habe, dies zu lösen. Irgendwelche Ideen, wie die Ergebnisse aus geändert werden:
EventDateTime Event PageType UserId AppVersion CountA
2017-05-24 Nav Show NULL NULL 2.0.1293 1
2017-05-24 Nav Show NULL SIRTSW 2.0.1293 1
2017-05-24 Nav Show Trade NULL 2.0.1293 1
zu
2017-05-24 Nav Show Trade SIRTSW 2.0.1293 1 ?
Der Code, liefert drei Reihen für jeden ist wie folgt (beachten Sie, dass e.event ist ein Array von einem Element, so dass es nicht das gleiche Problem verursachen):
SELECT flatEvent.ArrayValue.name as Event,
e.context.data.eventTime as EventDateTime,
e.context.application.version as AppVersion
,flatCustom.ArrayValue.UserId as UserId
,flatCustom.ArrayValue.PageType as PageType,
SUM(flatEvent.ArrayValue.count) as CountA
INTO
[insights]
FROM [ios] e
CROSS APPLY GetArrayElements(e.[event]) as flatEvent
OUTER APPLY GetArrayElements(e.[context].[custom].[dimensions]) as flatCustom
GROUP BY SlidingWindow(minute, 1),
flatEvent.ArrayValue.name,
e.context.data.eventTime,
e.context.application.version,
flatCustom.ArrayValue.UserId,
flatCustom.ArrayValue.PageType
Vielen Dank im Voraus, Rob
Können Sie Unterabfragen in Stream Analytics verwenden? –