【數據庫】時序數據庫InfluxDB介紹

時序數據庫 InfluxDB

influxDB下載:官方下載
influxDB安裝:官方安裝
influxDB驗證:influx -version

開啓遠程訪問:/etc/influxdb/infuxdb.conf

[http]
auth-enabled = true # 開啓訪問認證:默認關閉,匿名用戶也可訪問
bind-address = "0.0.0.0:8086" # 服務地址綁定:默認lcoalhost:8086,不支持遠程訪問

1. 概念

1.1 influxDB 核心概念

  1. point: 表示數據單條記錄,類似RDMS行記錄:measurement + tag + timestamp(唯一區分)
  2. time: 時間屬性,每條記錄必備屬性,若插入不存在則默認添加,默認格式:RFC3339 UTC
  3. field(至少1個): 屬性名,類似RDMS表字段,注意InfluxDB字段不能被索引,查詢字段值是全表掃描,因此fields不建議包含常用的查詢元數據,但是基於Tag掃描是包含索引提供搜索效率
  4. Field values: 屬性值,類似RDMS字段值,包含:string, float, integer, or Boolean等類型
  5. tag: 標籤(可選),區別於field,tag可以被索引,通常用於用於存放常用的搜索元數據字段
  6. measurement: 度量,相當於RDMS種的數據表,包含tag、filed、time數據,不同的measurement可以不同的retention策略
  7. retention policy: 數據保留策略,標識數據保存時間(DURATION)和數據保存副本數(REPLICATION),influxDB默認數據存儲策略:autogen(永久保存 + 副本數1)
  8. series: 共享1個measurement、tag的point數據結合,標識1條數據的來源,同1 series數據在物理上順序存儲
insert instance,dc=us-west-2,server=ec2-dcas-address-db-01 cpu_usage_user=5.2,cpu_usage_system=1.0,cpu_usage_idle=90.7,cpu_usage_wait=3.1
insert instance,dc=us-west-2,server=ec2-dcas-address-db-01 memory_total=8009556,memory_used=1417488,memory_free=244076,memory_shared=118960,memory_buffered=0,memory_cached=6347992,memory_available=6082012
insert instance,dc=us-west-2,server=ec2-dcsindexsvc-01 cpu_usage_user=4.1,cpu_usage_system=2.0,cpu_usage_idle=97.7,cpu_usage_wait=2.3
insert instance,dc=us-west-2,server=ec2-dcsindexsvc-01 memory_total=32394732,memory_used=11330204,memory_free=5618464,memory_shared=229908,memory_buffered=0,memory_cached=15446064,memory_available=20433240
insert instance,dc=us-west-2,server=ec2-autodenalicontentpoi-01 cpu_usage_user=13.6,cpu_usage_system=0.8,cpu_usage_idle=85.6,cpu_usage_wait=0.6
insert instance,dc=us-west-2,server=ec2-autodenalicontentpoi-01 memory_total=64990084,memory_used=842448,memory_free=348420,memory_shared=17174872,memory_buffered=0,memory_cached=63799216,memory_available=46397536

measuremen插入6條數據,相同tag共3組,通過show series顯示series詳情

注意:避免使用特殊形式的保留key:_field,_measurement,*_time,若tag/field_key包含保留key,則point數據會被丟棄

