schema查询语法

InfluxQL是一种类似SQL的查询语言,用于与InfluxDB中的数据进行交互。下面我们要介绍一些有用的查询schema的语法:

  • SHOW DATABASES
  • SHOW RETENTION POLICIES
  • SHOW SERIES
  • SHOW MEASUREMENTS
  • SHOW TAG KEYS
  • SHOW TAG VALUES
  • SHOW FIELD KEYS

在开始之前,默认已经登入了CLI:

  1. $ influx -precision rfc3339
  2. Connected to http://localhost:8086 version 1.3.x
  3. InfluxDB shell 1.3.x
  4. >

SHOW DATABASES

返回当前实例上的所有的数据库。

语法

  1. SHOW DATABASES

例子

例一:运行SHOW DATABASES查询

  1. > SHOW DATABASES
  2. name: databases
  3. name
  4. ----
  5. NOAA_water_database
  6. _internal

SHOW RETENTION POLICIES

返回指定数据库的保留策略的列表。

语法

  1. SHOW RETENTION POLICIES [ON <database_name>]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

例子

例一:运行带有ON子句的SHOW RETENTION POLICIES

  1. > SHOW RETENTION POLICIES ON NOAA_water_database
  2. name duration shardGroupDuration replicaN default
  3. ---- -------- ------------------ -------- -------
  4. autogen 0s 168h0m0s 1 true

该查询以表格格式返回数据库NOAA_water_database中的保留策略列表。 该数据库有一个名为autogen的保留策略。该保留策略具有无限持续时间,持续时间七天的shard group,副本数为1,并且是数据库的DEFAULT保留策略。

例二:运行不带ON子句的SHOW RETENTION POLICIES

CLI

使用USE <database_name>指定数据库:

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW RETENTION POLICIES
  4. name duration shardGroupDuration replicaN default
  5. ---- -------- ------------------ -------- -------
  6. autogen 0s 168h0m0s 1 true
HTTP API

db参数指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW RETENTION POLICIES"
  2. {
  3. "results": [
  4. {
  5. "statement_id": 0,
  6. "series": [
  7. {
  8. "columns": [
  9. "name",
  10. "duration",
  11. "shardGroupDuration",
  12. "replicaN",
  13. "default"
  14. ],
  15. "values": [
  16. [
  17. "autogen",
  18. "0s",
  19. "168h0m0s",
  20. 1,
  21. true
  22. ]
  23. ]
  24. }
  25. ]
  26. }
  27. ]
  28. }

SHOW SERIES

返回指定数据库的series列表。

