使用SQL查询数据
学习使用SQL查询存储在InfluxDB中的数据。
使用SQL探索您的架构
当使用InfluxDB的SQL实现时,measurement被结构化为一个表,time、fields和tags被结构化为列。
列出测量
SHOW TABLES
列出测量中的列
SHOW COLUMNS IN measurement
执行一个基本的SQL查询
一个基本的 SQL 查询从 InfluxDB 查询数据通常包括 SELECT、FROM 和 WHERE 子句。
SELECT temp, room FROM home WHERE time >= now() - INTERVAL '1 day'
使用SQL进行数据汇总
使用聚合和选择函数对您的时间序列数据执行聚合操作。
按组聚合字段
SELECT
mean(field1) AS mean,
selector_first(field2)['value'] as first,
tag1
FROM home
GROUP BY tag
按时间区间聚合
SELECT
DATE_BIN(INTERVAL '1 hour', time, '2022-01-01T00:00:00Z'::TIMESTAMP) AS time,
mean(field1),
sum(field2),
tag1
FROM home
GROUP BY 1, tag1
将值转换为不同类型
使用 CAST 函数或双冒号 :: 类型转换简写语法将值转换为特定类型。
-- CAST clause
SELECT CAST(1234.5 AS BIGINT)
-- Double-colon casting shorthand
SELECT 1234.5::BIGINT
填补数据中的空缺
使用 date_bin_gapfill 结合 interpolate 或 locf 来填补没有返回数据的时间间隔。
SELECT
date_bin_gapfill(INTERVAL '30 minutes', time) as _time,
room,
interpolate(avg(temp))
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
GROUP BY _time, room
使用参数化查询与SQL
使用参数化查询来防止注入攻击,并使查询更加可重用。
使用Go和influxdb3-go客户端
// Use the $parameter syntax to reference parameters in a query.
// The following SQL query contains $room and $min_temp placeholders.
query := `
SELECT * FROM home
WHERE time >= $min_time
AND temp >= $min_temp
AND room = $room`
// Assign parameter names to input values.
parameters := influxdb3.QueryParameters{
"room": "Kitchen",
"min_temp": 20.0,
"min_time": "2024-03-18 00:00:00.00",
}
// Call the client's function to query InfluxDB with parameters.
iterator, err := client.QueryWithParameters(context.Background(), query, parameters)