如何在 Kusto 中使用物化?
How to make use of materialize in Kusto?
我有一个叫做消费的函数,它接受 4 个参数,最后按名称总结一个值。从这个函数中,我试图具体化一些公式,从而获得更好的查询性能。
例如:
let firstFormula = materialize (
consumption("ID", "scale", "node", 100.0)
);
let secondformula = materialize (
consumption("ID", "scale", "node", 60.0)
);
然后我创建一个公式,将来自第一个公式的值除以来自第二个公式的值。
let thirdFormula = view (){
union
firstformula,
secondformula
| summarize
value1 = max(case(Name == "ABCD", todouble(Value), 0.0)),
value2 = max(case(Name == "EFGH", todouble(Value), 0.0))
| project Value = round(value1 / value2 * 100.0, 2)
};
为了检查 CPU 性能,我先测试了公式,但没有使用具体化函数。然后我使用物化对其进行了测试。我最终从不使用物化的人那里获得了更好的表现。我在这里做错了什么吗?我是否以错误的方式使用了 materialize 函数?
materialize() 函数可用于缓存将在后续查询语句中使用的查询结果,例如,如果您有一个组织的汇总,然后有一列显示它占总数的百分比,在这种情况将聚合的结果具体化,然后计算总数,将大大减少(可能几乎一半)处理时间,例如:
let Agg = materialize(T | filter | summarize sum(Value) by Org);
let total_sum = toscalar(Agg | summarize sum(sum_Value))
Agg
| extend PercentOfTotal = sum_Value/total_sum
在您的情况下,您似乎正在具体化处理每一行的结果,但之后从未多次使用具体化的数据来证明缓存成本的合理性,这导致了更高的查询成本。
我有一个叫做消费的函数,它接受 4 个参数,最后按名称总结一个值。从这个函数中,我试图具体化一些公式,从而获得更好的查询性能。
例如:
let firstFormula = materialize (
consumption("ID", "scale", "node", 100.0)
);
let secondformula = materialize (
consumption("ID", "scale", "node", 60.0)
);
然后我创建一个公式,将来自第一个公式的值除以来自第二个公式的值。
let thirdFormula = view (){
union
firstformula,
secondformula
| summarize
value1 = max(case(Name == "ABCD", todouble(Value), 0.0)),
value2 = max(case(Name == "EFGH", todouble(Value), 0.0))
| project Value = round(value1 / value2 * 100.0, 2)
};
为了检查 CPU 性能,我先测试了公式,但没有使用具体化函数。然后我使用物化对其进行了测试。我最终从不使用物化的人那里获得了更好的表现。我在这里做错了什么吗?我是否以错误的方式使用了 materialize 函数?
materialize() 函数可用于缓存将在后续查询语句中使用的查询结果,例如,如果您有一个组织的汇总,然后有一列显示它占总数的百分比,在这种情况将聚合的结果具体化,然后计算总数,将大大减少(可能几乎一半)处理时间,例如:
let Agg = materialize(T | filter | summarize sum(Value) by Org);
let total_sum = toscalar(Agg | summarize sum(sum_Value))
Agg
| extend PercentOfTotal = sum_Value/total_sum
在您的情况下,您似乎正在具体化处理每一行的结果,但之后从未多次使用具体化的数据来证明缓存成本的合理性,这导致了更高的查询成本。