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