schema查询语法

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

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

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

    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. }

    返回指定数据库的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. "h2o_temperature,location=coyote_creek"
    49. ],
    50. [
    51. "h2o_temperature,location=santa_monica"
    52. ]
    53. ]
    54. }
    55. ]
    56. }
    57. ]
    58. }

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

    查询返回数据库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]

    语法描述

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

    WHERE子句中支持的运算符:

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

    例子

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

    1. > SHOW MEASUREMENTS ON NOAA_water_database
    2. name: measurements
    3. name
    4. ----
    5. h2o_feet
    6. h2o_pH
    7. h2o_quality
    8. 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。

    返回指定数据库的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. }

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

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

    SHOW TAG VALUES

    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。

    FROMWHERELIMIT和子句是可选的。 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。

    返回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. 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相关的每种数据类型。

    例子

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