1. 程式人生 > 程式設計 >Influx Sql系列教程八:query資料查詢基本篇

Influx Sql系列教程八:query資料查詢基本篇

前面幾篇介紹了InfluxDB的新增,刪除修改資料,接下來進入查詢篇,掌握一定的SQL知識對於理解本篇博文有更好的幫助,下面在介紹查詢的基礎操作的同時,也會給出InfluxSql與SQL之間的一些差別

在開始之前,先看一下供查詢的資料

> 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
複製程式碼

1. 基本查詢

基本查詢語法如下

SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]
複製程式碼

上面的語法中,劃分了select和from兩塊

select語句

  • select * : 表示查詢所有的field和tag對應的值
  • select field_key: 表示查詢特定的field對應的值
  • select tag_key: 表示查詢的特定的tag對應的值
  • SELECT "<field_key>"::field,"<tag_key>"::tag
    : 注意::field::tag用來限定這個資料的型別為tag或者是field

from語句

from後面需要接上measurement,表示從這個mesaurement中查詢資料

  • FROM <measurement_name> 從指定的measurement中獲取資料
  • FROM <measurement_name>,<measurement_name> 從多個measurement中獲取資料
  • FROM <database_name>.<retention_policy_name>.<measurement_name>
    從某個資料庫中某個保留策略中查詢measurement中的資料

例項演示

下面給出幾個簡答的演示例項,分別介紹查詢指定的field/tag的方式

> 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
複製程式碼

2. 保留策略資料查詢

上面的定義中,說明瞭可以查詢指定保留策略中的資料,下面演示一下應該如何實現

# 建立保留策略
> create retention policy "1D" duration 1d on test
# 插入一條資料
> insert into "1D" yhh,name=二灰,phone=119 email="[email protected]",blog="http://spring.hhui.top",id=27
# 查詢
> select * from "1D".yhh
name: yhh
time                blog                   email            id name phone
----                ----                   -----            -- ---- -----
1565693045801509796 http://spring.hhui.top [email protected] 27 二灰   119
>
複製程式碼

查詢語句和一般的select沒有什麼特別的區別,唯一需要注意的是measurement前面需要加上保留策略

3. Where語句

前面的查詢主要是限定需要獲取的資料,而我們實際的場景中,更多的是查詢某類滿足條件的資料,也就是常見的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 一灰灰
複製程式碼

4. 小結

這一小節內容,介紹的是最基礎的inflxudb查詢操作,和我們瞭解的SQL基本上沒有太多的區別,可能唯一需要注意的就是制定保留策略查詢時,需要使用"<retention policy>".<measurement>的方式跟在from語句之後

其次一個需要注意的時,查詢語句中,推薦的寫法是

  • tag keyfield key請使用雙引號括起來
  • 如果型別為string,請用單引號把過濾條件括起來

如下面這種寫法,否則可能會出現問題

select * from yhh where "name"='一灰灰'
複製程式碼

下一篇,我們將介紹查詢語句中常見的分組,排序,分頁等場景的使用姿勢

II. 其他

0. 系列博文

參考博文

1. 一灰灰Blogliuyueyi.github.io/hexblog

一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 宣告

盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

image