1.2 詞彙說明

  1. aggregation: 聚合,類似RDMS的統計功能
  2. batch: influxDB point數據集,採用influxDB行協議格式,通過(0x0A))分割,批量數據可通過HTTP請求寫入數據庫,可以解答降低HTTP負載,建議批量:5000-10000
  3. bucket: 桶,influxDB Series數據保存位置,每個數據庫和數據存儲策略集合體表示1個Bucket
  4. Continuous Query(CQ): 連續查詢:數據庫內自動、週期內執行influx query,要求select語句必須包含group by time()語句
  5. database: 用戶、數據存儲策略、CQ、時間序列化數據的邏輯容器,類似:RDMS
  6. duration: 持續時間:數據保存時間,若數據過期則會自動從數據庫Drop掉
  7. function: influxQL 聚合、選擇器、轉換器
  8. identifier: 表示CQ名稱、數據庫名稱等識別符
  9. InfluxDN line Protocol: InfluxDB基於文本格式的寫入指令,類似:LDAP的ldif文件格式用於數據批量導入
  10. metastore: 包含關於系統狀態的內部信息:用戶信息、數據庫、數據存儲策略、分片元數據、CQ、訂閱
  11. node: influxd獨立進程
  12. now(): 本地服務器納秒時間戳
  13. points per second: 持久化到InfluxDB過期的度量指標,表示每秒的數據寫入速度
  14. replication factor: 複製因子:用於決定集羣種保存數據的副本數,確保某個節點不可用時數據可用
  15. schema: InfluxDB數據組織格式,包含數據庫、數據存儲策略、series、measurement、tag、field
  16. selector: 從指定範圍內的數據返回1個單一的point
  17. series cardinality: series統計數量,例如:1個measurement有2個tag,1個tag有3種狀態,另外1個tag有2個狀態,series總數量:3*2=6
  18. server: 運行InfluxDB的物理或虛擬機,每臺機制只有1個InfluxDB進程
  19. shard: 分片包含真實編碼和壓縮的數據,以TSM文件格式存儲磁盤,每個shard只屬於1個shard group,每個分片包含一系列series,shard group內相同series上的point存放在相同的shard內(TSM文件存儲)
  20. shard duration: 分片時間範圍,相當於特定時間範圍內的數據落地到特定的分片上,類似數據庫分表策略
  21. shard group: 包含shard的邏輯容器,通過時間和數據存儲策略組織,每個包含數據的數據存儲策略至少與1個shard group關聯
  22. subscription: kapacitor以推模式從InfluxDB接收數據,支持TCP/UDP工作傳輸方式
  23. transformation: 1個InfluxQL函數:返回從指定Points返回值或值集合,但不會包含聚合數據,類似:RDMS種的轉換函數,例如:大小轉小寫等
  24. TSM: Time Structured Merge Tree: InfluxDB內置數據存儲格式,相對B+(MYSQl索引結構)或LSM(HBase結構)有更高合併、讀寫性能
  25. user: influxDB 2種用戶類型,admin 管理員擁有所有數據庫的READ/WRITE權限,非ADMIN用戶可以擁有指定數據的READ、WRITE、ALL(包含READ/WRITE)權限
  26. WAL(Write Ahead Log): 寫前複製,每個寫請求臨時緩存到日誌,減少持久化文件的頻繁訪問,日誌成長到一定到一定程度則觸發機制,數據落地到磁盤文件,可以避免數據寫時丟失

1.3 influxDB 數據查詢

數據查詢方式:

  1. Flux: InfluxDB 1.8+ 引入查詢、分析、操作的數據腳本語言
  2. InfluxQL: InfluxDB類SQL查詢語言,目前不支持:union、join、having操作,類似Hive的HSQL

InfluxDB數據更新邏輯(非CRUD):CR,UD通過CR實現,滿足高性能

  1. 更新:插入相同的measurement、tag、timestamp,相當於ES文檔更新機制
  2. 刪除:可以直接drop或delete series,而不是單獨刪除獨立的point,基於field_value刪除point可以先查詢數據讀取時間戳,然後根據時間戳time字段刪除
  3. 不能直接更新或重命名tag: 通過tag查詢數據,然後修改數據到指定的數據--> 寫入數據 --> 刪除舊的series(類似ES更新:新創建後刪除)
  4. 不能通過tag key直接刪除tags

1.4 TSM

TSM: InfluxDB 數據存儲引擎

功能:

  1. In-Memory Index: shards間共享內存存儲索引,提供隊measurements\tags\series快速訪問

  2. WAL: 寫前日誌,類似HBase的HLog

  3. Cache: 保存在WAL所有points數據的內存拷貝,TSM中提供實時查詢和合並

  • cache-snapshot-memory-size: 晁錯則觸發快照到TSM文件,且清除對應的WAL segments
  • cache-max-memory-size: 超出拒絕新的寫入數據請求
  • cache-snapshot-write-cold-duration: 指定時間間隔內沒手動寫請求,則強制同步snapshot到TSM文件
  1. FileStore: 訪問磁盤上所有TSM文件的代理,類似TSM文件管理接口
  2. Compactor: 將Cache + TSM數據轉換爲更加優化讀的格式,類似於HBase的數據合併,小文件合併成大文件,大文件拆分爲均等的文件,保證數據均衡進而提供更好的性能
  3. compaction Planner: 決定準備合併的TSM文件,並且多個TSM文件可以並行操作
  4. compression: 編碼器和解碼器負責數據壓縮
  5. Writer/Reader: 每種文件類型都有對應的讀寫器(WAL segment、TSM、Tombstone等)

WAL: 寫前日誌,參考WAL Segment單調遞增,當segment達到10M就會創建新的WAl保存,每個segment保存多個寫入和刪除的壓縮的文件塊,當新的Point序列化後, 會使用Snappy壓縮寫入WAL文件,當完成文件fsync(刷新數據到磁盤)、數據添加在內存索引後,纔會返回成功,這意味着批量操作具有更高吞吐的性能,建議:5000-10000

WAL創建:InfluxDB啓動時會通過重新讀取磁盤WAL文件重新創建


