全部产品
云市场

Schema探索

更新时间:2019-04-19 15:50:57

InfluxQL是一种类似SQL的查询语言,用于与TSDB For InfluxDB®中的数据进行交互。以下章节介绍了实用的查询schema的语法。

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

示例数据

本文档使用的数据可在示例数据章节中下载。

在开始之前,请先登陆Influx CLI:

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

SHOW DATABASES

返回当前账号有权查看的所有数据库。注意:除了使用本语法,更建议您在控制台做database查询和操作

语法

  1. SHOW DATABASES

示例

示例一:运行SHOW DATABASES查询

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

该查询以表格的形式返回数据库的名称。当前账号有权限查看数据库NOAA_water_database_internal

SHOW RETENTION POLICIES

返回指定数据库的所有数据保留策略。注意:除了使用本语法,更建议您在控制台做retention查询和操作

语法

  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的保留策略,该保留策略具有无限的持续时间,为期7天的shard group持续时间,复制系数为1,并且它是这个数据库的默认(DEFAULT)保留策略。

示例二:运行不带有ON子句的SHOW RETENTION POLICIES查询

使用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

使用参数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

返回指定数据库的序列。

语法

  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指定数据库。

FROM子句,WHERE子句,LIMIT子句和OFFSET子句是可选的。WHERE子句支持tag比较;在SHOW SERIES查询中,field比较是无效的。

WHERE子句中支持的操作符:

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

请查阅数据探索章节获得关于FROM子句、LIMIT子句、OFFSET子句和正则表达式的介绍。

示例

示例一:运行带有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个不同的序列。

示例二:运行不带有ON子句的SHOW SERIES查询

使用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

使用参数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相关联的所有序列。LIMIT子句将返回的序列个数限制为2。

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指定数据库。

WITH子句,WHERE子句,LIMIT子句和OFFSET子句是可选的。WHERE子句支持tag比较;在SHOW MEASUREMENTS查询中,field比较是无效的。

WHERE子句中支持的操作符:

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

请查阅数据探索章节获得关于LIMIT子句、OFFSET子句和正则表达式的介绍。

示例

示例一:运行带有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。数据库NOAA_water_database有五个measurement:average_temperatureh2o_feeth2o_pHh2o_qualityh2o_temperature

示例二:运行不带有ON子句的SHOW MEASUREMENTS查询

使用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

使用参数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查询(i)

  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

该查询返回数据库NOAA_water_database中名字以h2o开头的measurement。LIMIT子句将返回的measurement名字的个数限制为2,OFFSET子句将measurement h2o_feet跳过,从h2o_feet后的measurement开始输出。

示例四:运行带有多个子句的SHOW MEASUREMENTS查询(ii)

  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开头并且randtag的值包含一个整数的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指定数据库。

FROM子句和WHERE子句是可选的。WHERE子句支持tag比较;在SHOW TAG KEYS查询中,field比较是无效的。

WHERE子句中支持的操作符:

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

请查阅数据探索章节获得关于FROM子句、LIMIT子句、OFFSET子句和正则表达式的介绍。

示例

示例一:运行带有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的名字进行分组;它展示了每个measurement都有一个名为location的tag key,并且,measurement h2o_quality还具有另外一个tag key randtag

示例二:运行不带有ON子句的SHOW TAG KEYS查询

使用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

使用参数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中名为h2o_quality的measurement里的tag key。LIMIT子句将返回的tag key的个数限制为1,OFFSET子句将输出结果偏移一个。

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。

FROM子句、WHERE子句、LIMIT子句和OFFSET子句是可选的。WHERE子句支持tag比较;在SHOW TAG VALUES查询中,field比较是无效的。

WITH子句和WHERE子句中支持的操作符:

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

请查阅数据探索章节获得关于FROM子句、LIMIT子句、OFFSET子句和正则表达式的介绍。

示例

示例一:运行带有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查询

使用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

使用参数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中返回locationrandtag的tag value,并且返回的数据还需满足条件:randtag的tag value不为空。LIMIT子句将返回的tag value的个数限制为3。

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子句也是可选的。请查阅数据探索章节获得关于FROM子句的介绍。

注释:在不同的shard,field的数据类型可以不同。如果您的field中有多个数据类型,那么SHOW FIELD KEYS按以下顺序返回不同类型的数据:float,integer,string,boolean。

示例

示例一:运行带有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以及对应的field value的数据类型。

示例二:运行不带有ON子句的SHOW FIELD KEYS查询

使用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

使用参数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里的fields key以及对应的field value的数据类型。

SHOW FIELD KEYS的常见问题

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

在同一个shard,field value的数据类型不能发生变化,但是在不同的shard,field的数据类型可以不同。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语句不一样。请查阅FAQ相关章节获得更多相关信息。


InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.