如何在 influxDB 中使用 Distinct 函数
How to use Distinct function in influxDB
我正在使用 influx 数据库并发出命令,
SELECT * FROM interface
下面是输出-
interface
time element path value
2016-08-24T21:22:16.7080877Z "link-layer-address0" "key:/arp-information/link-layer-address0" "3c:61:04:48:df:91"
2016-08-24T21:22:17.9090527Z "link-layer-address0" "key:/arp-information/link-layer-address0" "3c:61:04:48:df:92"
2016-08-24T21:22:19.8584133Z "link-layer-address1" "key:/arp-information/link-layer-address1" "3c:61:04:48:df:97"
2016-08-24T21:22:20.3377847Z "link-layer-address2" "key:/arp-information/link-layer-address2" "3c:61:04:48:df:90"
发出命令时它工作正常。
SELECT distinct(value) FROM interface
但是当对路径列发出命令时没有输出。想知道我错过了什么?
SELECT distinct(path) FROM interface
感谢@Ammad 提供的额外信息。
简答
尝试 GROUP BY
标签。 DISTINCT()
仅适用于字段。
长答案
distinct()
适用于字段,而不是标签。看这里:
https://docs.influxdata.com/influxdb/v1.0/query_language/functions/#distinct
DISTINCT() returns the unique values of a single field.
字段值是您感兴趣的实际数据。标记值是元数据:关于数据的数据。数据库系统中的大多数功能都对数据或元数据进行操作,但很少同时对两者进行操作。
这是 v0.13 上的玩具示例,显示 distinct()
确实不适用于标签:
insert foo,tag1=asdf field1="some text"
insert foo,tag1=asdf field1="some text"
insert foo,tag1=asdfg field1="some text"
insert foo,tag1=asdfg field1="some text"
insert foo,tag1=asdfg field1="some more text"
insert foo,tag1=asdfg field1="some more text"
现在一些查询:
select * from foo
name: foo
time field1 tag1
2016-09-12T05:19:53.563221799Z some text asdf
2016-09-12T05:20:03.027652248Z some text asdf
2016-09-12T05:20:10.04939971Z some text asdfg
2016-09-12T05:20:11.235525548Z some text asdfg
2016-09-12T05:20:17.418920163Z some more text asdfg
2016-09-12T05:20:19.354742922Z some more text asdfg
现在让我们试试distinct()
select distinct(tag1) from foo
结果根本没有输出。
select distinct(field1) from foo
name: foo
time distinct
1970-01-01T00:00:00Z some text
1970-01-01T00:00:00Z some more text
您也许可以使用 GROUP BY
获得您想要的东西。像这样:
select distinct(field1) from foo group by tag1
给出:
name: foo
tags: tag1=asdf
time distinct
1970-01-01T00:00:00Z some text
name: foo
tags: tag1=asdfg
time distinct
1970-01-01T00:00:00Z some text
1970-01-01T00:00:00Z some more text
这显示了 tag1
的每个值,以及与该 tag1
值关联的 field1
的值。
希望对您有所帮助。
有一种方法可以通过使用双 SELECT 语句来解决这个问题:
> select distinct("tag1") from (select "field1", "tag1" from foo)
内部查询 returns field1 和 tag1 可以像普通字段一样在外部查询,您可以对其应用 distinct().
希望对您有所帮助。
宇宙.
有 SHOW TAG VALUES WITH key = path
可用于获取唯一标记值
SHOW TAG VALUES from "measurements" WITH key = path
例如:
SHOW TAG VALUES from redis with key="server"
我正在使用 influx 数据库并发出命令,
SELECT * FROM interface
下面是输出-
interface
time element path value
2016-08-24T21:22:16.7080877Z "link-layer-address0" "key:/arp-information/link-layer-address0" "3c:61:04:48:df:91"
2016-08-24T21:22:17.9090527Z "link-layer-address0" "key:/arp-information/link-layer-address0" "3c:61:04:48:df:92"
2016-08-24T21:22:19.8584133Z "link-layer-address1" "key:/arp-information/link-layer-address1" "3c:61:04:48:df:97"
2016-08-24T21:22:20.3377847Z "link-layer-address2" "key:/arp-information/link-layer-address2" "3c:61:04:48:df:90"
发出命令时它工作正常。
SELECT distinct(value) FROM interface
但是当对路径列发出命令时没有输出。想知道我错过了什么?
SELECT distinct(path) FROM interface
感谢@Ammad 提供的额外信息。
简答
尝试 GROUP BY
标签。 DISTINCT()
仅适用于字段。
长答案
distinct()
适用于字段,而不是标签。看这里:
https://docs.influxdata.com/influxdb/v1.0/query_language/functions/#distinct
DISTINCT() returns the unique values of a single field.
字段值是您感兴趣的实际数据。标记值是元数据:关于数据的数据。数据库系统中的大多数功能都对数据或元数据进行操作,但很少同时对两者进行操作。
这是 v0.13 上的玩具示例,显示 distinct()
确实不适用于标签:
insert foo,tag1=asdf field1="some text"
insert foo,tag1=asdf field1="some text"
insert foo,tag1=asdfg field1="some text"
insert foo,tag1=asdfg field1="some text"
insert foo,tag1=asdfg field1="some more text"
insert foo,tag1=asdfg field1="some more text"
现在一些查询:
select * from foo
name: foo
time field1 tag1
2016-09-12T05:19:53.563221799Z some text asdf
2016-09-12T05:20:03.027652248Z some text asdf
2016-09-12T05:20:10.04939971Z some text asdfg
2016-09-12T05:20:11.235525548Z some text asdfg
2016-09-12T05:20:17.418920163Z some more text asdfg
2016-09-12T05:20:19.354742922Z some more text asdfg
现在让我们试试distinct()
select distinct(tag1) from foo
结果根本没有输出。
select distinct(field1) from foo
name: foo
time distinct
1970-01-01T00:00:00Z some text
1970-01-01T00:00:00Z some more text
您也许可以使用 GROUP BY
获得您想要的东西。像这样:
select distinct(field1) from foo group by tag1
给出:
name: foo
tags: tag1=asdf
time distinct
1970-01-01T00:00:00Z some text
name: foo
tags: tag1=asdfg
time distinct
1970-01-01T00:00:00Z some text
1970-01-01T00:00:00Z some more text
这显示了 tag1
的每个值,以及与该 tag1
值关联的 field1
的值。
希望对您有所帮助。
有一种方法可以通过使用双 SELECT 语句来解决这个问题:
> select distinct("tag1") from (select "field1", "tag1" from foo)
内部查询 returns field1 和 tag1 可以像普通字段一样在外部查询,您可以对其应用 distinct().
希望对您有所帮助。 宇宙.
有 SHOW TAG VALUES WITH key = path
可用于获取唯一标记值
SHOW TAG VALUES from "measurements" WITH key = path
例如:
SHOW TAG VALUES from redis with key="server"