TSM文件格式:Header(5字節) + Blocks(N字節) + Index(N字節) + Footer(4個字節)

  • Header: 識別文件類型和版本號的魔法數: Magic(4字節) + Version(1字節)
  • Blocks: Block1、Block2、BlockN(Block: CRC(4 bytes) + Data(N字節))
  • Index: Key Len(2字節) + Key(N字節) + Type(1字節) + Count(2字節) + Min Time(8字節) + Max Time(8字節) + Offset(8字節) + Size(4字節)
  • Footer: index ofs(8字節)

2. InfluxDB 安全機制

influx開啓認證:官方文檔

  • 創建用戶: CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES
  • 重啓服務: systemctl restart influxdb
  • 查看服務: systemctl status influxdb

influxDB認證訪問方式:curl -G "http://localhost:8086/query?u=todd&p=influxdb4ever" --data-urlencode "q=SHOW DATABASES"

2.1 influxDB 認證機制

  1. 環境變量配置InfluxDB用戶名/密碼,influx命令執行會默認讀取採用環境命令信息認證登陸
export INFLUX_USERNAME=todd
export INFLUX_PASSWORD=influxdb4ever
echo $INFLUX_USERNAME $INFLUX_PASSWORD
todd influxdb4ever

influx
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x
  1. 用戶名密碼直接登陸
influx -username todd -password influxdb4ever
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x
  1. 通過auth 兩步認證
influx ## 匿名登陸
Connected to http://localhost:8086 version 1.4.x
InfluxDB shell 1.4.x
> auth ## 切換到認證賬號
username: todd
password:
>

TokenJWT認證:相當於用戶名密碼訪問,JWT更安全

實現步驟:

  1. 共享密鑰:主要用於JWT簽名
  • /etc/influxdb/influxdb.conf,http > shared-secret補充共享密鑰,默認爲空
  • INFLUXDB_HTTP_SHARED_SECRET: 環境變量配置共享密鑰
  1. 生成JWT Token 生成規則:username + exp + share secret(共享密鑰) 簽名,推薦工具:jwt.io

  2. 生成Token放入Http請求頭

Authorization: Bearer <myToken>

Token請求案例:

curl -XGET "http://localhost:8086/query?db=demodb" \
  --data-urlencode "q=SHOW DATABASES" \
  --header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.he0ErCNloe4J7Id0Ry2SEDg09lKkZkfsRiGsdX_vgEg"

2.3 influxDB 授權機制

管理員用戶:最高權限,類似Mysql Root用戶

  • 數據庫權限
  • CREATE DATABASE, and DROP DATABASE
  • DROP SERIES and DROP MEASUREMENT
  • CREATE RETENTION POLICY, ALTER RETENTION POLICY, and DROP RETENTION POLICY
  • CREATE CONTINUOUS QUERY and DROP CONTINUOUS QUERY

用戶管理權限:

  • Admin user management: CREATE USER, GRANT ALL PRIVILEGES, REVOKE ALL PRIVILEGES, and SHOW USERS
  • Non-admin user management: CREATE USER, GRANT [READ,WRITE,ALL], REVOKE [READ,WRITE,ALL], and SHOW GRANTS
  • General user management: SET PASSWORD and DROP USER

Non-admin用戶數據權限:WRITE、READ、ALL(包含READ、WRITE權限)

用戶管理命令:

  1. 創建用戶(管理員):CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES
  2. 用戶授權(管理員):GRANT ALL PRIVILEGES TO <username>
  3. 回收權限(管理員):REVOKE ALL PRIVILEGES FROM <username>
  4. 顯示用戶信息(管理員):SHOW USERS
  5. 創建普通用戶:CREATE USER <username> WITH PASSWORD '<password>'
  6. 數據庫授權命令:GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
  7. 數據庫命令回收:REVOKE [READ,WRITE,ALL] ON <database_name> FROM <username>
  8. 顯示用戶授權:SHOW GRANTS FOR <user_name>
  9. 重設密碼:SET PASSWORD FOR <username> = '<password>'
  10. 刪除用戶:DROP USER <username>

注意:用戶名必須雙引號,密碼必須是單引號包裹

3. InfluxQL用法

influxQL官方文檔

案例數據:

select: SELECT <field_key>[,<field_key>,<tag_key>] FROM <measurement_name>[,<measurement_name>]

  • select語句至少包含1個field,單獨tag無法使用

where: SELECT_clause FROM_clause WHERE <conditional_expression> [(AND|OR) <conditional_expression> [...]]

  • conditional_expression: 條件表達式:field_key <operator> ['string' | boolean | float | integer]
  • field_key operator:字段操作符:=、<>(不等於)、!=、>、>=、<、<=
  • tag_key <operator>: 標籤表達式:-、<>、!=

