【问题标题】:Query InfluxDB for specific hours every day每天查询特定时间的 InfluxDB
【发布时间】:2017-03-15 19:31:15
【问题描述】:

每天查询 InfluxDB 特定时间的最佳方法是什么,例如,我有一个系列有签入/签出活动,我需要在上个月每天下午 2 点到下午 3 点之间查看它们,我知道在查询语言上没有直接的方法 - 当前版本 1.2 - 不确定是否有解决方法或什么?

【问题讨论】:

    标签: influxdb


    【解决方案1】:

    我一直在寻找相同的内容并找到了您的问题。正如您所说,语法似乎不允许这样做

    我最近的尝试是尝试使用正则表达式一段时间 WHERE clausule,目前 InfluxDB 不支持。

    所以这应该是答案,我不会发布答案就这么说。

    但是,在处理不同的问题时,我找到了一种在您的特定情况下可能对您有帮助也可能没有帮助的方法。这是一个不是很好的解决方法,但它似乎可以工作在您可以制定聚合/选择您想在给定时间看到的内容的情况下这样你最终每小时就有一个值。例如,(给定人员在该小时内签到签出的平均/最大/计数数,这可能是您要查找的内容,或者您​​可以使用它来确定您希望他们单独查询查看的日期那里发生了什么)。

    例如,我想获取每天上午 00:00 到 06:00 的用电量测量值。我创建了第一个子查询,将测量值分组从给定日期的 00:00 开始除以 6 小时。然后在主查询中,我按 24 小时分组并选择第一个值。像这样

    SELECT first("mean") FROM (SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5'  AND time > '2017-01-01' GROUP BY time(6h) ) WHERE time > '2017-01-01' GROUP BY time(24h)
    

    如果您想要下午 2-4 点,即 14:00-16:00,您需要先在子查询中按 2 小时分组,然后将集合偏移 14 小时,使其从 14:00 开始。

    SELECT first("mean") FROM ( SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5'  AND time > '2017-01-01T14:00:00Z' GROUP BY time(2h) ) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h)
    

    只是为了检查它。在我的 1.2 InfluxDB 中,这是最终结果:

    Energy
    time    first
    2017-01-01T14:00:00Z    86.41747572815534
    2017-01-02T14:00:00Z    43.49722222222222
    2017-01-03T14:00:00Z    81.05416666666666
    

    子查询返回:

    Energy
    time    mean
    2017-01-01T14:00:00Z    86.41747572815534
    2017-01-01T16:00:00Z    91.46879334257974
    2017-01-01T18:00:00Z    89.14027777777778
    2017-01-01T20:00:00Z    94.47434119278779
    2017-01-01T22:00:00Z    89.94305555555556
    2017-01-02T00:00:00Z    86.29542302357837
    2017-01-02T02:00:00Z    92.2625
    2017-01-02T04:00:00Z    89.93619972260748
    2017-01-02T06:00:00Z    87.78888888888889
    2017-01-02T08:00:00Z    50.790277777777774
    2017-01-02T10:00:00Z    0.6597222222222222
    2017-01-02T12:00:00Z    0.10957004160887657
    2017-01-02T14:00:00Z    43.49722222222222
    2017-01-02T16:00:00Z    86.0610263522885
    2017-01-02T18:00:00Z    86.59778085991678
    2017-01-02T20:00:00Z    91.56527777777778
    2017-01-02T22:00:00Z    90.52565880721221
    2017-01-03T00:00:00Z    86.79166666666667
    2017-01-03T02:00:00Z    87.15533980582525
    2017-01-03T04:00:00Z    89.47988904299584
    2017-01-03T06:00:00Z    91.58888888888889
    2017-01-03T08:00:00Z    41.67732962447844
    2017-01-03T10:00:00Z    16.216366158113733
    2017-01-03T12:00:00Z    25.27739251040222
    2017-01-03T14:00:00Z    81.05416666666666
    

    如果需要 13:00-15:00,则需要将上例中的子查询偏移 1h。

    14:00-15:00:

    SELECT first("mean") FROM ( SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5'  AND time > '2017-01-01T14:00:00Z' GROUP BY time(1h) ) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h)
    

    希望这会有所帮助:)

    【讨论】:

    • 无论如何我都无法使用聚合,我有不同的情况,但我给 +1 可能对其他人有帮助;)
    猜你喜欢
    • 2021-01-04
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多