CQL (Aster TSDB)
标签值、事件等时序数据都在这里。以毫秒级别读取「一个标签在一个时间段内的值」正是这个存储所擅长的。
| 项目 | 值 |
|---|---|
| 端口 | 9042 |
| 键空间 | pp |
| 代表表 | pp.tm_tag_point · tm_tag_point_archive · tm_tag_point_snapshot · pp.ts_data_points · pp.tm_asset_data |
| 引擎 | 用于工业时序的 Aster TSDB 分支 → 时序数据库 |
连接
docker exec -it plantpulse-datalake pd node cql
🔴 CQL 不是 SQL
Aster TSDB 是一种通过分区键定位、按集群顺序扫描的存储。你只需要遵守这一点——在 WHERE 中提供分区键和时间范围。
-- ✅ 이렇게
SELECT * FROM pp.tm_tag_point
WHERE tag_id = 'TAG-001'
AND timestamp >= '2026-07-01' AND timestamp < '2026-07-02';
-- ❌ 이렇게 하지 마십시오
SELECT * FROM pp.tm_tag_point WHERE value > 100 ALLOW FILTERING;
ALLOW FILTERING 不是许可,而是警告Aster TSDB 要求这一点意味着必须搜索全部节点。如果在运行中的集群上执行,会导致其他查询瞬时变慢。此类查询请发送到 Spark SQL 处理。
示例
最近几个值
SELECT timestamp, value FROM pp.tm_tag_point
WHERE tag_id = 'TAG-001'
ORDER BY timestamp DESC
LIMIT 20;
按时间段截取
SELECT timestamp, value, quality FROM pp.tm_tag_point
WHERE tag_id = 'TAG-001'
AND timestamp >= '2026-07-01 08:00' AND timestamp < '2026-07-01 09:00';
按时间平均——在服务器端计算
SELECT time_bucket(1h, timestamp) AS bucket, avg(value)
FROM pp.tm_tag_point
WHERE tag_id = 'TAG-001'
AND timestamp >= '2026-07-01' AND timestamp < '2026-07-02'
GROUP BY tag_id, time_bucket(1h, timestamp);
内置了包括 time_bucket 在内的21个时序函数 →
时序函数。
日志正文搜索
SELECT ts, msg FROM logs
WHERE device = 'pump-01'
AND ts >= '2026-07-31' AND ts < '2026-08-01'
AND msg LIKE '%타임아웃%';
无需 ALLOW FILTERING 即可完成 → 全文搜索。
查看模式
DESCRIBE KEYSPACES;
DESCRIBE TABLE pp.tm_tag_point;
-- 이 테이블에 걸린 컴팩션·계층화 설정
SELECT compaction, extensions FROM system_schema.tables
WHERE keyspace_name = 'pp' AND table_name = 'tm_tag_point';
注意事项
- 排序仅沿集群键方向进行。无法通过
ORDER BY对任意列进行排序。 - 不支持连接操作。 如果需要关联多个表,请使用 Spark SQL。
- 每个表的 TTL、压缩策略和大小由
pd retention显示。 - 即使历史数据已压缩,查询方式也相同——
SELECT会自动合并读取 → 分层存储。