where語句案例:

  1. 查詢水溫>8的數據: SELECT * FROM "h2o_feet" WHERE "water_level" > 8
  2. 查詢水溫大於9.9的數據: SELECT * FROM "h2o_feet" WHERE "water_level" + 2 > 11.9
  3. tag精確查詢:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
  4. field_key、tag組合查詢: SELECT "water_level" FROM "h2o_feet" WHERE "location" <> 'santa_monica' AND (water_level < -0.59 OR water_level > 9.95)
  5. 時間條件查詢:SELECT * FROM "h2o_feet" WHERE time > now() - 7d

Group By(標籤分組查詢): SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | <tag_key>[,<tag_key]]

  • GROUP BY *: 根據所有tag分組
  • GROUP BY <tag_key>: 按照指定tag分組
  • GROUP BY <tag_key>,<tag_key>: 多個Tag分組

Group by time()(按照用戶自定義時間間隔分組查詢):

  • 基礎格式:SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>),[tag_key] [fill(<fill_option>)]
  • time(time_interval): 定義分組時間間隔(常量),例如:5m 表示間隔5分鐘分組統計
  • fill(<fill_option> 可選:沒有數據時修改時間間隔

Group by time()高級用法:SELECT <function>(<field_key>) FROM_clause WHERE <time_range> GROUP BY time(<time_interval>,<offset_interval>),[tag_key] [fill(<fill_option>)]

  • time(time_interval): 定義分組時間間隔(常量),例如:5m 表示間隔5分鐘分組統計
  • offset_interval: 表示InfluxDB預定時間邊界的偏移量,類似:Java定時任務延時啓動時間,可以是正數和負數
  • fill(): 沒有數據時改變time_interval的值

fill選項:

  • Any numerical value: 沒有數據時返回指定的數值
  • linear: 沒有數據時返回time_interval線性插值的結果,若前1個結果或下面的結果超出查詢時間範圍且時間間隔內沒數據時不會返回任何數據
  • none: 沒有數據不返回時間戳和統計值
  • null: 默認行爲,沒有統計值返回null,但是返回時間戳
  • previous: 沒有時間返回之前時間間隔範圍內的統計值

group by案例:

  1. 統計平均水溫:SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location"
  2. 間隔12分鐘統計:SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)
  3. 統計沒有最大值時默認返回100: SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' GROUP BY time(12m) fill(100)
  4. 統計沒有最大值時直接不返回數據: SELECT MAX("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' GROUP BY time(12m) fill(none)

select into: SELECT_clause INTO <measurement_name> FROM_clause [WHERE_clause] [GROUP_BY_clause]

  • INTO <measurement_name>: 數據存入目標measurement, 格式:INTO <database_name>.<retention_policy_name>.<measurement_name>
  • 案例:SELECT * INTO "copy_NOAA_water_database"."autogen".:MEASUREMENT FROM "NOAA_water_database"."autogen"./.*/ GROUP BY *

Order by time desc(時間排序): SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] ORDER BY time DESC

  • 默認InfluxDB數據時間升序,第1個Point返回最老時間戳,最後最新,通過desc反轉記錄時間順序

Limit/SLimit: 限制每次查詢Points數量(limit)和Series數量(Slimit)

  • 格式:SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(<time_interval>)] [ORDER_BY_clause] LIMIT <N1> SLIMIT <N2>
  • 案例:SELECT "water_level" FROM "h2o_feet" GROUP BY * LIMIT 3 SLIMIT 1

offset/soffset: points/series分區的偏移量

  • 格式:SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(time_interval)] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] SLIMIT_clause OFFSET <N> SOFFSET <N>
  • 案例:SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) ORDER BY time DESC LIMIT 2 OFFSET 2 SLIMIT 1 SOFFSET 1

Time Zone:tz函數:返回指定時區的UTC偏移量

  • 格式:SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] tz('<time_zone>')
  • 案例:返回結果包含UTC-05:00即美國芝加哥時間的數據:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:18:00Z' tz('America/Chicago')

Time語法:

  • 格式:SELECT_clause FROM_clause WHERE time <operator> ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [AND ['<rfc3339_date_time_string>' | '<rfc3339_like_date_time_string>' | <epoch_time>] [...]]
  • operator:=、<>、!=、>、>=、<、<=

時間格式:

  • rfc3339_date_time_string:'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'
  • rfc3339_like_date_time_string:'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'
  • epoch_time: 近似理解成時間戳,表示從UTC 1970-01-01 00:00:00 UTC到現在經過的時間

案例:

  • rfc3339_date_time_string:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z'
  • rfc3339_like_date_time_string:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18' AND time <= '2015-08-18 00:12:00'
  • epoch_time:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= 1439856000000000000 AND time <= 1439856720000000000
  • epoch_time二次精度時間s:SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= 1439856000s AND time <= 1439856720s

