You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Apache IoTDB date_bin用1mo+1d间隔报错的技术问询

自定义计费周期的IoTDB CPU指标聚合需求

场景说明

需分析服务器CPU指标,采用非日历月的自定义计费周期:每个周期为「1整月加1天」,例如从1月15日到2月16日,下一个周期从2月16日到3月17日,以此类推。
环境:Apache IoTDB 2.0.6,单机部署

样本数据

CREATE TABLE device_metrics(
  `time` TIMESTAMP `TIME`,
  device_id STRING TAG,
  cpu_usage FLOAT FIELD
);

INSERT INTO device_metrics VALUES
('2024-01-15T10:00:00', 'server_01', 45.2), -- billing period 1 start
('2024-01-31T10:00:00', 'server_01', 50.5),
('2024-02-01T10:00:00', 'server_01', 48.0),
('2024-02-15T10:00:00', 'server_01', 52.3), -- billing period 1 end
('2024-02-16T10:00:00', 'server_01', 47.8), -- billing period 2 start
('2024-03-01T10:00:00', 'server_01', 49.5);

已尝试的方案及问题

方案1:混合单位间隔字符串

尝试用'1mo 1d'表示自定义间隔,执行SQL:

SELECT
date_bin('1mo 1d', `time`) as time_bin,
avg(cpu_usage) as avg_cpu
FROM device_metrics
`GROUP BY` date_bin('1mo 1d', `time`);

返回语法错误:

Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 700: line 1:17: mismatched input ''1mo 1d''. Expecting: <integer>

方案2:嵌套date_bin调用

尝试先按月份取整再添加1天偏移,执行SQL:

SELECT
date_bin(1d, date_bin(1mo, `time`)) as time_bin,
avg(cpu_usage) as avg_cpu
FROM device_metrics
`GROUP BY` date_bin(1d, date_bin(1mo, `time`));

语句可执行,但结果不符合需求——数据被聚合到日历月起始日,+1天的偏移未生效:

+-----------------------------+-----------------+
| time_bin| avg_cpu|
+-----------------------------+-----------------+
|2024-01-01T08:00:00.000+08:00|47.85000038146973|
|2024-02-01T08:00:00.000+08:00|49.36666615804037|
|2024-03-01T08:00:00.000+08:00| 49.5|
+-----------------------------+-----------------+

预期分组结果

Window StartWindow EndData Points IncludedExpected Avg CPU
2024-01-152024-02-16Jan 15, Jan 31, Feb 1, Feb 15~49.0
2024-02-162024-03-17Feb 16, Mar 1~48.7

疑问

是否存在IoTDB SQL原生方法(比如未公开的语法或函数变体)能实现上述自定义周期的聚合需求?

内容的提问来源于stack exchange,提问作者何乐怡

火山引擎 最新活动