TL;DR InfluxDB技术技巧 - 理解语法、连续查询和时间戳错误
作者 Regan Kuchan / 开发者
2016年10月13日
导航到
在本周博客中,我们回顾了上周最有趣的InfluxDB和语法、连续查询和错误的时间戳问题、解决方案、操作指南和问答,这些问题可能在上周被您忽略了。GitHub、IRC和InfluxDB Google Group。
InfluxQL中将聚合与非聚合混合
Q:我正在使用一个函数和单独的标签值运行查询。当使用 max()
函数时,这工作得很好,但当我使用 sum()
函数时,我收到错误:mixing aggregate and non-aggregate queries is not supported
。我不认为我的语法是错误的;我错过了什么?
原始数据
> SELECT * FROM "halloween_c?ndy"
name: halloween_c?ndy
------------------------
time candied_?pples headache_index
2016-10-12T17:02:00Z 2 0.5
2016-10-12T17:03:00Z 3 1.2
2016-10-12T17:04:00Z 0.5 1.0
查询
> SELECT max("candied_?pples"),"headache_index" FROM "halloween_c?ndy"
name: halloween_c?ndy
------------------------
time max headache_index
2016-10-12T17:03:00Z 3 1.2
> SELECT sum("candied_?pples"),"headache_index" FROM "halloween_c?ndy"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
A:您第一个查询(max()
)中的函数是一个选择函数。选择函数返回一个单个的原始值。您第二个查询(sum()
)中的函数是一个聚合函数。聚合函数返回一个单个的计算值。
InfluxDB不支持在同一个SELECT
语句中使用聚合函数和独立的标签键或字段键。因为聚合函数返回计算值,所以对于未聚合的标签或字段没有明显的单个值可以返回。
在你的例子中,第一个查询返回了candied_?pples
的最大值(3
)以及当candied_?pples
等于3
时的headache_index
的值(1.2
)。第二个查询将返回candied_?pples
的三个值的总和(5.5
),但对于原始的headache_index
标签没有明显的单个值可以返回。
修改连续查询
问:我能在创建连续查询后更新它吗?
答:目前,InfluxDB没有ALTER CONTINUOUS QUERY
语句。要更改现有的连续查询,您需要先执行DROP
,然后重新创建连续查询。
理解何时错误的时间戳意味着错误的语法
问:我正在尝试将数据写入InfluxDB,但不断出现bad timestamp
错误。唯一的问题是,我的行协议中没有时间戳。我以为如果没有提供时间戳,InfluxDB会自动将服务器的本地时间戳分配给点;这是错误的吗?
示例
> INSERT ghouls likes=12 overall_popularity_index=3
ERR: {"error":"unable to parse 'ghouls likes=12 overall_popularity_index=3': bad timestamp"}
答:你是对的,如果行协议中没有包含时间戳,InfluxDB会自动将服务器的本地纳秒UTC时间戳分配给点。你遇到的错误时间戳实际上是由语法错误引起的
行协议对空白字符敏感。由于likes=12
和overall_popularity_index=3
之间的空格,InfluxDB认为overall_popularity_index=3
是时间戳,而实际上overall_popularity_index=3
是一个无效的时间戳。
用逗号而不是空白字符将likes=12
和overall_popularity_index=3
分开可以解决你的问题(这假设这两个元素是字段)
> INSERT ghouls likes=12,overall_popularity_index=3
有关行协议语法的更多信息,请参阅行协议教程文档。
有关更多InfluxDB技巧,请参阅我们的常见问题解答页面,并欢迎在InfluxDB用户组中提问!
下一步是什么?
- 下载并开始使用InfluxDB!
- 安排与解决方案架构师进行免费的20分钟咨询以审查您的InfluxDB项目。
- 参加我们免费的虚拟培训研讨会。
- 有疑问需要立即从InfluxData支持团队获得答案吗?无限事件的支持订阅费用从每月399美元起。查看所有支持选项