Schema探索
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。
$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.x
InfluxDB shell 1.7.x
>除了使用以下语法,更建议您在控制台做database查询和操作语法。
SHOW DATABASES
返回当前账号有权查看的所有数据库。
SHOW DATABASES示例
运行SHOW DATABASES查询
> SHOW DATABASES
name: databases
name
----
NOAA_water_database
_internal该查询以表格的形式返回数据库的名称。当前账号有权限查看数据库NOAA_water_database和_internal。
SHOW RETENTION POLICIES
返回指定数据库的所有数据保留策略。
SHOW RETENTION POLICIES [ON <database_name>]语法描述
ON <database_name>是可选的。如果查询中没有包含ON <database_name>,您必须在CLI中使用USE <database_name>指定数据库,或者在HTTP API请求中使用参数db指定数据库。
示例
示例一:运行带有ON子句的SHOW RETENTION POLICIES查询
> SHOW RETENTION POLICIES ON NOAA_water_database
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true该查询以表格的形式返回数据库NOAA_water_database中所有的保留策略。这个数据库有一个名为autogen的保留策略,该保留策略具有无限的持续时间,为期7天的shard group持续时间,复制系数为1,并且它是这个数据库的默认(DEFAULT)保留策略。
示例二:运行不带有ON子句的SHOW RETENTION POLICIES查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW RETENTION POLICIES
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW RETENTION POLICIES"
{
"results": [
{
"statement_id": 0,
"series": [
{
"columns": [
"name",
"duration",
"shardGroupDuration",
"replicaN",
"default"
],
"values": [
[
"autogen",
"0s",
"168h0m0s",
1,
true
]
]
}
]
}
]
}SHOW SERIES
返回指定数据库的序列。
语法
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查询
> SHOW SERIES ON NOAA_water_database
key
---
average_temperature,location=coyote_creek
average_temperature,location=santa_monica
h2o_feet,location=coyote_creek
h2o_feet,location=santa_monica
h2o_pH,location=coyote_creek
h2o_pH,location=santa_monica
h2o_quality,location=coyote_creek,randtag=1
h2o_quality,location=coyote_creek,randtag=2
h2o_quality,location=coyote_creek,randtag=3
h2o_quality,location=santa_monica,randtag=1
h2o_quality,location=santa_monica,randtag=2
h2o_quality,location=santa_monica,randtag=3
h2o_temperature,location=coyote_creek
h2o_temperature,location=santa_monica该查询的输出类似行协议格式。第一个逗号之前的所有内容是measurement的名字。第一个逗号之后的所有内容都是tag key或者tag value。数据库NOAA_water_database有五个不同的measurement和14个不同的序列。
示例二:运行不带有ON子句的SHOW SERIES查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW SERIES
key
---
average_temperature,location=coyote_creek
average_temperature,location=santa_monica
h2o_feet,location=coyote_creek
h2o_feet,location=santa_monica
h2o_pH,location=coyote_creek
h2o_pH,location=santa_monica
h2o_quality,location=coyote_creek,randtag=1
h2o_quality,location=coyote_creek,randtag=2
h2o_quality,location=coyote_creek,randtag=3
h2o_quality,location=santa_monica,randtag=1
h2o_quality,location=santa_monica,randtag=2
h2o_quality,location=santa_monica,randtag=3
h2o_temperature,location=coyote_creek
h2o_temperature,location=santa_monica使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW SERIES"
{
"results": [
{
"statement_id": 0,
"series": [
{
"columns": [
"key"
],
"values": [
[
"average_temperature,location=coyote_creek"
],
[
"average_temperature,location=santa_monica"
],
[
"h2o_feet,location=coyote_creek"
],
[
"h2o_feet,location=santa_monica"
],
[
"h2o_pH,location=coyote_creek"
],
[
"h2o_pH,location=santa_monica"
],
[
"h2o_quality,location=coyote_creek,randtag=1"
],
[
"h2o_quality,location=coyote_creek,randtag=2"
],
[
"h2o_quality,location=coyote_creek,randtag=3"
],
[
"h2o_quality,location=santa_monica,randtag=1"
],
[
"h2o_quality,location=santa_monica,randtag=2"
],
[
"h2o_quality,location=santa_monica,randtag=3"
],
[
"h2o_temperature,location=coyote_creek"
],
[
"h2o_temperature,location=santa_monica"
]
]
}
]
}
]
}示例三:运行带有多个子句的SHOW SERIES查询
> SHOW SERIES ON NOAA_water_database FROM "h2o_quality" WHERE "location" = 'coyote_creek' LIMIT 2
key
---
h2o_quality,location=coyote_creek,randtag=1
h2o_quality,location=coyote_creek,randtag=2该查询返回数据库NOAA_water_database中,与measurement h2o_quality和tag location = coyote_creek相关联的所有序列。LIMIT子句将返回的序列个数限制为2。
SHOW MEASUREMENTS
返回指定数据库的measurement。
语法
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查询
> SHOW MEASUREMENTS ON NOAA_water_database
name: measurements
name
----
average_temperature
h2o_feet
h2o_pH
h2o_quality
h2o_temperature该查询返回数据库NOAA_water_database中的measurement。数据库NOAA_water_database有五个measurement:average_temperature、h2o_feet、h2o_pH、h2o_quality和h2o_temperature。
示例二:运行不带有ON子句的SHOW MEASUREMENTS查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW MEASUREMENTS
name: measurements
name
----
average_temperature
h2o_feet
h2o_pH
h2o_quality
h2o_temperature使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW MEASUREMENTS"
{
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "measurements",
"columns": [
"name"
],
"values": [
[
"average_temperature"
],
[
"h2o_feet"
],
[
"h2o_pH"
],
[
"h2o_quality"
],
[
"h2o_temperature"
]
]
}
]
}
]
}示例三:运行带有多个子句的SHOW MEASUREMENTS查询(i)
> SHOW MEASUREMENTS ON NOAA_water_database WITH MEASUREMENT =~ /h2o.*/ LIMIT 2 OFFSET 1
name: measurements
name
----
h2o_pH
h2o_quality该查询返回数据库NOAA_water_database中名字以h2o开头的measurement。LIMIT子句将返回的measurement名字的个数限制为2,OFFSET子句将measurement h2o_feet跳过,从h2o_feet后的measurement开始输出。
示例四:运行带有多个子句的SHOW MEASUREMENTS查询(ii)
> SHOW MEASUREMENTS ON NOAA_water_database WITH MEASUREMENT =~ /h2o.*/ WHERE "randtag" =~ /\d/
name: measurements
name
----
h2o_quality该查询返回数据库NOAA_water_database中名字以h2o开头并且randtag的值包含一个整数的measurement。
SHOW TAG KEYS
返回指定数据库的tag key。
语法
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查询
> SHOW TAG KEYS ON "NOAA_water_database"
name: average_temperature
tagKey
------
location
name: h2o_feet
tagKey
------
location
name: h2o_pH
tagKey
------
location
name: h2o_quality
tagKey
------
location
randtag
name: h2o_temperature
tagKey
------
location该查询返回数据库NOAA_water_database中的tag key。查询结果按measurement的名字进行分组;它展示了每个measurement都有一个名为location的tag key,并且,measurement h2o_quality还具有另外一个tag key randtag。
示例二:运行不带有ON子句的SHOW TAG KEYS查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW TAG KEYS
name: average_temperature
tagKey
------
location
name: h2o_feet
tagKey
------
location
name: h2o_pH
tagKey
------
location
name: h2o_quality
tagKey
------
location
randtag
name: h2o_temperature
tagKey
------
location使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode "q=SHOW TAG KEYS"
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "average_temperature",
"columns": [
"tagKey"
],
"values": [
[
"location"
]
]
},
{
"name": "h2o_feet",
"columns": [
"tagKey"
],
"values": [
[
"location"
]
]
},
{
"name": "h2o_pH",
"columns": [
"tagKey"
],
"values": [
[
"location"
]
]
},
{
"name": "h2o_quality",
"columns": [
"tagKey"
],
"values": [
[
"location"
],
[
"randtag"
]
]
},
{
"name": "h2o_temperature",
"columns": [
"tagKey"
],
"values": [
[
"location"
]
]
}
]
}
]
}示例三:运行带有多个子句的SHOW TAG KEYS查询
> SHOW TAG KEYS ON "NOAA_water_database" FROM "h2o_quality" LIMIT 1 OFFSET 1
name: h2o_quality
tagKey
------
randtag该查询返回数据库NOAA_water_database中名为h2o_quality的measurement里的tag key。LIMIT子句将返回的tag key的个数限制为1,OFFSET子句将输出结果偏移一个。
SHOW TAG VALUES
返回数据库中指定tag key的tag value。
语法
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查询
> SHOW TAG VALUES ON "NOAA_water_database" WITH KEY = "randtag"
name: h2o_quality
key value
--- -----
randtag 1
randtag 2
randtag 3该查询返回数据库NOAA_water_database中的tag key randtag的所有tag value。SHOW TAG VALUES将查询结果按measurement的名字进行分组。
示例二:运行不带有ON子句的SHOW TAG VALUES查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW TAG VALUES WITH KEY = "randtag"
name: h2o_quality
key value
--- -----
randtag 1
randtag 2
randtag 3使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode 'q=SHOW TAG VALUES WITH KEY = "randtag"'
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "h2o_quality",
"columns": [
"key",
"value"
],
"values": [
[
"randtag",
"1"
],
[
"randtag",
"2"
],
[
"randtag",
"3"
]
]
}
]
}
]
}示例三:运行带有多个子句的SHOW TAG VALUES查询
> SHOW TAG VALUES ON "NOAA_water_database" WITH KEY IN ("location","randtag") WHERE "randtag" =~ /./ LIMIT 3
name: h2o_quality
key value
--- -----
location coyote_creek
location santa_monica
randtag 1该查询从数据库NOAA_water_database的所有measurement中返回location或randtag的tag value,并且返回的数据还需满足条件:randtag的tag value不为空。LIMIT子句将返回的tag value的个数限制为3。
SHOW FIELD KEYS
返回field key和field value的数据类型。
语法
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查询
> SHOW FIELD KEYS ON "NOAA_water_database"
name: average_temperature
fieldKey fieldType
-------- ---------
degrees float
name: h2o_feet
fieldKey fieldType
-------- ---------
level description string
water_level float
name: h2o_pH
fieldKey fieldType
-------- ---------
pH float
name: h2o_quality
fieldKey fieldType
-------- ---------
index float
name: h2o_temperature
fieldKey fieldType
-------- ---------
degrees float该查询返回数据库NOAA_water_database中每个measurement的field key以及对应的field value的数据类型。
示例二:运行不带有ON子句的SHOW FIELD KEYS查询
使用USE <database_name>指定数据库
> USE NOAA_water_database
Using database NOAA_water_database
> SHOW FIELD KEYS
name: average_temperature
fieldKey fieldType
-------- ---------
degrees float
name: h2o_feet
fieldKey fieldType
-------- ---------
level description string
water_level float
name: h2o_pH
fieldKey fieldType
-------- ---------
pH float
name: h2o_quality
fieldKey fieldType
-------- ---------
index float
name: h2o_temperature
fieldKey fieldType
-------- ---------
degrees float使用参数db指定数据库
~# curl -G "http://localhost:8086/query?db=NOAA_water_database&pretty=true" --data-urlencode 'q=SHOW FIELD KEYS'
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "average_temperature",
"columns": [
"fieldKey",
"fieldType"
],
"values": [
[
"degrees",
"float"
]
]
},
{
"name": "h2o_feet",
"columns": [
"fieldKey",
"fieldType"
],
"values": [
[
"level description",
"string"
],
[
"water_level",
"float"
]
]
},
{
"name": "h2o_pH",
"columns": [
"fieldKey",
"fieldType"
],
"values": [
[
"pH",
"float"
]
]
},
{
"name": "h2o_quality",
"columns": [
"fieldKey",
"fieldType"
],
"values": [
[
"index",
"float"
]
]
},
{
"name": "h2o_temperature",
"columns": [
"fieldKey",
"fieldType"
],
"values": [
[
"degrees",
"float"
]
]
}
]
}
]
}示例三:运行带有FROM子句的SHOW FIELD KEYS查询
> SHOW FIELD KEYS ON "NOAA_water_database" FROM "h2o_feet"
name: h2o_feet
fieldKey fieldType
-------- ---------
level description string
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中存储了四个不同的数据类型:
> SHOW FIELD KEYS
name: mymeas
fieldKey fieldType
-------- ---------
all_the_types integer
all_the_types float
all_the_types string
all_the_types booleanSHOW FIELD KEYS处理field的类型差异与SELECT语句不一样。请查阅FAQ相关章节获得更多相关信息。
InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.