练习 - 使用 where 运算符筛选数据

已完成

回顾一下,你已从显示的结果中筛选出或筛选掉了某些列。 在本单元中,你将了解如何回答有关在不同区域或时间间隔发生的气象事件的类型以及哪些类型的事件造成了损失的问题。

使用 where 运算符

到现在为止,你使用的所有运算符都返回所选列。 现在,我们来看看特定的数据行。

where 运算符可筛选出满足特定条件的结果。 在第一个示例中,你使用数值运算符“大于”(>) 将整数列与最小值进行比较。 具体而言,你只想查看已造成财产损失的暴风雨,因此,你将查看财产损失大于零的数据行。

  1. 运行以下查询:

    运行查询

    StormEvents
    | where DamageProperty > 0
    | project State, EventType, DamageProperty
    | take 10
    
  2. 应获得如下图所示的结果:

    带有大于零的数值运算符的 where 运算符的查询结果屏幕截图。

  3. 请注意,返回的所有行实际上都具有大于零的“DamageProperty”值。

  4. 同样,也可以筛选在一定天数前发生的事件。 例如,运行以下查询,其中 365d 表示 365 天:

    运行查询

    StormEvents
    | where DamageProperty > 0
    | where StartTime > ago(365d)
    | project State, EventType, DamageProperty
    
  5. 请注意,此查询不返回任何结果。 由于此数据是 2007 年的,因此没有过去一年的记录。

使用字符串值进行筛选

看起来有很多类型的风暴已经在美国各地造成了损失。 我们把暴风雨发生的范围缩小到某一位置,例如佛罗里达州。

  1. 运行以下查询,该查询使用带字符串值 "FLORIDA" 的第二个 where 运算符:

    运行查询

    StormEvents
    | where DamageCrops > 0
    | where State == "FLORIDA"
    | project State, EventType, DamageCrops
    
  2. 应获得如下图所示的结果:

    两个 where 运算符的查询结果屏幕截图。

  3. 请注意,此查询返回的所有记录均来自佛罗里达州且农作物损失大于零。

使用 has 运算符进行筛选

上一查询结果中有一种事件类型称为“雷雨大风”。 让我们看看在佛罗里达是否有任何其他类型的风造成了财产损失。 我们将使用 has 运算符搜索 wind 的字符串匹配项。 has 运算符执行匹配完整搜索词且不区分大小写的搜索。

  1. 运行以下查询:

    运行查询

    StormEvents
    | where DamageProperty > 0
    | where State == "FLORIDA"
    | where EventType has "wind"
    | project StartTime, EventType, DamageProperty
    
  2. 应获得如下图所示的结果:

    where 和 has 运算符的查询结果屏幕截图。

  3. 请注意,结果中不会再出现“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())

  1. 让我们将此 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
    
  2. 应获得如下图所示的结果:

    包含时间范围的 where 运算符的查询结果屏幕截图。

  3. 请注意,所有日期都在该年的前半年内(1 月至 6 月)。 你可能还会注意到,即使选择了佛罗里达州的事件,该州也未显示为输出列,因为 project 运算符中没有指定它。