Relative Time: 相對時間

  • 格式:SELECT_clause FROM_clause WHERE time <operator> now() [[ - | + ] <duration_literal>] [(AND|OR) now() [...]]
  • operator:=、<>、!=、>、>=、<、<=
  • duration_literal:u(微秒)、ms(毫秒)、s(秒)、m(分鐘)、h(小時)、d(天)、week(周)
  • 案例,查詢過去1小時數據: SELECT "water_level" FROM "h2o_feet" WHERE time > now() - 1h

配置返回的時間戳:默認返回epoch 納秒格式時間,可通過precision <format>命令指定返回的時間戳格式

  • 設置時間格式(CLI):influx -precision <format>

正則表達式:InfluxDB支持正則表達式匹配

  • select語句:field key、tag
  • from語句:measurement
  • where語句:tag、field value
  • group by: tag

正則表達式語法:SELECT /<regular_expression_field_key>/ FROM /<regular_expression_measurement>/ WHERE [<tag_key> <operator> /<regular_expression_tag_value>/ | <field_key> <operator> /<regular_expression_field_value>/] GROUP BY /<regular_expression_tag_key>/

  • operator: =~ 表示匹配, !~: 不匹配

案例:

  • 返回field key包含l的字段:SELECT /l/ FROM "h2o_feet" LIMIT 1
  • 返回description包含between字符的數據: SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND "level description" =~ /between/

數據類型和轉換操作: "::"允許用戶指定查詢的Field類型,同樣支持兼容類型的field value轉換

  • field value類型:float、integer、string、boolean
  • 格式:SELECT_clause <field_key>::<type> FROM_clause
  • 案例:返回water_level爲float類型的字段:SELECT "water_level"::float FROM "h2o_feet" LIMIT 4
  • 案例:float轉Integer: SELECT "water_level"::integer FROM "h2o_feet" LIMIT 4

合併行爲:Merge Behavior,InfluxDB自動查詢合併Series
案例:

  • 查詢平均水溫:SELECT MEAN("water_level") FROM "h2o_feet"
  • 統計地區平均水溫:SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location"

4. Schema管理

使用方式:

  1. influx cli命令: influx -precision rfc3339(指定時間戳格式)
  2. 登陸influxDB成功,控制檯輸入,和普通的Mysql命令執行方式類似

常用命令:

  1. 查詢InfluxDB數據庫實例:show databases
  2. 查詢數據存儲策略:show retention policies [on <database_name>]
  • ON <database_name>: 可選項,若查詢未指定數據庫名則需要顯示指定
  • USE <database_name>: 若命令執行前執行指定默認數據庫,則可缺省
  1. 查詢SERIES: SHOW SERIES [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> [ '<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
  • 案例:SHOW SERIES ON NOAA_water_database FROM "h2o_quality" WHERE "location" = 'coyote_creek' LIMIT 2
  1. 查詢Measurements: SHOW MEASUREMENTS [ON <database_name>] [WITH MEASUREMENT <operator> ['<measurement_name>' | <regular_expression>]] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
  • 案例:SHOW MEASUREMENTS ON NOAA_water_database WITH MEASUREMENT =~ /h2o.*/ LIMIT 2 OFFSET 1
  1. 查詢Tag Key: SHOW TAG KEYS [ON <database_name>] [FROM_clause] [WHERE <tag_key> <operator> ['<tag_value>' | <regular_expression>]] [LIMIT_clause] [OFFSET_clause]
  2. 查詢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]
  • 案例1:SHOW TAG VALUES ON "NOAA_water_database" WITH KEY = "randtag"
  • 案例2:SHOW TAG VALUES ON "NOAA_water_database" WITH KEY IN ("location","randtag") WHERE "randtag" =~ /./ LIMIT 3
  1. 查詢Field Key及類型:SHOW FIELD KEYS [ON <database_name>] [FROM <measurement_name>]
  • 案例:SHOW TAG KEYS ON mydb where time > now() -1h and time < now()

5. Database管理

數據庫操作:

  1. 創建數據庫:CREATE DATABASE <database_name> [WITH [DURATION <duration>] [REPLICATION <n>] [SHARD DURATION <duration>] [NAME <retention-policy-name>]]
  • retention-policy-name: 默認數據存儲策略:autogen永久保存、副本數1,分片週期:7天
  • 案例:創建數據庫同時創建數據存儲策略:CREATE DATABASE "NOAA_water_database" WITH DURATION 3d REPLICATION 1 SHARD DURATION 1h NAME "liquid"
  1. 刪除數據庫:drop database <database_name>
  2. 刪除Series:
  • 方式1: DROP SERIES FROM <measurement_name[,measurement_name]> WHERE <tag_key>='<tag_value>'
  • 方式2: DELETE FROM <measurement_name> WHERE [<tag_key>='<tag_value>'] | [<time interval>]
  1. 刪除Measurement:DROP MEASUREMENT <measurement_name>
  2. 刪除Shard: DROP SHARD <shard_id_number>

數據存儲策略管理:

  1. 創建數據存儲策略:CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
  • DURATION:InfluxDB數據存儲時間
  • REPLICATION: InfluxDB數據存儲的副本數,默認副本數等於InfluxDB集羣的節點數,若>=3則默認3副本
  • SHARD DURATION: 數據分片週期
  • DEFAULT: 創建數據保存策略,並設置爲InfluxDB默認存儲策略,默認:autogen
  • Shard分片:類似MySQL的分庫分表,只不過數據分片是按照時間範圍分片的,例如:1-2小時內數據到Shard1,2-3小時到shard3,Shard Group Duration = 1h
DURATION Shard Group Duration Description
< 2 days 1 hour 數據保存時間小於2天數據按1小時分片
>= 2 days and <= 6 months 1 day 數據保存2天到6個月,數據按照1天分片
>6 months 7 days 數據保存大於6個月,數據按照7天分片
  1. 修改數據存儲策略:ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
  2. 刪除數據存儲策略:DROP RETENTION POLICY <retention_policy_name> ON <database_name>

6. Continuous Query連續查詢

CQ特點:自動查詢、週期性實時數據查詢,保存結果到指定的measurement,類似定時的ETL任務

  • 只有admin用戶允許使用CQ

CQ基礎語法格式:

  • cq_name: 自定義連續查詢名稱
  • cq_query: cq語句
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
  <cq_query>
END

cq_query語法:SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]

  • cq_query不要求where條件語句帶時間範圍限制,CQ會自動加上,若自定義事件範圍條件語句,CQ會自動忽略
  • Group by time: CQ自動指定週期,例如:Group by (1 hour), CQ會每隔1小時自動執行,每次查詢的數據時間範圍:前1小時
  • 默認數據時間範圍:[now(),now() - interval]

