使用 kwbase CLI 工具管理 KWDB
本节通过监控场景,演示如何使用 kwbase CLI 工具管理 KWDB 多模数据库,具体包括:
- 关系数据操作:管理相对静态的基础数据,如设备信息、用户档案等
- 时序数据操作:处理按时间序列变化的动态数据,如传感器读数、监控指标等
- 跨模查询:通过联合查询关系库和时序库数据,实现多模数据融合分析
关系数据操作
创建数据库和数据表。
创建和使用关系数据库。
-- 创建关系数据库 CREATE DATABASE device_info; -- 切换到指定数据库 USE device_info;
创建设备表。
CREATE TABLE devices ( device_id INT PRIMARY KEY, -- 设备ID device_name VARCHAR NOT NULL, -- 设备名称 location VARCHAR, -- 位置 status VARCHAR DEFAULT 'active' -- 状态 );
批量插入基础数据。
-- 批量插入设备基础信息 INSERT INTO devices VALUES (101, '传感器A', '机房1', 'active'), (102, '传感器B', '机房2', 'active'), (103, '传感器C', '机房1', 'active');
数据查询验证。
-- 查询所有设备信息 SELECT * FROM devices;
查询结果示例:
device_id | device_name | location | status ----------+-------------+----------+-------- 101 | 传感器A | 机房1 | active 102 | 传感器B | 机房2 | active 103 | 传感器C | 机房1 | active
时序数据操作
时序表具有特殊的结构要求:
- 时间戳列:必须作为表的第一列
- 标签列(TAGS):用于标识设备静态属性
- 主标签(PRIMARY TAGS):用于区分不同的实体对象
以下以传感器实时监控为例,演示时序数据的基本操作。
创建时序数据库和时序表。
使用
TS
关键字创建时序数据库。-- 创建时序数据库 CREATE TS DATABASE monitoring; -- 切换到时序数据库 USE monitoring;
创建监控数据表。
CREATE TABLE sensor_data ( ts TIMESTAMP NOT NULL, -- 时间戳(必须为第一列) temperature FLOAT, -- 温度 humidity FLOAT -- 湿度 ) TAGS ( device_id INT NOT NULL, -- 设备ID(标签) sensor_type VARCHAR NOT NULL -- 传感器类型(标签) ) PRIMARY TAGS(device_id); -- 主标签
插入时序数据。
-- 插入当前时间的传感器监控数据 INSERT INTO sensor_data VALUES (NOW(), 25.5, 60.2, 101, 'temperature'), (NOW(), 26.1, 58.7, 102, 'temperature'), (NOW(), 24.8, 62.1, 103, 'temperature');
查询时序数据。
-- 查询最新的5条传感器数据,按时间倒序排列 SELECT * FROM sensor_data ORDER BY ts DESC LIMIT 5;
查询结果示例:
ts | temperature | humidity | device_id | sensor_type -------------------------------+-------------+----------+-----------+------------- 2025-08-01 10:30:15.123+00:00 | 24.8 | 62.1 | 103 | temperature 2025-08-01 10:30:15.123+00:00 | 26.1 | 58.7 | 102 | temperature 2025-08-01 10:30:15.123+00:00 | 25.5 | 60.2 | 101 | temperature
跨模查询
KWDB 的核心优势在于支持跨时序库和关系库的联合查询,实现多模数据的深度融合分析。
查询设备基础信息及其最新监控数据。
-- 联合查询设备基础信息和最新监控数据 -- 使用 DISTINCT ON 获取每个设备的最新数据记录 SELECT d.device_name, -- 设备名称 d.location, -- 设备位置 s.temperature, -- 最新温度 s.humidity, -- 最新湿度 s.ts as last_update -- 最后更新时间 FROM device_info.devices d JOIN ( -- 子查询:获取每个设备的最新监控数据 SELECT DISTINCT ON (device_id) device_id, temperature, humidity, ts FROM monitoring.sensor_data ORDER BY device_id, ts DESC ) s ON d.device_id = s.device_id WHERE d.status = 'active' -- 只查询激活状态的设备 ORDER BY d.device_id;
查询结果示例:
device_name | location | temperature | humidity | last_update ------------+----------+-------------+----------+--------------------------- 传感器A | 机房1 | 25.5 | 60.2 | 2025-08-01 10:30:15.123+00:00 传感器B | 机房2 | 26.1 | 58.7 | 2025-08-01 10:30:15.123+00:00 传感器C | 机房1 | 24.8 | 62.1 | 2025-08-01 10:30:15.123+00:0
按位置统计平均温湿度。
-- 按设备位置统计最近1小时内的平均温湿度 SELECT d.location, -- 设备位置 COUNT(*) as device_count, -- 该位置的设备数量 AVG(s.temperature) as avg_temp, -- 平均温度 AVG(s.humidity) as avg_humidity -- 平均湿度 FROM device_info.devices d JOIN monitoring.sensor_data s ON d.device_id = s.device_id WHERE s.ts > NOW() - INTERVAL '1 hour' -- 筛选最近1小时的数据 GROUP BY d.location -- 按位置分组 ORDER BY d.location;
查询结果示例:
location | device_count | avg_temp | avg_humidity ---------+--------------+----------+-------------- 机房1 | 2 | 25.2 | 61.2 机房2 | 1 | 26.1 | 58.7