首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从没有字段的流入数据库中查询?

如何从没有字段的流入数据库中查询?
EN

Stack Overflow用户
提问于 2018-08-10 14:06:58
回答 2查看 2.9K关注 0票数 3

我有一个测量数据由telegraf收集。它的结构如下:

名称: smart_device

代码语言:javascript
复制
fieldKey    fieldType
--------    ---------
exit_status integer
health_ok   boolean
read_error_rate integer
seek_error_rate integer
temp_c      integer
udma_crc_errors integer

当我查询这个数据库时,我可以这样做:

代码语言:javascript
复制
> select  * from smart_device where  "health_ok" = true limit 1
name: smart_device
time            capacity    device  enabled exit_status health_ok   host    model           read_error_rate seek_error_rate serial_no   temp_c  udma_crc_errors wwn
----            --------    ------  ------- ----------- ---------   ----    -----           --------------- --------------- ---------   ------  --------------- ---
15337409500 2000398934016   sda Enabled     0           true        osd21   Hitachi HDS722020ALA330    0        0       JK11A4B8JR2EGW  38  0       5000cca222e6384f

这是:

代码语言:javascript
复制
> select  * from smart_device limit 1
name: smart_device
time            capacity    device  enabled exit_status health_ok   host    model   read_error_rate seek_error_rate serial_no   temp_c  udma_crc_errors wwn
----            --------    ------  ------- ----------- ---------   ----    -----   --------------- --------------- ---------   ------  --------------- ---
1533046990                   sda            0                      osd21    

但是,当我尝试用空health_ok过滤掉记录时,我得到的输出是空的:

代码语言:javascript
复制
> select  * from smart_device where "health_ok"!= true 
> 

如何选择空度量值(否)?(空?) health_ok

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-11 11:43:35

不幸的是,目前无法使用InfluxQL进行此操作。InfluxDB是一种面向文档的数据库形式;它意味着度量的行可以有不同的模式。因此,对于行的字段没有null的概念;实际上此行没有该字段。例如,假设度量成本中有4行

代码语言:javascript
复制
> select * from cost
name: cost
time                isok type value
----                ---- ---- -----
1533970927859614000 true 1    100
1533970938243629700 true 2    101
1533970949371761100      3    103
1533970961571703900      2    104

如您所见,有两行带有isok=true,两行没有名为isok的字段;因此只有一种方法可以使用此查询选择具有isok字段的行的时间:

代码语言:javascript
复制
> select isok from cost
name: cost
time                isok
----                ----
1533970927859614000 true
1533970938243629700 true

由于InfluxQL当前不支持where子句中的子查询,因此无法查询没有isok字段的行(如果InfluxDB支持这种类型的查询,则可以像这个SELECT * FROM cost WHERE time NOT IN (SELECT isok FROM cost)那样进行查询)

票数 3
EN

Stack Overflow用户

发布于 2018-08-14 15:22:53

这并不完全是最初问题的答案,但我发现了一个特殊的技巧。

如果这个查询是由kapacitor执行的,它(kapacitor)有一个特殊的节点default,它允许添加一些值的缺失字段/标记。

对于health_ok查询,如下所示(tickscript):

代码语言:javascript
复制
var data = stream
    |from()
      .measurement('smart_device')
        |default()   
           .field('health_ok', FALSE)

这允许假设如果错过了health_ok,那么它就是FALSE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51788320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档