注意事項:

  1. 時間間隔內無數據,不支持fill()語句,有數據可以用fill
  2. CQ結果必須包含標籤,缺省:* 包含所有標籤

案例1 :實時統計每隔1小時內的客流量,數據放入average_passengers

CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END

案例2 :15分鐘後開始實時統計每隔1小時內的客流量,數據放入average_passengers

CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h,15m)
END

CQ高級語法: (優先級)RESAMPLE > Group by time(interval)

  1. RESAMPLE語句使用服務器當前的時間戳計算CQ執行時間和查詢數據範圍
  2. EVERY: CQ執行時間週期,優先級高與Group by time(interval)
  3. For: CQ查詢數據範圍(默認): [now(), now() - For interval]
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
RESAMPLE EVERY <interval> FOR <interval>
BEGIN
  <cq_query>
END

案例1:時間範圍時間和執行時間週期分開定義

  • 說明:每隔30分鐘執行cq,只統計過去1小時內的客流量
CREATE CONTINUOUS QUERY "cq_advanced_every" ON "transportation"
RESAMPLE EVERY 30m
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END

案例2:配置數據採樣的時間範圍

  • 說明:每隔30分鐘執行1次,數據時間範圍(過去1小時):[now(), now() - 1 hour]
CREATE CONTINUOUS QUERY "cq_advanced_for" ON "transportation"
RESAMPLE FOR 1h
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)
END

案例3:分別明確指定CQ的執行時間和數據時間範圍

  • 說明:CQ每隔1小時執行1次,查詢數據範圍:過去90分鐘, 相當於group by time(interval)完全被RESAMPLE替換無效
CREATE CONTINUOUS QUERY "cq_advanced_every_for" ON "transportation"
RESAMPLE EVERY 1h FOR 90m
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)
END

案例4: 填充空值

CREATE CONTINUOUS QUERY "cq_advanced_for_fill" ON "transportation"
RESAMPLE FOR 2h
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h) fill(1000)
END

CQ管理(admin用戶):

  1. 查詢CQ: SHOW CONTINUOUS QUERIES
  2. 刪除CQ: DROP CONTINUOUS QUERY <cq_name> ON <database_name>
  3. 修改CQ: CQ一旦創建不能修改,必須先Drop然後Create,類似ES文檔更新操作
  4. CQ統計:influxdb.conf配置query-stats-enabled爲true,或INFLUXDB_CONTINUOUS_QUERIES_QUERY_STATS_ENABLED環境變量,CQ執行信息保存到——internal數據庫(InfluxDB元數據庫)

CQ採樣率調整:CQ自動定時查詢指定範圍內數據,若採樣頻率過小則時間統計太長,若採樣率過大則時間過短頻繁執行,導致昂貴的資源消耗,需綜合衡量


SQL Having語句功能實現: InfluxDB不支持Having

