数据查询概述
数据湖中有多个存储库,根据查询内容不同,使用的查询语言也不同。 本节整理了这三种存储库各自的使用方法。
| 想查询的内容 | 存储库 | 语言 | 文档 |
|---|---|---|---|
| 元数据(如设备 · 标签 · 用户) | PostgreSQL | SQL | PostgreSQL |
| 时序数据(如标签值) | Aster TSDB | CQL | CQL |
| 跨存储库的联查 · 批量分析 | Spark (Kyuubi) | Spark SQL | Spark SQL |
选择标准一句话
单个标签的单个时间段用 CQL,设备列表或配置用 PostgreSQL, 需要混合多个存储库或扫描数亿行数据时用 Spark SQL。
三种存储库的特性不同
| PostgreSQL | Aster TSDB (CQL) | Spark SQL | |
|---|---|---|---|
| 擅长 | 联查 · 约束 · 事务 | 单个分区的按时间范围查询 | 大规模扫描 · 跨存储库联查 |
| 不擅长 | 数亿行的时序数据 | 任意联查,无分区键的查询 | 短响应时间(秒级启动开销) |
| 响应时间 | 毫秒级 | 毫秒级 | 秒到分钟级 |
| 连接方式 | 5432 | 9042 | 10000 (Kyuubi) |
🔴 不要将 CQL 当作 SQL 使用。 Aster TSDB 是一种「通过分区键查找并按聚类顺序扫描」的
存储库。如果在没有分区键的情况下添加条件,会扫描所有节点;此时 Aster TSDB 会
要求提供 ALLOW FILTERING —— 这个要求是警告,而非许可。
对于这类查询,请使用 Spark SQL。
如何连接 —— 两种方式
① 通过控制台 —— 使用浏览器执行 SQL。会应用账户、权限和审计功能。
数据网关控制台 就是该界面。 这是运维中节点上人员正常连接的路径。
② 在节点内部 —— 直接通过 shell 连接。用于运维和调试。
docker exec -it plantpulse-datalake pd node psql # PostgreSQL
docker exec -it plantpulse-datalake pd node cql # Cassandra (cqlsh)
直接连接运维节点是最后的手段
直接连接会绕过网关的权限和审计功能。查询请使用控制台,shell 仅用于控制台无法完成的操作。