前面幾篇介紹了InfluxDB的添加,刪除修改數據,接下來進入查詢篇,掌握必定的SQL知識對於理解本篇博文有更好的幫助,下面在介紹查詢的基礎操做的同時,也會給出InfluxSql與SQL之間的一些差異git
在開始以前,先看一下供查詢的數據github
> show measurements name: measurements name ---- yhh > select * from yhh name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 1563889547738266214 30 http://blog.hhui.top 11 一灰灰 1563889704754695002 30 http://blog.hhui.top 11 一灰灰2 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 > show tag keys from yhh name: yhh tagKey ------ name phone
基本查詢語法以下spring
SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
上面的語法中,劃分了select和from兩塊sql
select語句數據庫
select *
: 表示查詢全部的field和tag對應的值select field_key
: 表示查詢特定的field對應的值select tag_key
: 表示查詢的特定的tag對應的值SELECT "<field_key>"::field,"<tag_key>"::tag
: 注意::field
和::tag
用來限定這個數據的類型爲tag或者是fieldfrom語句express
from後面須要接上measurement,表示從這個mesaurement中查詢數據bash
FROM <measurement_name>
從指定的measurement中獲取數據FROM <measurement_name>,<measurement_name>
從多個measurement中獲取數據FROM <database_name>.<retention_policy_name>.<measurement_name>
從某個數據庫中某個保留策略中查詢measurement中的數據實例演示學習
下面給出幾個簡答的演示實例,分別介紹查詢指定的field/tag的方式ui
> select age from yhh; name: yhh time age ---- --- 1563889538654374538 26 1563889547738266214 30 1563889704754695002 30 1563889723440000821 30 > select "age"::field, "name"::tag from yhh; name: yhh time age name ---- --- ---- 1563889538654374538 26 一灰灰 1563889547738266214 30 一灰灰 1563889704754695002 30 一灰灰2 1563889723440000821 30 一灰灰3
上面的定義中,說明了能夠查詢指定保留策略中的數據,下面演示一下應該如何實現code
# 建立保留策略 > create retention policy "1D" duration 1d on test # 插入一條數據 > insert into "1D" yhh,name=二灰,phone=119 email="bangzewu@126.com",blog="http://spring.hhui.top",id=27 # 查詢 > select * from "1D".yhh name: yhh time blog email id name phone ---- ---- ----- -- ---- ----- 1565693045801509796 http://spring.hhui.top bangzewu@126.com 27 二灰 119 >
查詢語句和通常的select沒有什麼特別的區別,惟一須要注意的是measurement前面須要加上保留策略
前面的查詢主要是限定須要獲取的數據,而咱們實際的場景中,更多的是查詢某類知足條件的數據,也就是常見的SQL中加上where查詢條件限定
語法以下
SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]
主要看一下where後面的條件表達式,由於influxdb中的數據能夠劃分爲兩類,這兩種不一樣的類型,在構建查詢語句的時候,會有一些區別
field查詢條件
咱們已知field的類型有四種:string|int|boolean|float
,因此它支持的操做符有
操做符 | 說明 |
---|---|
= |
相等 |
<> , != |
不相同 |
> , >= |
大於,大於等於 |
< , <= |
小於,小於等於 |
tag查詢條件
在influxdb中tag都是string類型,會創建索引,因此基於tag的查詢效率通常來說是優於field查詢的,它支持的操做符爲
操做符 | 說明 |
---|---|
= |
相等 |
<> , != |
不相同 |
在influxdb中沒有in查詢,不一樣的查詢條件可使用and/or來鏈接,表示同時知足or一個知足便可,下滿給出幾個簡單的實例
# 根據field進行查詢 > select * from yhh where age=26 name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 # 根據tag進行查詢 > select * from yhh where phone!='' name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 # 簡單的運算查詢 > select * from yhh where age + 2>30 name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889547738266214 30 http://blog.hhui.top 11 一灰灰 1563889704754695002 30 http://blog.hhui.top 11 一灰灰2 1563889723440000821 30 http://blog.hhui.top 11 一灰灰3 110 > select * from yhh where "name"='一灰灰' name: yhh time age blog id name phone ---- --- ---- -- ---- ----- 1563889538654374538 26 http://blog.hhui.top 10 一灰灰 1563889547738266214 30 http://blog.hhui.top 11 一灰灰
這一小節內容,介紹的是最基礎的inflxudb查詢操做,和咱們瞭解的SQL基本上沒有太多的區別,可能惟一須要注意的就是制定保留策略查詢時,須要使用"<retention policy>".<measurement>
的方式跟在from語句以後
其次一個須要注意的時,查詢語句中,推薦的寫法是
tag key
或field key
請使用雙引號括起來以下面這種寫法,不然可能會出現問題
select * from yhh where "name"='一灰灰'
下一篇,咱們將介紹查詢語句中常見的分組,排序,分頁等場景的使用姿式
參考博文
一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛
盡信書則不如,已上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
一灰灰blog