练习 - 使用 where 运算符筛选数据
回顾一下,你已从显示的结果中筛选出或筛选掉了某些列。 在本单元中,你将了解如何回答有关在不同区域或时间间隔发生的气象事件的类型以及哪些类型的事件造成了损失的问题。
使用 where
运算符
到现在为止,你使用的所有运算符都返回所选列。 现在,我们来看看特定的数据行。
where
运算符可筛选出满足特定条件的结果。 在第一个示例中,你使用数值运算符“大于”(>
) 将整数列与最小值进行比较。 具体而言,你只想查看已造成财产损失的暴风雨,因此,你将查看财产损失大于零的数据行。
运行以下查询:
StormEvents | where DamageProperty > 0 | project State, EventType, DamageProperty | take 10
应获得如下图所示的结果:
请注意,返回的所有行实际上都具有大于零的“DamageProperty”值。
同样,也可以筛选在一定天数前发生的事件。 例如,运行以下查询,其中
365d
表示 365 天:StormEvents | where DamageProperty > 0 | where StartTime > ago(365d) | project State, EventType, DamageProperty
请注意,此查询不返回任何结果。 由于此数据是 2007 年的,因此没有过去一年的记录。
使用字符串值进行筛选
看起来有很多类型的风暴已经在美国各地造成了损失。 我们把暴风雨发生的范围缩小到某一位置,例如佛罗里达州。
运行以下查询,该查询使用带字符串值
"FLORIDA"
的第二个where
运算符:StormEvents | where DamageCrops > 0 | where State == "FLORIDA" | project State, EventType, DamageCrops
应获得如下图所示的结果:
请注意,此查询返回的所有记录均来自佛罗里达州且农作物损失大于零。
使用 has
运算符进行筛选
上一查询结果中有一种事件类型称为“雷雨大风”。 让我们看看在佛罗里达是否有任何其他类型的风造成了财产损失。 我们将使用 has
运算符搜索 wind
的字符串匹配项。 has
运算符执行匹配完整搜索词且不区分大小写的搜索。
运行以下查询:
StormEvents | where DamageProperty > 0 | where State == "FLORIDA" | where EventType has "wind" | project StartTime, EventType, DamageProperty
应获得如下图所示的结果:
请注意,结果中不会再出现“Tornado”之类的事件,但会出现“Thunderstorm Wind”和“Strong Wind”事件类型。
contains
运算符类似于 has
,但它会匹配任何子字符串。 例如,以下查询将返回诸如“Freezing Fog”和“Frost/Freeze”之类的结果。
StormEvents | where EventType contains "free"
has
运算符的性能高于 contains
运算符,因此在两者之间进行选择时应选择使用 has
。
按 datetime
值筛选
让我们更细致地了解一下日历年上半年发生的损失。 将搜索限制为特定时间范围内的事件可能会很有用。 某些具有 Kusto 查询语言的界面具有下拉时间选取器,但其他一些界面则需要将日期筛选条件纳入查询本身。
由于时间范围受两个极端值的限制,因此,最有效的方法是构造一个查询,并在其中选择一个介于这两个极端时间之间的值。
构造此日期范围的语法如下所示:
where
时间between
(datetime(
值)..datetime(
值))
让我们将此
datetime
范围纳入到已看到的一种查询中。 运行以下查询:StormEvents | where StartTime between (datetime(2007-01-01)..datetime(2007-06-01)) | where DamageProperty > 0 | where State == "FLORIDA" | project StartTime, EventType, DamageProperty | take 50
应获得如下图所示的结果:
请注意,所有日期都在该年的前半年内(1 月至 6 月)。 你可能还会注意到,即使选择了佛罗里达州的事件,该州也未显示为输出列,因为
project
运算符中没有指定它。