语法

  1. SHOW SERIES [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> [ '<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

FROMWHERELIMITOFFSET子句是可选的。 WHERE子句支持tag比较; field比较对SHOW SERIES查询无效。

WHERE子句中支持的运算符:

= 等于<> 不等于!= 不等于=~ 匹配!~ 不匹配

例子

例一:运行带ON子句的SHOW SERIES

  1. > SHOW SERIES ON NOAA_water_database
  2. key
  3. ---
  4. average_temperature,location=coyote_creek
  5. average_temperature,location=santa_monica
  6. h2o_feet,location=coyote_creek
  7. h2o_feet,location=santa_monica
  8. h2o_pH,location=coyote_creek
  9. h2o_pH,location=santa_monica
  10. h2o_quality,location=coyote_creek,randtag=1
  11. h2o_quality,location=coyote_creek,randtag=2
  12. h2o_quality,location=coyote_creek,randtag=3
  13. h2o_quality,location=santa_monica,randtag=1
  14. h2o_quality,location=santa_monica,randtag=2
  15. h2o_quality,location=santa_monica,randtag=3
  16. h2o_temperature,location=coyote_creek
  17. h2o_temperature,location=santa_monica

查询的输出类似于行协议格式。第一个逗号之前的所有内容都是measurement名称。第一个逗号后的所有内容都是tag key或tag value。 NOAA_water_database有五个不同的measurement和14个不同的series。

例二:运行不带ON子句的SHOW SERIES

CLI

USE <database_name>指定数据库:

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW SERIES
  4. key
  5. ---
  6. average_temperature,location=coyote_creek
  7. average_temperature,location=santa_monica
  8. h2o_feet,location=coyote_creek
  9. h2o_feet,location=santa_monica
  10. h2o_pH,location=coyote_creek
  11. h2o_pH,location=santa_monica
  12. h2o_quality,location=coyote_creek,randtag=1
  13. h2o_quality,location=coyote_creek,randtag=2
  14. h2o_quality,location=coyote_creek,randtag=3
  15. h2o_quality,location=santa_monica,randtag=1
  16. h2o_quality,location=santa_monica,randtag=2
  17. h2o_quality,location=santa_monica,randtag=3
  18. h2o_temperature,location=coyote_creek
  19. h2o_temperature,location=santa_monica
HTTP API

db参数指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW SERIES"
  2. {
  3. "results": [
  4. {
  5. "statement_id": 0,
  6. "series": [
  7. {
  8. "columns": [
  9. "key"
  10. ],
  11. "values": [
  12. [
  13. "average_temperature,location=coyote_creek"
  14. ],
  15. [
  16. "average_temperature,location=santa_monica"
  17. ],
  18. [
  19. "h2o_feet,location=coyote_creek"
  20. ],
  21. [
  22. "h2o_feet,location=santa_monica"
  23. ],
  24. [
  25. "h2o_pH,location=coyote_creek"
  26. ],
  27. [
  28. "h2o_pH,location=santa_monica"
  29. ],
  30. [
  31. "h2o_quality,location=coyote_creek,randtag=1"
  32. ],
  33. [
  34. "h2o_quality,location=coyote_creek,randtag=2"
  35. ],
  36. [
  37. "h2o_quality,location=coyote_creek,randtag=3"
  38. ],
  39. [
  40. "h2o_quality,location=santa_monica,randtag=1"
  41. ],
  42. [
  43. "h2o_quality,location=santa_monica,randtag=2"
  44. ],
  45. [
  46. "h2o_quality,location=santa_monica,randtag=3"
  47. ],
  48. [
  49. "h2o_temperature,location=coyote_creek"
  50. ],
  51. [
  52. "h2o_temperature,location=santa_monica"
  53. ]
  54. ]
  55. }
  56. ]
  57. }
  58. ]
  59. }

例三:运行带有多个子句的SHOW SERIES

  1. > SHOW SERIES ON NOAA_water_database FROM "h2o_quality" WHERE "location" = 'coyote_creek' LIMIT 2
  2. key
  3. ---
  4. h2o_quality,location=coyote_creek,randtag=1
  5. h2o_quality,location=coyote_creek,randtag=2

查询返回数据库NOAA_water_database中与measurement h2o_quality相关联的并且tag为location = coyote_creek的两个series。

SHOW MEASUREMENTS

返回指定数据库的measurement列表。

语法

  1. SHOW MEASUREMENTS [ON <database_name>] [WITH MEASUREMENT <regular_expression>] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

WITHWHERELIMITOFFSET子句是可选的。 WHERE子句支持tag比较; field比较对SHOW MEASUREMENTS查询无效。

WHERE子句中支持的运算符:

= 等于<> 不等于!= 不等于=~ 匹配!~ 不匹配

例子

例一:运行带ON子句的SHOW MEASUREMENTS

  1. > SHOW MEASUREMENTS ON NOAA_water_database
  2. name: measurements
  3. name
  4. ----
  5. average_temperature
  6. h2o_feet
  7. h2o_pH
  8. h2o_quality
  9. h2o_temperature

查询返回数据库NOAA_water_database中的measurement列表。数据库有五个measurement:average_temperatureh2o_feeth2o_pHh2o_qualityh2o_temperature

例二:运行不带ON子句的SHOW MEASUREMENTS

CLI

USE <database_name>指定数据库。

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW MEASUREMENTS
  4. name: measurements
  5. name
  6. ----
  7. average_temperature
  8. h2o_feet
  9. h2o_pH
  10. h2o_quality
  11. h2o_temperature

HTTP API

使用参数db指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW MEASUREMENTS"
  2. {
  3. {
  4. "results": [
  5. {
  6. "statement_id": 0,
  7. "series": [
  8. {
  9. "name": "measurements",
  10. "columns": [
  11. "name"
  12. ],
  13. "values": [
  14. [
  15. "average_temperature"
  16. ],
  17. [
  18. "h2o_feet"
  19. ],
  20. [
  21. "h2o_pH"
  22. ],
  23. [
  24. "h2o_quality"
  25. ],
  26. [
  27. "h2o_temperature"
  28. ]
  29. ]
  30. }
  31. ]
  32. }
  33. ]
  34. }

例三:运行有多个子句的SHOW MEASUREMENTS(1)

  1. > SHOW MEASUREMENTS ON NOAA_water_database WITH MEASUREMENT =~ /h2o.*/ LIMIT 2 OFFSET 1
  2. name: measurements
  3. name
  4. ----
  5. h2o_pH
  6. h2o_quality

该查询返回以以h2o开头的NOAA_water_database数据库中的measurement。 LIMITOFFSET子句将返回的measurement名称,并且数量限制为两个,再将结果偏移一个,所以跳过了measurementh2o_feet

例四:运行有多个子句的SHOW MEASUREMENTS(2)

  1. > SHOW MEASUREMENTS ON NOAA_water_database WITH MEASUREMENT =~ /h2o.*/ WHERE "randtag" =~ /\d/
  2. name: measurements
  3. name
  4. ----
  5. h2o_quality

该查询返回NOAA_water_database中以h2o开头,并且tagrandtag包含一个整数的所有measurement。

SHOW TAG KEYS

返回指定数据库的tag key列表。

语法

  1. SHOW TAG KEYS [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

FROMWHERE子句是可选的。 WHERE子句支持tag比较; field比较对SHOW TAG KEYS查询无效。

WHERE子句中支持的运算符:

= 等于<> 不等于!= 不等于=~ 匹配!~ 不匹配

例子

例一:运行带有ON子句的SHOW TAG KEYS

  1. > SHOW TAG KEYS ON "NOAA_water_database"
  2. name: average_temperature
  3. tagKey
  4. ------
  5. location
  6. name: h2o_feet
  7. tagKey
  8. ------
  9. location
  10. name: h2o_pH
  11. tagKey
  12. ------
  13. location
  14. name: h2o_quality
  15. tagKey
  16. ------
  17. location
  18. randtag
  19. name: h2o_temperature
  20. tagKey
  21. ------
  22. location

查询返回数据库NOAA_water_database中的tag key列表。输出按measurement名称给tag key分组; 它显示每个measurement都具有tag keylocation,并且measurementh2o_quality具有额外的tag key randtag

例二:运行不带ON子句的SHOW TAG KEYS

CLI

USE <database_name>指定数据库:

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW TAG KEYS
  4. name: average_temperature
  5. tagKey
  6. ------
  7. location
  8. name: h2o_feet
  9. tagKey
  10. ------
  11. location
  12. name: h2o_pH
  13. tagKey
  14. ------
  15. location
  16. name: h2o_quality
  17. tagKey
  18. ------
  19. location
  20. randtag
  21. name: h2o_temperature
  22. tagKey
  23. ------
  24. location
HTTP API

用参数db指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW TAG KEYS"
  2. {
  3. "results": [
  4. {
  5. "statement_id": 0,
  6. "series": [
  7. {
  8. "name": "average_temperature",
  9. "columns": [
  10. "tagKey"
  11. ],
  12. "values": [
  13. [
  14. "location"
  15. ]
  16. ]
  17. },
  18. {
  19. "name": "h2o_feet",
  20. "columns": [
  21. "tagKey"
  22. ],
  23. "values": [
  24. [
  25. "location"
  26. ]
  27. ]
  28. },
  29. {
  30. "name": "h2o_pH",
  31. "columns": [
  32. "tagKey"
  33. ],
  34. "values": [
  35. [
  36. "location"
  37. ]
  38. ]
  39. },
  40. {
  41. "name": "h2o_quality",
  42. "columns": [
  43. "tagKey"
  44. ],
  45. "values": [
  46. [
  47. "location"
  48. ],
  49. [
  50. "randtag"
  51. ]
  52. ]
  53. },
  54. {
  55. "name": "h2o_temperature",
  56. "columns": [
  57. "tagKey"
  58. ],
  59. "values": [
  60. [
  61. "location"
  62. ]
  63. ]
  64. }
  65. ]
  66. }
  67. ]
  68. }

例三:运行带有多个子句的SHOW TAG KEYS

  1. > SHOW TAG KEYS ON "NOAA_water_database" FROM "h2o_quality" LIMIT 1 OFFSET 1
  2. name: h2o_quality
  3. tagKey
  4. ------
  5. randtag

该查询从数据库NOAA_water_database的measurementh2o_quality中返回tag key。 LIMITOFFSET子句限制返回到一个tag key,再将结果偏移一个。

SHOW TAG VALUES

返回数据库中指定tag key的tag value列表。

语法

  1. SHOW TAG VALUES [ON <database_name>][FROM_clause] WITH KEY [ [<operator> "<tag_key>" | <regular_expression>] | [IN ("<tag_key1>","<tag_key2")]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

WITH子句是必须的,它支持指定一个单独的tag key、一个表达式或是多个tag key。

FROMWHERELIMITOFFSET子句是可选的。 WHERE子句支持tag比较; field比较对SHOW TAG KEYS查询无效。

WHERE子句中支持的运算符:

= 等于<> 不等于!= 不等于=~ 匹配!~ 不匹配

例子

例一:运行带有ON子句的SHOW TAG VALUES

  1. > SHOW TAG VALUES ON "NOAA_water_database" WITH KEY = "randtag"
  2. name: h2o_quality
  3. key value
  4. --- -----
  5. randtag 1
  6. randtag 2
  7. randtag 3

该查询返回数据库NOAA_water_database,tag key为randtag的所有tag value。SHOW TAG VALUES将结果按measurement名字分组。

例二:运行不带ON子句的SHOW TAG VALUES

CLI

USE <database_name>指定数据库:

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW TAG VALUES WITH KEY = "randtag"
  4. name: h2o_quality
  5. key value
  6. --- -----
  7. randtag 1
  8. randtag 2
  9. randtag 3
HTTP API

用参数db指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode 'q=SHOW TAG VALUES WITH KEY = "randtag"'
  2. {
  3. "results": [
  4. {
  5. "statement_id": 0,
  6. "series": [
  7. {
  8. "name": "h2o_quality",
  9. "columns": [
  10. "key",
  11. "value"
  12. ],
  13. "values": [
  14. [
  15. "randtag",
  16. "1"
  17. ],
  18. [
  19. "randtag",
  20. "2"
  21. ],
  22. [
  23. "randtag",
  24. "3"
  25. ]
  26. ]
  27. }
  28. ]
  29. }
  30. ]
  31. }

例三:运行带有多个子句的SHOW TAG VALUES

  1. > SHOW TAG VALUES ON "NOAA_water_database" WITH KEY IN ("location","randtag") WHERE "randtag" =~ /./ LIMIT 3
  2. name: h2o_quality
  3. key value
  4. --- -----
  5. location coyote_creek
  6. location santa_monica
  7. randtag 1

该查询从数据库NOAA_water_database的所有measurement中返回tag key为location或者randtag,并且randtag的tag value不为空的tag value。 LIMIT子句限制返回三个tag value。

SHOW FIELD KEYS

返回field key以及其field value的数据类型。

语法

  1. SHOW FIELD KEYS [ON <database_name>] [FROM <measurement_name>]

语法描述

ON <database_name>是可选的。如果查询不包括ON <database_name>,则必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中指定db查询字符串参数。

FROM子句也是可选的。

例子

例一:运行一个带ON子句的SHOW FIELD KEYS

  1. > SHOW FIELD KEYS ON "NOAA_water_database"
  2. name: average_temperature
  3. fieldKey fieldType
  4. -------- ---------
  5. degrees float
  6. name: h2o_feet
  7. fieldKey fieldType
  8. -------- ---------
  9. level description string
  10. water_level float
  11. name: h2o_pH
  12. fieldKey fieldType
  13. -------- ---------
  14. pH float
  15. name: h2o_quality
  16. fieldKey fieldType
  17. -------- ---------
  18. index float
  19. name: h2o_temperature
  20. fieldKey fieldType
  21. -------- ---------
  22. degrees float

该查询返回数据库NOAA_water_database中的每个measurement对应的field key以及其数据类型。

例二:运行一个不带ON子句的SHOW FIELD KEYS

CLI

USE <database_name>指定数据库:

  1. > USE NOAA_water_database
  2. Using database NOAA_water_database
  3. > SHOW FIELD KEYS
  4. name: average_temperature
  5. fieldKey fieldType
  6. -------- ---------
  7. degrees float
  8. name: h2o_feet
  9. fieldKey fieldType
  10. -------- ---------
  11. level description string
  12. water_level float
  13. name: h2o_pH
  14. fieldKey fieldType
  15. -------- ---------
  16. pH float
  17. name: h2o_quality
  18. fieldKey fieldType
  19. -------- ---------
  20. index float
  21. name: h2o_temperature
  22. fieldKey fieldType
  23. -------- ---------
  24. degrees float
HTTP API

用参数db指定数据库:

  1. ~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode 'q=SHOW FIELD KEYS'
  2. {
  3. "results": [
  4. {
  5. "statement_id": 0,
  6. "series": [
  7. {
  8. "name": "average_temperature",
  9. "columns": [
  10. "fieldKey",
  11. "fieldType"
  12. ],
  13. "values": [
  14. [
  15. "degrees",
  16. "float"
  17. ]
  18. ]
  19. },
  20. {
  21. "name": "h2o_feet",
  22. "columns": [
  23. "fieldKey",
  24. "fieldType"
  25. ],
  26. "values": [
  27. [
  28. "level description",
  29. "string"
  30. ],
  31. [
  32. "water_level",
  33. "float"
  34. ]
  35. ]
  36. },
  37. {
  38. "name": "h2o_pH",
  39. "columns": [
  40. "fieldKey",
  41. "fieldType"
  42. ],
  43. "values": [
  44. [
  45. "pH",
  46. "float"
  47. ]
  48. ]
  49. },
  50. {
  51. "name": "h2o_quality",
  52. "columns": [
  53. "fieldKey",
  54. "fieldType"
  55. ],
  56. "values": [
  57. [
  58. "index",
  59. "float"
  60. ]
  61. ]
  62. },
  63. {
  64. "name": "h2o_temperature",
  65. "columns": [
  66. "fieldKey",
  67. "fieldType"
  68. ],
  69. "values": [
  70. [
  71. "degrees",
  72. "float"
  73. ]
  74. ]
  75. }
  76. ]
  77. }
  78. ]
  79. }

例三:运行带有FROM子句的SHOW FIELD KEYS

  1. > SHOW FIELD KEYS ON "NOAA_water_database" FROM "h2o_feet"
  2. name: h2o_feet
  3. fieldKey fieldType
  4. -------- ---------
  5. level description string
  6. water_level float

该查询返回数据库NOAA_water_database中measurement为h2o_feet的对应的field key以及其数据类型。

SHOW FIELD KEYS的常见问题

问题一:SHOW FIELD KEYS和field 类型的差异

field value的数据类型在同一个shard里面一样但是在多个shard里面可以不同,SHOW FIELD KEYS遍历每个shard返回与field key相关的每种数据类型。

例子

field all_the_types中存储了四个不同的数据类型

  1. > SHOW FIELD KEYS
  2. name: mymeas
  3. fieldKey fieldType
  4. -------- ---------
  5. all_the_types integer
  6. all_the_types float
  7. all_the_types string
  8. all_the_types boolean

注意SHOW FIELD KEYS处理field的类型差异和SELECT语句不一样。