bag_unpack
в Kusto:bag_unpack
над большим набором данных в столбце
где все свойства верхнего уровня одинаковые (поэтому каждая строка имеет
динамический пакет с тем же именем свойства, поэтому каждый результирующий столбец из
мешок распаковать будет иметь значение)?bag_unpack
над большим набором данных в столбце
где свойства верхнего уровня не все равно, поэтому не гарантируется
имеют одинаковые свойства верхнего уровня (поэтому будут некоторые строки, в которых
распакованные столбцы имеют пустое/нет значения)?extract_json()
или parse_json()
, или это намного быстрее, чем эти методы?Учитывая следующие два примера, какой из них более оптимизирован или будет выполняться быстрее для большого набора данных? (или они будут примерно одинаковыми?):
//#1
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
//#2
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| project Age = d.Age, Name = d.Name
Второй вариант всегда предпочтительнее.
Когда набор свойств, которые вы хотите проецировать, известен заранее, было бы более эффективно явно проецировать только их, а не использовать плагин bag_unpack()
. (*)
Для последнего требуется 2 прохода по данным —
Для построения выходной схемы (путем анализа свойств, существующих в динамических полезных нагрузках во всех запрошенных записях).
Выполнение запроса с уже известной схемой вывода.
(*) Помимо производительности, это имеет то преимущество, что схема вывода всегда стабильна, что может потребоваться для некоторых автоматизированных сценариев — даже в случае изменения исходных данных и добавления новых свойств в динамическую полезную нагрузку (или удаления старых). , это не повлияет на схему вывода.