【问题标题】:Fill empty fields with previous values in Kusto query in Azure Data Explorer在 Azure 数据资源管理器中使用 Kusto 查询中的先前值填充空字段
【发布时间】:2021-03-31 14:48:09
【问题描述】:

背景

我们在 Azure 数据资源管理器中有一个具有以下格式的数据集。

sensorid timestamp value
valve1 24-03-2021 123
valve1 23-03-2021 234
cylinderspeed 23-03-2021 1.2
valvestatus 23-03-2021 open
valvestatus 24-03-2021 closed
cylinderspeed 25-03-2021 2

不同的传感器有不同的报告间隔,有的每秒报告一次,有的每天报告几次。

通过使用此查询

datatable (sourcetimestamp: datetime, sensorid:string, value:dynamic)
    [datetime(2021-03-23), "valve1", 123,
    datetime(2021-03-24), "valve1", 234,
    datetime(2021-03-23), "cylinderspeed", 1.2,
    datetime(2021-03-23), "valvestatus", "open",
    datetime(2021-03-24), "valvestatus", "closed",
    datetime(2021-03-25), "cylinderspeed", 2]
| summarize average=any(value) by bin(sourcetimestamp, 1s), sensorid
| evaluate pivot(sensorid, any(average))

我可以生成这张表

timestamp valve1 cylinderspeed valvestatus
23-03-2021 123 1,2 open
24-03-2021 234 closed
25-03-2021 2

问题

如何继续执行上述查询,以便使用该列中的前一个值填充空单元格?

【问题讨论】:

  • 理想情况下,示例将使用 datatable() 运算符,这将使通过示例提供答案变得更加简单。
  • @Avnera 好主意。我用 datatable() 添加了源数据

标签: azure-data-explorer kql


【解决方案1】:

您可以使用其中一个 series_fill 函数,例如series_fill_forward。请注意,让数组填充的最简单方法是使用 make-series 运算符

因为 timeseries 需要序列中的数值,所以我将 Valvestatus 的枚举转换为加倍。

datatable (sourcetimestamp: datetime, sensorid:string, value:dynamic)
[datetime(2021-03-23), "valve1", 123, 
datetime(2021-03-24), "valve1", 234, 
datetime(2021-03-23), "valvestatus", "open",
datetime(2021-03-24), "valvestatus", "closed",
datetime(2021-03-23), "cylinderspeed", 1.2,
datetime(2021-03-24), "cylinderspeed", 2]
| extend value = case(value=="open", double(1), value=="closed", double(0), value)
| make-series values = any(value) default=double(null) on sourcetimestamp from(datetime(2021-03-23 00:00:00.0000000)) to(datetime(2021-03-24 00:00:00.0000000)) step 1h by sensorid
| extend values = series_fill_forward(values)

【讨论】:

  • 您认为可以使用问题中的基本查询添加示例吗?
  • 添加了一个例子。我稍微修改了你的。您可以在 make-series 之前或之后进行枢轴和其他操作。
  • 我将“productcode”字段更改为“valvestatus”。它在那里表明某些传感器数据具有字符串类型。
  • 时间序列运算符需要一个数值,你总是可以将字符串枚举转换为数值,我修改了上面的例子。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
相关资源
最近更新 更多