案例(類SQl寫法):SELECT mean("bees") FROM "farm" GROUP BY time(30m) HAVING mean("bees") > 20

InfluxDB實現:先統計總的,然後再篩選

  1. 先統計間隔30分鐘前30分鐘Bees平均數
CREATE CONTINUOUS QUERY "bee_cq" ON "mydb" 
BEGIN 
  SELECT mean("bees") AS "mean_bees" INTO "aggregate_bees" FROM "farm" GROUP BY time(30m) 
END
  1. 計算bees平均大於20的數據
SELECT "mean_bees" FROM "aggregate_bees" WHERE "mean_bees" > 20


InfluxDB內嵌函數實現:

案例(InfluxDB不支持):SELECT mean(count("bees")) FROM "farm" GROUP BY time(30m)

InfluxDB間接實現:先裏後外

CREATE CONTINUOUS QUERY "bee_cq" ON "mydb" 
BEGIN 
    SELECT count("bees") AS "count_bees" INTO "aggregate_bees" FROM "farm" GROUP BY time(30m) 
END

SELECT mean("count_bees") FROM "aggregate_bees" WHERE time >= <start_time> AND time <= <end_time>

7. InfluxDB 函數

聚合函數

  1. COUNT(計數): SELECT COUNT( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 內嵌語法:SELECT COUNT(DISTINCT( [ * | <field_key> | /<regular_expression>/ ] )) [...]
  • 案例:SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-09-18T21:24:00Z' AND time <= '2015-09-18T21:54:00Z' GROUP BY time(12m)
  1. DISTINCT(唯一值):SELECT DISTINCT( [ <field_key> | /<regular_expression>/ ] ) FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 內嵌語法:SELECT COUNT(DISTINCT( [ <field_key> | /<regular_expression>/ ] )) [...]
  • 案例:SELECT DISTINCT("level description") FROM "h2o_feet"
  1. INTEGRAL(積分函數):SELECT INTEGRAL( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 案例1:SELECT INTEGRAL("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  • 案例2:SELECT INTEGRAL("water_level",1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  1. MEAN(平均值):SELECT MEAN( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  2. MEDIAN(中間值):SELECT MEDIAN( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  3. MODE(返回Field value最頻繁的值):SELECT MODE( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 場景:統計計算題最常見的計算結果
  1. SPREAD(計算最小和最大值的插值):SELECT SPREAD( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  2. STDDEV(標準差):SELECT STDDEV( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  3. SUM(求和):SELECT SUM( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

選擇函數:

  1. BOTTOM(查詢最小N個值):SELECT BOTTOM(<field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 案例:SELECT BOTTOM("water_level",3) FROM "h2o_feet"
  1. FIRST(查詢第1個值,最老):SELECT FIRST(<field_key>)[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  • 案例:SELECT FIRST("level description") FROM "h2o_feet"
  1. LAST(查詢最後1個值,最新):SELECT LAST(<field_key>)[,<tag_key(s)>|<field_keys(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  2. MAX(查詢最大值):SELECT MAX(<field_key>)[,<tag_key(s)>|<field__key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  3. MIN(查詢最小值):SELECT MIN(<field_key>)[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  4. PERCENTILE(查詢指定精度百分比結果):SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  5. SAMPLE(查詢隨機取N個值):SELECT SAMPLE(<field_key>, <N>)[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  6. TOP(查詢最大的N個值):SELECT TOP( <field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

轉換函數: ABS(絕對值):SELECT ABS( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

  • 高級語法:SELECT ABS(<function>( [ * | <field_key> ] )) [INTO_clause] FROM_clause [WHERE_clause] GROUP_BY_clause [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ACOS(反餘弦函數):SELECT ACOS( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ASIN(反正弦函數:值範圍:[-1,1]):SELECT ACOS( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ATAN(反正切值:值範圍:[-1,1]):SELECT ATAN( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ATAN2:SELECT ATAN2( [ * | <field_key> | num ], [ <field_key> | num ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] CEIL(四捨五入函數,向上取整):SELECT CEIL( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] COS(餘弦函數):SELECT COS( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] CUMULATIVE_SUM(累加函數):SELECT CUMULATIVE_SUM( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] DERIVATIVE(導數函數):SELECT DERIVATIVE( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] DIFFERENCE(差分函數:當前值-前1值作爲差值):SELECT DIFFERENCE( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ELAPSED(時間差異函數:當前時間戳-前1時間戳):SELECT ELAPSED( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] EXP(指數函數):SELECT EXP( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] FLOOR(向下取整):SELECT FLOOR( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] LN(自然對數函數:e底):SELECT LN( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] LOG(對數函數):SELECT LOG( [ * | <field_key> ], <b> ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] LOG2(對數函數,2底):SELECT LOG2( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] LOG10(對數函數,10底):SELECT LOG10( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] MOVING_AVERAGE(滑動平均):SELECT MOVING_AVERAGE( [ * | <field_key> | /<regular_expression>/ ] , <N> ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] NON_NEGATIVE_DERIVATIVE(正導數):SELECT NON_NEGATIVE_DERIVATIVE( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] NON_NEGATIVE_DIFFERENCE(正差分函數):SELECT NON_NEGATIVE_DIFFERENCE( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] POW(指數函數):SELECT POW( [ * | <field_key> ], <x> ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] ROUND(四捨五入):SELECT ROUND( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] SIN(正弦函數):SELECT SIN( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] SQRT(平方根函數):SELECT SQRT( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] TAN(正切函數):SELECT TAN( [ * | <field_key> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

Predictors: 預測函數 HOLT_WINTERS(根據Holt-Winters方法預測N個值):SELECT HOLT_WINTERS[_WITH-FIT](<function>(<field_key>),<N>,<S>) [INTO_clause] FROM_clause [WHERE_clause] GROUP_BY_clause [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]


Technical Analysis: 技術分析函數(算法)

  1. CHANDE_MOMENTUM_OSCILLATOR(錢德動量擺動指標):CHANDE_MOMENTUM_OSCILLATOR([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period>, [warmup_type]])
  2. EXPONENTIAL_MOVING_AVERAGE(指數加權平均):EXPONENTIAL_MOVING_AVERAGE([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period)[, <warmup_type]])
  3. DOUBLE_EXPONENTIAL_MOVING_AVERAGE(雙重指數移動平均線):DOUBLE_EXPONENTIAL_MOVING_AVERAGE([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period)[, <warmup_type]])
  4. KAUFMANS_EFFICIENCY_RATIO(卡夫曼效率係數 ER):KAUFMANS_EFFICIENCY_RATIO([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period>])
  5. KAUFMANS_ADAPTIVE_MOVING_AVERAGE(卡夫曼自適應移動平均線):KAUFMANS_ADAPTIVE_MOVING_AVERAGE([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period>])
  6. TRIPLE_EXPONENTIAL_MOVING_AVERAGE(三重指數移動平均線):TRIPLE_EXPONENTIAL_MOVING_AVERAGE([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period)[, <warmup_type]])
  7. TRIPLE_EXPONENTIAL_DERIVATIVE:TRIPLE_EXPONENTIAL_DERIVATIVE([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period)[, <warmup_type]])
  8. RELATIVE_STRENGTH_INDEX(相對強弱指數指標):RELATIVE_STRENGTH_INDEX([ * | <field_key> | /regular_expression/ ], <period>[, <hold_period)[, <warmup_type]])

8. InfluxDB運算符

  1. 加法
  • SELECT "A" + 5 FROM "add"
  • SELECT * FROM "add" WHERE "A" + 5 > 10
  • SELECT "A" + "B" FROM "add"
  • SELECT * FROM "add" WHERE "A" + "B" >= 10
  1. 減法
  • SELECT 1 - "A" FROM "sub"
  • SELECT * FROM "sub" WHERE 1 - "A" <= 3
  • SELECT "A" - "B" FROM "sub"
  • SELECT * FROM "sub" WHERE "A" - "B" <= 1
  1. 乘法
  • SELECT 10 * "A" FROM "mult"
  • SELECT * FROM "mult" WHERE "A" * 10 >= 20
  • SELECT "A" * "B" * "C" FROM "mult"
  • SELECT * FROM "mult" WHERE "A" * "B" <= 80
  • SELECT 10 * ("A" + "B" + "C") FROM "mult"
  1. 除法
  • SELECT 10 / "A" FROM "div"
  • SELECT * FROM "div" WHERE "A" / 10 <= 2
  • SELECT "A" / "B" FROM "div"
  • SELECT * FROM "div" WHERE "A" / "B" >= 10
  • SELECT 10 / ("A" + "B" + "C") FROM "mult"
  1. 取模
  • SELECT "B" % 2 FROM "modulo"
  • SELECT "B" FROM "modulo" WHERE "B" % 2 = 0
  • SELECT "A" FROM "modulo" WHERE "A" % "B" = 0
  1. 按位與(有0則0)
  • SELECT "A" & 255 FROM "bitfields"
  • SELECT "A" & "B" FROM "bitfields"
  • SELECT ("A" ^ true) & "B" FROM "booleans"
  1. 按位或(有1則1)
  • SELECT "A" | 5 FROM "bitfields"
  • SELECT "A" | "B" FROM "bitfields"
  • SELECT * FROM "data" WHERE "bitfield" | 12 = 12
  1. 按位異或(相同爲0,不同爲1)
  • SELECT "A" ^ 255 FROM "bitfields"
  • SELECT "A" ^ "B" FROM "bitfields"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章