【问题标题】:Aggregating Counts in AWS Timestream Error Causes ErrorsAWS Timestream 错误中的聚合计数导致错误
【发布时间】:2021-05-26 23:05:00
【问题描述】:

我将遥测数据推送到 AWS 时间流:

measure_value::varchar IP time measure_name
test.html 192.168.1.100 2021-05-25 14:27:45 hits
blah.html 192.168.1.101 2021-05-25 14:27:45 hits
test.html 192.168.1.102 2021-05-25 14:27:46 hits

我希望在时间流中显示数据的聚合,向我显示每小时每个 uri 的点击次数。

measure_value::varchar Count time
test.html 2 2021-05-25 14:00
blah.html 1 2021-05-25 14:00

我正在尝试使用:

SELECT measure_value::varchar as URIs, CREATE_TIME_SERIES(time, measure_value::varchar) AS served FROM $__database.$__table WHERE $__timeFilter group by measure_value::varchar

但我收到了错误:

ValidationException: Duplicate timestamps are not allowed in a timeseries.

是我使用了错误的函数还是我的数据有误?

====================

尝试@berto99 的解决方案...我明白了:

SELECT measure_value::varchar AS URIs, date_trunc('hour', time) AS hour, count(measure_value::varchar) as queries
FROM $__database.$__table
WHERE $__timeFilter
GROUP BY measure_value::varchar, date_trunc('hour', time)

======================

更新 #2:

到达那里,仍然没有 100% 到达那里。

SELECT measure_value::varchar AS URIs, bin(time, 15m) AS hour, count(measure_value::varchar) as queries
FROM $__database.$__table
WHERE $__timeFilter
GROUP BY measure_value::varchar, bin(time, 15m) order by hour

【问题讨论】:

  • 感谢您的编辑...有效吗?
  • @Berto99 查看更新...它越来越接近工作了。
  • 嗨,我刚刚删除了一条评论,因为几周前我遇到了同样的问题,问题是结果集没有按时间排序,所以你应该按小时排序(检查我的答案,我已经更新了)
  • 但是,我认为您应该在图形选项中将实体设置为measure_value::varchar,以便它为每个“网页”绘制不同的线

标签: grafana amazon-timestream


【解决方案1】:

我知道可能有更好的方法可以做到这一点,但是像这样:

SELECT measure_value::varchar AS URIs, date_trunc('hour', time) AS time
FROM $__database.$__table
WHERE $__timeFilter
GROUP BY measure_value::varchar, date_trunc('hour', time)
ORDER BY date_trunc('hour', time)

也许您还必须使用 date_trunc('hour', time at time zone '-X') 调整时区,其中 X 是您的时区

【讨论】:

  • 这可行,但 grafana 无法获取每个“uri”并生成堆叠图。我相信它只是显示来自单个 URI 的数据。有什么想法吗?
【解决方案2】:

结合@Berto99 的建议和对stackoverflow 的更多挖掘——TimeStream + Grafana: not recognizing series in data,终于完成了这一切。

您必须将 Berto99 的建议放入子查询中,然后通过 CREATE_TIME_SERIES 运行它。最后的查询结果是:

WITH binned_query AS (
SELECT measure_value::varchar AS URIs, bin(time, 15m) AS bin_time, count(measure_value::varchar) as queries
FROM $__database.$__table
WHERE $__timeFilter
GROUP BY measure_value::varchar, bin(time, 15m) order by bin_time
)
SELECT URIs, CREATE_TIME_SERIES(bin_time,queries) as Endpoint
FROM binned_query 
GROUP BY URIs

从使用 date_trunc 更改为 bin,因为它让您更灵活地执行 15 分钟间隔。

漂亮的图表:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多