有没有一种方法可以用Kusto语言将where子句放在另一个列中。我知道“ Pivot”语法也与SQL一起使用,以基于唯一值创建列。但是不要以为这对我有帮助。还有另一个SO question与我有相同的问题。但是他的解决方案也不起作用。
我的查询的上下文:该查询获取每个月每个计算机的运行时间。您可能想知道为什么我使用如此长的查询来实现这一目标。欢迎任何意见和调整。我是这门语言的新手。而且我已经使用顶部查询来获取另一个项目中每个VM的开始和停止时间。
原始查询:
AzureActivity
| where ResourceProvider == "Microsoft.Compute"
and ActivityStatus == "Succeeded"
and OperationName == "Deallocate Virtual Machine"
| project DeallocateResource=Resource
,DeallocatedDate=format_datetime(EventSubmissionTimestamp, 'yyyy-MM-dd')
,DeallocatedTime=format_datetime(EventSubmissionTimestamp, 'HH:mm:ss')
| join kind=fullouter (AzureActivity
| where ResourceProvider == "Microsoft.Compute"
and ActivityStatus == "Succeeded"
and OperationName == "Start Virtual Machine"
| project StartupResource=Resource
,StartDate=format_datetime(EventSubmissionTimestamp, 'yyyy-MM-dd')
,StartTime=format_datetime(EventSubmissionTimestamp, 'HH:mm:ss')
) on $right.StartupResource == $left.DeallocateResource
| where StartDate == DeallocatedDate
| project Resource=coalesce(StartupResource, DeallocateResource) ,
Runtime = round(todouble(datetime_diff('minute', todatetime(strcat(StartDate , " " , DeallocatedTime )) , todatetime(strcat(StartDate , " " , StartTime )))) / 60)
| summarize sum(Runtime) by Resource
现在,上面的查询将获得运行时间与您在门户中专门设置的时间范围之和。 为了获得每个月的运行时间总和(日志分析设置为90天,所以3个月前),我添加了这些where语句。在3个不同查询中。工作完成了,我得到了3个不同的表,每个月的运行时间分别为(month1,month2,month3)。
| where TimeGenerated > ago(30d)
| where TimeGenerated between(ago(30d) .. ago(60d) )
| where TimeGenerated between(ago(60d) .. ago(90d) )
但是这些是3个不同的查询和3个不同的表。我的目标是让您拥有3种不同的外观(在一个表中生成时间的where语句)
尝试了SO问题解决方案,但未按计划进行(将这些代码行添加到我的原始查询中时,出现了无法解析名为“ TimeGenerated”的标量表达式的错误)
| summarize sum(Runtime) by Resource , bin(TimeGenerated, 1m)
| summarize Fistmonth = TimeGenerated > ago(30d),
SecondMonth = TimeGenerated between(ago(30d) .. ago(60d)) ,
ThirdMonth = Runtime_,TimeGenerated between(ago(60d) .. ago(90d) ) by Resource
有人知道我在这里缺少或监督的事情吗?库斯托有可能吗? 而且我是否将查询的开销用于可以完成几行的事情。
答案 0 :(得分:1)
如果我正确理解了您的情况,则假设您提前知道要定位的月份,则可以使用sumif
实现这一目标。
这是一个例子:
datatable(Resource:string, Runtime:double, TimeGenerated:datetime)
[
"A", 13.4, datetime(2019-01-01 11:11:11),
"B", 1.34, datetime(2019-01-01 10:10:10),
"C", 0.13, datetime(2019-01-01 12:12:12),
"A", 12.4, datetime(2019-02-01 11:11:11),
"B", 1.24, datetime(2019-02-01 09:09:09),
"B", 2.24, datetime(2019-02-01 09:10:09),
"B", 3.24, datetime(2019-02-01 09:11:09),
"C", 0.12, datetime(2019-02-01 08:08:08),
"A", 14.4, datetime(2019-03-01 07:07:07),
"B", 1.44, datetime(2019-03-01 05:05:05),
"C", 0.14, datetime(2019-03-01 06:06:06),
]
| summarize Month1 = sumif(Runtime, TimeGenerated between(datetime(2019-01-01)..datetime(2019-02-01))),
Month2 = sumif(Runtime, TimeGenerated between(datetime(2019-02-01)..datetime(2019-03-01))),
Month3 = sumif(Runtime, TimeGenerated between(datetime(2019-03-01)..datetime(2019-04-01)))
by Resource