TL;DR InfluxDB技术技巧 - 理解语法、连续查询和时间戳错误

导航到

在本周博客中,我们回顾了上周最有趣的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=12overall_popularity_index=3之间的空格,InfluxDB认为overall_popularity_index=3是时间戳,而实际上overall_popularity_index=3是一个无效的时间戳。

用逗号而不是空白字符将likes=12overall_popularity_index=3分开可以解决你的问题(这假设这两个元素是字段)

> INSERT ghouls likes=12,overall_popularity_index=3

有关行协议语法的更多信息,请参阅行协议教程文档。

有关更多InfluxDB技巧,请参阅我们的常见问题解答页面,并欢迎在InfluxDB用户组中提问!

下一步是什么?

  • 下载开始使用InfluxDB!
  • 安排与解决方案架构师进行免费的20分钟咨询以审查您的InfluxDB项目。
  • 参加我们免费的虚拟培训研讨会。
  • 有疑问需要立即从InfluxData支持团队获得答案吗?无限事件的支持订阅费用从每月399美元起。查看所有支持选项