TL;DR InfluxDB技术技巧 - 最有趣的InfluxDB & TICK STACK相关问题、解决方案 & 如何做

导航到

在本周的文章中,我们回顾了从GitHub、IRC和InfluxData社区中收集到的最有趣的InfluxDB和TICK-stack相关的问题、解决方案、教程和问答,这些内容您可能在上周错过了。

微秒语法的细微差别

问:  当我使用u 在查询中指定微秒时,我得到了预期的结果。当我使用相同的u 在配置文件中指定微秒时,我得到了一个解析配置 错误。这是我所期望的吗?配置文件中有没有指定微秒的方法?

查询中的u

> SELECT * FROM "u_and_me" WHERE time = 200u

name: u_and_me
time value
---- -----
1970-01-01T00:00:00.0002Z 1

配置文件中的u

run: parse config: time: unknown unit u in duration 200u.

我将log-queries-after 设置为200u ,并在重启InfluxDB时看到了这个错误。

答:这是InfluxDB中的一个已知问题。正确的微秒语法在写入、查询、CLI的precision 命令和配置文件中是不同的。下表概述了每个类别的可接受微秒语法。

微秒语法 API写入 API查询/CLI查询 CLI精度 配置文件
u
us
µ
µs

在你的情况下,将配置文件中的log-queries-after 设置为200us ,你就可以正常使用了!

子查询的语法

问: 我正在尝试在一个主查询中包含多个子查询,但总是得到一个解析错误。这是否是一种支持的行为?加粗的行是子查询。

> SELECT MEAN("max"),MEAN("min") FROM ( 
  SELECT MAX("subways") FROM "public_transit" GROUP BY "id_number"; 
  SELECT MIN("subways") FROM "public_transit" GROUP BY "id_number","crowd_index")

ERR: error parsing query: found ;, expected ) at line 1, char 102

答:在InfluxQL中,查询支持多个嵌套子查询,但不支持每个子查询中有多个SELECT 语句。以下是一个多个嵌套子查询的示例。

> SELECT SUM("max") FROM ( 
  SELECT MAX("min") FROM ( 
    SELECT MIN("subways") FROM "public_transit" GROUP BY "id_number","crowd_index")
  GROUP BY "id_number")

name: public_transit
time                  sum
----                  ---
1970-01-01T00:00:00Z  29

在你的情况下,你需要将你的子查询放在两个单独的查询中。

SELECT MEAN("max") FROM ( 
  SELECT MAX("subways") FROM "public_transit" GROUP BY "id_number"); 
SELECT MEAN("min") FROM ( 
  SELECT MIN("subways") FROM "public_transit" GROUP BY "id_number","crowd_index")

name: public_transit
time                  mean
----                  ----
1970-01-01T00:00:00Z  14.5

name: public_transit
time                  mean
----                  ----
1970-01-01T00:00:00Z  12.75

标识符名称中的狡猾字符

问: 我已经成功将数据写入InfluxDB,但在尝试查询它时,我遇到了一个奇怪的错误(见下文)。我是不是做错了什么?

> INSERT dot.com value=12

> SHOW MEASUREMENTS

name: measurements
name
----
dot.com               <--- yay!


> SELECT * FROM dot.com
ERR: retention policy not found: dot   <--- ??

答:在查询中,如果标识符以数字开头、包含除[A-z,0-9,_]之外的字符,或者如果是InfluxQL关键字,则应使用双引号。在你的情况下,你的度量名称中包含一个点,因此您需要在查询中对该名称进行双引号处理。

> SELECT * FROM "dot.com"

name: dot.com
time                            value
----                            -----
2017-03-08T01:24:36.117449459Z  12

如果您感兴趣,您看到这个错误是因为InfluxDB认为您正在尝试完全限定测量名称。您通过指定其数据库和保留策略来完全限定测量,它们之间用分隔

> SELECT * FROM "tldr"."auto"."dot.com"
                |_____________________|
    "database"."retention-policy"."measurement"

name: dot.com
time                            value
----                            -----
2017-03-08T01:24:36.117449459Z  12

请查看常见问题页面,了解更多关于查询中单引号和双引号的使用,并查看数据探索页面,了解更多关于在FROM 子句中指定测量方法的信息。

接下来是什么

  • 下载 页面上的TICK栈下载已启动。
  • 云上部署:免费试用InfluxDB Cloud,它具有完全管理的集群、Kapacitor和Grafana。
  • 服务器部署:想在您的服务器上运行InfluxDB集群?免费试用14天的InfluxDB Enterprise,它具有直观的界面用于部署、监控和平衡集群,以及管理备份和恢复。
  • 分享您的经历: 300多家公司 分享了他们如何通过InfluxDB取得成功的故事。提交您的评价,作为感谢,您将获得限量版卫衣。