kusto - coalesce 和 next - 为什么不对所有内容都使用 next?
kusto - coalesce and next - why not just use next for everything?
我在 azure kusto 在线查询终端运行有以下两个查询
(在此 link - https://dataexplorer.azure.com/clusters/help/databases/Samples 可用)
//okay this is lag related code.
//but we need to serialize first in some way, in other words sort it
StormEvents
| order by StartTime | extend LaggedOutput = next( State,2,"NOTHING FOUND") | project State,LaggedOutput;
//lets try coalasce
//next inside the coalesce returns a empty string and that is replaced with our replacement.
//note : I think we can forgo coalesce completely because next
//already has a default value.
StormEvents
| order by StartTime | project coalesce(next(State,2,""),"COALSESCE");
所以,我的问题是,为什么要费心合并呢? next() 已经提供了我可以在这种情况下应用的默认值?
在您提供的场景中,答案是肯定的:您可以从 第二个查询 中删除 coalesce
,只需使用 next
运算符如下所示的默认值(对于第二个查询):
StormEvents
| order by StartTime
| project next(State,2,"COALSESCE")
输出与使用 project coalesce(next(State,2,""),"COALSESCE")
相同。
但是对于其他场景,比如我想从多个值中得到一个非空值,示例如下:
print result=coalesce(tolong("not a number"), tolong("42"), 33)
而这里,我们只能使用coalesce
运算符得到第一个非空值 => 42。这是[=13=的场景] 运算符无法覆盖。
我在 azure kusto 在线查询终端运行有以下两个查询
(在此 link - https://dataexplorer.azure.com/clusters/help/databases/Samples 可用)
//okay this is lag related code.
//but we need to serialize first in some way, in other words sort it
StormEvents
| order by StartTime | extend LaggedOutput = next( State,2,"NOTHING FOUND") | project State,LaggedOutput;
//lets try coalasce
//next inside the coalesce returns a empty string and that is replaced with our replacement.
//note : I think we can forgo coalesce completely because next
//already has a default value.
StormEvents
| order by StartTime | project coalesce(next(State,2,""),"COALSESCE");
所以,我的问题是,为什么要费心合并呢? next() 已经提供了我可以在这种情况下应用的默认值?
在您提供的场景中,答案是肯定的:您可以从 第二个查询 中删除 coalesce
,只需使用 next
运算符如下所示的默认值(对于第二个查询):
StormEvents
| order by StartTime
| project next(State,2,"COALSESCE")
输出与使用 project coalesce(next(State,2,""),"COALSESCE")
相同。
但是对于其他场景,比如我想从多个值中得到一个非空值,示例如下:
print result=coalesce(tolong("not a number"), tolong("42"), 33)
而这里,我们只能使用coalesce
运算符得到第一个非空值 => 42。这是[=13=的场景] 运算符无法覆盖。