InfluxDB 3 Core 支持原生 SQL 和 InfluxQL 进行数据查询。InfluxQL 是一种类 SQL 查询语言,专为 InfluxDB v1 设计,并针对时间序列查询进行了定制。
为确保查询性能,InfluxDB 3 Core 将查询时间范围限制在大约 72 小时(包括最近和历史数据)。有关 72 小时限制的更多信息,请参阅关于 InfluxDB 3 Core 72 小时限制的更新。
InfluxDB v2 中引入的 Flux 语言在 InfluxDB 3 中不受支持。
使用 influxdb3 CLI 查询数据
要开始在 InfluxDB 3 Core 中查询数据,请使用influxdb3 query 命令并提供以下内容
-H, --host:服务器的主机 URL (默认为 http://127.0.0.1:8181)-d, --database:(必需) 要查询的数据库名称-l, --language:提供的查询字符串的查询语言- SQL 或 InfluxQL 查询(字符串形式)
如果在您的环境中未设置 设置 InfluxDB 3 Core 中定义的 INFLUXDB3_AUTH_TOKEN 环境变量,请设置它,或者在命令中使用 -t, --token 选项提供您的令牌。
要查询您在 将数据写入 InfluxDB 3 Core 中写入的家庭传感器示例数据,请运行以下命令
influxdb3 query \
--database DATABASE_NAME
\
"SELECT * FROM home ORDER BY time"
influxdb3 query \
--database DATABASE_NAME
\
--language influxql \
"SELECT * FROM home"
将 DATABASE_NAME 替换为要查询的数据库名称。
要从特定时间范围查询,请使用 WHERE 子句来指定时间范围的边界。
influxdb3 query \
--database DATABASE_NAME
\
"SELECT * FROM home WHERE time >= now() - INTERVAL '7 days' ORDER BY time"
influxdb3 query \
--database DATABASE_NAME
\
--language influxql \
"SELECT * FROM home WHERE time >= now() - 7d"
示例查询
返回所有房间的平均温度
SELECT avg(temp) AS avg_temp FROM home
SELECT MEAN(temp) AS avg_temp FROM home
返回厨房的平均温度
SELECT avg(temp) AS avg_temp FROM home WHERE room = 'Kitchen'
SELECT MEAN(temp) AS avg_temp FROM home WHERE room = 'Kitchen'
查询绝对时间范围内的数据
SELECT
*
FROM
home
WHERE
time >= '2022-01-01T12:00:00Z'
AND time <= '2022-01-01T18:00:00Z'
SELECT
*
FROM
home
WHERE
time >= '2022-01-01T12:00:00Z'
AND time <= '2022-01-01T18:00:00Z'
查询相对时间范围内的数据
SELECT
*
FROM
home
WHERE
time >= now() - INTERVAL '7 days'
SELECT
*
FROM
home
WHERE
time >= now() - 7d
每房间每 3 小时窗口计算平均湿度
SELECT
date_bin(INTERVAL '3 hours', time) AS time,
room,
avg(hum) AS avg_hum
FROM
home
GROUP BY
1,
room
ORDER BY
room,
1
SELECT
MEAN(hum) AS avg_hum
FROM
home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY
time(3h),
room
还有其他工具可用于在 InfluxDB 3 Core 中查询数据,包括以下内容
使用 API 查询
使用 API 查询
InfluxDB 3 支持 Flight (gRPC) API 和 HTTP API。要使用 HTTP API 查询您的数据库,请向 /api/v3/query_sql 或 /api/v3/query_influxql 端点发送请求。在请求中,在 db 参数中指定数据库名称,在 q 参数中指定查询。您可以在查询字符串中或 JSON 对象内传递参数。
使用 format 参数指定响应格式:pretty、jsonl、parquet、csv 和 json。默认值为 json。
示例:传递 URL 编码参数进行查询
以下示例发送一个带有 URL 编码的 SQL 查询的 HTTP GET 请求
curl -G "https://:8181/api/v3/query_sql" \
--header 'Authorization: Bearer AUTH_TOKEN
' \
--data-urlencode "db=DATABASE_NAME
" \
--data-urlencode "q=select * from cpu limit 5"
将以下占位符替换为您自己的值
DATABASE_NAME:要查询的数据库名称AUTH_TOKEN:您的令牌
示例:传递 JSON 参数进行查询
以下示例发送一个带有 JSON 载荷中参数的 HTTP POST 请求
curl https://:8181/api/v3/query_sql \
--data '{"db": "DATABASE_NAME
", "q": "select * from cpu limit 5"}'
将以下占位符替换为您自己的值
DATABASE_NAME:要查询的数据库名称AUTH_TOKEN:您的令牌
使用 Python 客户端查询
使用 Python 客户端查询
使用 InfluxDB 3 Python 库与数据库进行交互并集成到您的应用程序中。我们建议为您的特定项目在 Python 虚拟环境中安装所需的包。
要开始,请安装 influxdb3-python 包。
pip install influxdb3-python
从这里,您只需使用主机和**数据库名称
from influxdb_client_3 import InfluxDBClient3
client = InfluxDBClient3(
token='AUTH_TOKEN
',
host='https://:8181',
database='DATABASE_NAME
'
)
将以下占位符替换为您自己的值
DATABASE_NAME:要查询的数据库名称AUTH_TOKEN:您的令牌
以下示例显示了如何使用 SQL 进行查询,然后使用 PyArrow 探索架构和处理结果。为了授权查询,该示例从 INFLUXDB3_AUTH_TOKEN 环境变量中检索令牌。
from influxdb_client_3 import InfluxDBClient3
import os
client = InfluxDBClient3(
token=os.environ.get('INFLUXDB3_AUTH_TOKEN'),
host='https://:8181',
database='servers'
)
# Execute the query and return an Arrow table
table = client.query(
query="SELECT * FROM cpu LIMIT 10",
language="sql"
)
print("\n#### View Schema information\n")
print(table.schema)
print("\n#### Use PyArrow to read the specified columns\n")
print(table.column('usage_active'))
print(table.select(['host', 'usage_active']))
print(table.select(['time', 'host', 'usage_active']))
print("\n#### Use PyArrow compute functions to aggregate data\n")
print(table.group_by('host').aggregate([]))
print(table.group_by('cpu').aggregate([('time_system', 'mean')]))
有关 Python 客户端库的更多信息,请参阅 GitHub 中的influxdb3-python 存储库。
使用 InfluxDB 3 Explorer 查询
使用 InfluxDB 3 Explorer 查询
您可以使用基于 Web 的 InfluxDB 3 Explorer 界面来查询和可视化数据,并管理您的 InfluxDB 3 Core 实例。有关更多信息,请参阅如何使用 Docker安装 InfluxDB 3 Explorer 并开始查询您的数据。
SQL vs InfluxQL
InfluxDB 3 Core 支持两种查询语言——SQL 和 InfluxQL。虽然这两种查询语言相似,但有一些重要的区别需要考虑。
SQL
InfluxDB 3 SQL 实现提供了一个功能齐全的 SQL 查询引擎,由Apache DataFusion 提供支持。InfluxDB 扩展了 DataFusion,增加了时间序列特定的功能,并支持复杂的 SQL 查询,包括使用连接(joins)、联合(unions)、窗口函数(window functions)等的查询。
InfluxQL
InfluxQL 是一种类 SQL 查询语言,专为 InfluxDB v1 构建,并在 InfluxDB 3 Core 中得到支持。其语法和功能与 SQL 类似,但专门用于查询时间序列数据。InfluxQL 不提供 SQL 所具有的全部查询功能。
如果您从旧版 InfluxDB 迁移,可以继续使用 InfluxQL 和您一直在使用的既有的 InfluxQL 相关 API。
优化查询
InfluxDB 3 Core 提供以下优化选项来改进特定类型的查询
最近值缓存
InfluxDB 3 Core 最近值缓存 (LVC) 将一个序列或列层次结构中的最后 N 个值存储在内存中。这使数据库能够以低于 10 毫秒的速度回答这些类型的查询。有关配置和使用 LVC 的信息,请参阅
唯一值缓存
InfluxDB 3 Core 唯一值缓存 (DVC) 将一个序列或列层次结构中指定列的唯一值存储在内存中。这对于快速元数据查找非常有用,可以在 30 毫秒内返回结果。有关配置和使用 DVC 的信息,请参阅
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。