web-dev-qa-db-fra.com

Comment utiliser la fonction Distinct dans influxDB

J'utilise influx DB et émet la commande,

SELECT * FROM interface

Ci-dessous la sortie

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"

Lorsque la commande est émise, cela fonctionne bien. 

SELECT distinct(value) FROM interface 

Mais quand émettre une commande pour la colonne de chemin, il n'y a pas de sortie Vous vous demandez ce qui me manque?

SELECT distinct(path) FROM interface 
5
Ammad

Merci pour l'info supplémentaire @Ammad.

Réponse courte

Essayez GROUP BY avec des balises. DISTINCT() ne fonctionne qu'avec des champs.

Longue réponse

distinct() fonctionne sur les champs, pas sur les balises. Vois ici:

https://docs.influxdata.com/influxdb/v1.0/query_language/functions/#distinct

DISTINCT () renvoie les valeurs uniques d'un seul champ. 

Les valeurs de champ sont censées être les données réelles qui vous intéressent. Les valeurs de balises sont des métadonnées: données relatives aux données. La plupart des fonctions des systèmes de base de données agissent sur les données ou les métadonnées, mais rarement sur les deux.

Voici un exemple de jouet sur la v0.13, montrant que distinct() ne fonctionne vraiment pas avec les tags:

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"

Maintenant quelques questions:

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

Maintenant, essayons distinct()

select distinct(tag1) from foo

Résultats sans sortie du tout. 

select distinct(field1) from foo

name: foo
time                    distinct
1970-01-01T00:00:00Z    some text
1970-01-01T00:00:00Z    some more text

Vous pourrez peut-être obtenir ce que vous voulez en utilisant GROUP BY. Comme ça:

select distinct(field1) from foo group by tag1

Qui donne:

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

Cela affiche chaque valeur de tag1 et les valeurs de field1 associées à cette valeur tag1.

J'espère que cela pourra aider.

9
Jason

Il existe un moyen de résoudre ce problème en utilisant une double instruction SELECT:

> select distinct("tag1") from (select "field1", "tag1" from foo)

La requête interne renvoie les champs field1 et tag1 qui peuvent être interrogés à l'extérieur comme des champs normaux auxquels vous pouvez appliquer distinct ().

J'espère que cela vous aidera. Cosmo.

7
Cosmo

Il y a SHOW TAG VALUES WITH key = path que l'on peut utiliser pour obtenir des valeurs de balises uniques

2
Alexander