TL;DR InfluxDB 技术提示 - 使用 Kapacitor 比较数据
作者 Regan Kuchan / 开发者
2016年6月9日
导航至
在本文中,我们回顾了本周最有趣的 InfluxDB 和 TICK-stack 相关问题、使用 Kapacitor 比较数据时的解决方法、来自 GitHub、IRC 和 InfluxDB Google Group 中您可能错过的操作指南和问答。
查询具有相同标签键和字段键的数据
问: 我能够成功写入数据,但在尝试在 WHERE
子句中指定标签时,却一直收到空响应。有什么建议吗?
写入数据
> INSERT candied,almonds=true almonds=50,half_almonds=51 1465317610000000000
> INSERT candied,almonds=true almonds=55,half_almonds=56 1465317620000000000
查看它们是否都在那里
> SELECT * FROM "candied"
name: candied
-------------
time almonds almonds_1 half_almonds
2016-06-07T16:40:10Z 50 true 51
2016-06-07T16:40:20Z 55 true 56
在 WHERE
子句中指定标签
> SELECT * FROM "candied" WHERE "almonds"='true'
> SELECT * FROM "candied" WHERE "almonds_1"='true'
>
答: 您遇到问题是因为您的架构包含匹配的标签键和字段键。
使用语法 almonds::tag='true'
在 WHERE
子句中指定 almonds 标签。
> SELECT * FROM "candied" WHERE "almonds"::tag='true'
name: candied
-------------
time almonds almonds_1 half_almonds
2016-06-07T16:40:10Z 50 true 51
2016-06-07T16:40:20Z 55 true 56
为了避免此类查询混淆,我们建议从您的架构中删除相同的标签键和字段键。根据您的其余数据以及您计划如何查询数据,类似以下架构的方法可能有效
> INSERT candied,status=full almonds=50 1465317610000000000
> INSERT candied,status=half almonds=51 1465317610000000000
> INSERT candied,status=full almonds=55 1465317620000000000
> INSERT candied,status=half almonds=56 1465317620000000000
> SELECT * FROM "candied"
name: candied
-------------
time almonds status
2016-06-07T16:40:10Z 50 full
2016-06-07T16:40:10Z 51 half
2016-06-07T16:40:20Z 55 full
2016-06-07T16:40:20Z 56 half
使用 Kapacitor 比较时间数据
问: 我正在尝试使用 Kapacitor 将上周的数据与本周的数据进行比较。我通过创建两个 var
(一个用于上周的数据,一个用于本周的数据)、join
这些 var
,并将连接后的数据写回 InfluxDB 来实现这一点。
唯一的问题是 join
总是使用时间作为连接键 - 当然,两个 var 中的数据具有不同的时间戳。有没有办法更改连接键或以其他方式组合这两组数据?
这是我的 TICKscript
var this_week = batch
| query('SELECT mean("cups") FROM "caffeine"."default"."coffee_consumption"')
.period(7d)
.groupBy(time(1d))
.every(30m)
var last_week = batch
| query('SELECT mean("cups") FROM "caffeine"."default"."coffee_consumption"')
.period(7d)
.groupBy(time(1d))
.every(30m)
.offset(7d)
this_week
|join(last_week)
.as('this_week','last_week')
|influxDBOut()
.database('caffeine')
.retentionPolicy('default')
.measurement('joined_coffee_data')
答: 是的!使用 shift
使上周的时间戳与本周的时间戳匹配,然后执行 join
var this_week = batch
| query('SELECT mean("cups") FROM "caffeine"."default"."coffee_consumption"')
.period(7d)
.groupBy(time(1d))
.every(30m)
var last_week = batch
| query('SELECT mean("cups") FROM "caffeine"."default"."coffee_consumption"')
.period(7d)
.groupBy(time(1d))
.every(30m)
.offset(7d)
// Shift the data to match this week's data ?
| shift(7d)
this_week
|join(last_week)
.as('this_week','last_week')
|influxDBOut()
.database('caffeine')
.retentionPolicy('default')
.measurement('joined_coffee_data')
类型转换功能
问: 我将所有数据都写为浮点数,但我希望我的查询返回整数。有没有办法使用 InfluxQL 来做到这一点?
答: 使用 <field_key>::<type>
语法将您的浮点数转换为整数。
例如
> INSERT blueberries value=20.890
> INSERT blueberries value=34.00812
> INSERT blueberries value=12.90
> SELECT "value"::integer FROM "blueberries"
name: blueberries
-----------------
time value
2016-06-07T18:43:52.875822901Z 20
2016-06-07T18:43:59.18983841Z 34
2016-06-07T18:44:07.778144875Z 12
如需更多 InfluxDB 技巧,请查看我们的常见问题解答 页面,并随时在 InfluxDB 用户组中发布您的问题。
接下来是什么?
- 下载并开始使用 InfluxDB v1.0 Beta
- 与解决方案架构师安排免费的 20 分钟咨询,以审查您的 InfluxDB 项目
- 参加我们的免费虚拟培训研讨会。
- 正在为您的基础设施寻找 InfluxDB 集群?联系销售部门以获取 InfluxDB 企业版的演示以及定价信息。