跳到主要内容

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 会自动合并读取 → 分层存储。

相关文档​