Могу ли я извлечь несколько вложенных свойств json в kusto (KQL)?

У меня есть события телеметрии, которые отправляются в playfab. В этих случаях я хочу запросить содержимое полезной нагрузки. Я могу это сделать, но все вложенные свойства находятся в одном столбце. Я могу использовать следующее, чтобы извлечь все в моем событии, НО для SuperProperties, вложенных в Payload. Все суперсвойства находятся в одном столбце

Вот структура моего мероприятия

SchemaVersion": xxxx
"FullName_Namespace": xxxx,
"FullName_Name": xxxx,
"Entity_Id": xxxxx,
"Entity_Type": txxxxx,
"EntityLineage_title": xxxxxx,
"EventData": {
    "Timestamp": "xxxxxxx",
    "PayloadContentType": "Json",
    "EntityLineage": {
        "master_player_account": "xxxxxx",
        "title_player_account": "xxxxxx",
        "namespace": "xxxxx",
        "title": "xxxxxx"
    },
    "SchemaVersion": "xxxxxx",
    "Originator": {
        "Type": "xxxxxx",
        "Id": "xxxxxx"
    },
    "OriginInfo": {
        "Timestamp": "xxxxxx"
    },
    "FullName": {
        "Namespace": "xxxxxx",
        "Name": "xxxxxx"
    },
    "Payload": {
        "TimeToCompleteSubStage": xxxxxx,
        "TimeToCompleteStage": xxxxxx,
        "SuperProperties": {
            "GameSessionID": "xxxxxx",
            "PlayFabId": "xxxxxx",
            "Version": "xxxxxx",
            "Index": xxxxxx,
            "Time": "xxxxxx"
        },
        "IdStageFrom": "xxxxxx",
        "SubStageId": xxxxxx,
        "IdStageTo": "xxxxxx"
    },
    "Id": "xxxxxx",
    "Entity": {
        "Type": "xxxxxx",
        "Id": "xxxxxx"
    }
},
"EventId": xxxxxx,
"Timestamp": xxxxxx,
"EntityLineage_title_player_account": xxxxxx,
"EntityLineage_master_player_account": xxxxxx,
"EntityLineage_namespace": xxxxxx,
"ExperimentVariants": xxxxxx

Что я пробовал

Если нашел похожий вопрос здесь , но я не уверен, что полностью понял вопрос ИЛИ ответ. Даже после просмотра этой документации, которая, кажется, объясняет, как это сделать. Причина ? Потому что мои познания в Kusto и даже в программировании в целом базовые.

Итак, есть ли кто-нибудь, кто мог бы попытаться объяснить, возможно ли получить все свойства в Payload, даже суперсвойства, которые вложены в Payload в их конкретном столбце? Если да, то как это сделать? Неважно, запрашиваю ли я что-либо еще за пределами полезной нагрузки или нет.

Вот мои попытки

['events.all'] 
| where FullName_Name == 'FTUE_Funnel'
| project Payload = parse_json(EventData.Payload)
| evaluate bag_unpack(Payload)
['events.all'] 
| where FullName_Name == 'FTUE_Funnel'
| project Payload = parse_json(EventData.Payload.SuperProperties)
| evaluate bag_unpack(Payload)

Эти работают, но запрашиваются отдельно, что не идеально.

['events.all'] 
| where FullName_Name == 'FTUE_Funnel'
| extend Payload = parse_json(EventData.Payload)
| project-away EventData
| evaluate bag_unpack(Payload,'extra_')

Этот также работает, он запрашивает содержимое полезной нагрузки, НО помещает суперсвойства в один столбец + запрашивает что-либо вне полезной нагрузки, что меня устраивает.

Спасибо !

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

bag_unpack()

datatable(event:dynamic)
[
    dynamic
    (
        {
            "SchemaVersion": 1,
            "FullName_Namespace": 2,
            "FullName_Name": 3,
            "Entity_Id": 4,
            "Entity_Type": 5,
            "EntityLineage_title": 6,
            "EventData": {
                "Timestamp": 7,
                "PayloadContentType": "Json",
                "EntityLineage": {
                    "master_player_account": 8,
                    "title_player_account": 9,
                    "namespace": 10,
                    "title": 11
                },
                "SchemaVersion": 12,
                "Originator": {
                    "Type": 13,
                    "Id": 14
                },
                "OriginInfo": {
                    "Timestamp": 15
                },
                "FullName": {
                    "Namespace": 16,
                    "Name": 17
                },
                "Payload": {
                    "TimeToCompleteSubStage": 18,
                    "TimeToCompleteStage": 19,
                    "SuperProperties": {
                        "GameSessionID": 20,
                        "PlayFabId": 21,
                        "Version": 22,
                        "Index": 23,
                        "Time": 24
                    },
                    "IdStageFrom": 25,
                    "SubStageId": 26,
                    "IdStageTo": 27
                },
                "Id": 28,
                "Entity": {
                    "Type": 29,
                    "Id": 30
                }
            },
            "EventId": 31,
            "Timestamp": 32,
            "EntityLineage_title_player_account": 33,
            "EntityLineage_master_player_account": 34,
            "EntityLineage_namespace": 35,
            "ExperimentVariants": 36
        }
    )
]
| extend Payload = event.EventData.Payload
| project-away event
| evaluate bag_unpack(Payload)
| evaluate bag_unpack(SuperProperties, "SuperProperties_")
IDStageFrom IDStageTo SubStageId TimeToCompleteStage TimeToCompleteSubStage SuperProperties_GameSessionID SuperProperties_Index SuperProperties_PlayFabId SuperProperties_Time SuperProperties_Version 25 27 26 19 18 20 23 21 24 22

Скрипка

Другие вопросы по теме