PAYATHON 2026

GridDB TimeSeries 为什么不接受 TIMESTAMP(6) 主键?

数据小许

结论

报错表明,GridDB 创建 meter_3 这个 TimeSeries 容器时,不接受 TIMESTAMP(6) 作为 rowkey(主键)类型。仅凭这条错误,无法确定限制适用于哪些 GridDB 版本,也无法判断其他容器类型或精度设置是否支持微秒时间戳。请先核对当前版本对 TimeSeries rowkey 类型和精度的要求。

排查与处理

建表语句将带小数秒精度的时间戳设为主键:

CREATE TABLE meter_3
(
timestamp TIMESTAMP(6) PRIMARY KEY,
kwh DOUBLE,
temp DOUBLE
) USING TIMESERIES;

返回信息中的关键部分是:

[60015:DS_DS_SCHEMA_INVALID] Execute SQL failed
(reason=CREATE TABLE failed (reason=Type of rowkey not supported)]

这说明建表在 schema 校验阶段失败,原因是 rowkey 类型不受支持。可以按以下顺序排查:

  1. 查看当前 GridDB 版本的 SQL 文档,确认 TimeSeries 的 rowkey 是否支持 TIMESTAMP(6),以及该版本支持的时间戳精度。

  2. 如果该版本要求使用默认精度的 TIMESTAMP,可以先去掉 (6),验证能否建表:

    CREATE TABLE meter_3
    (
    timestamp TIMESTAMP PRIMARY KEY,
    kwh DOUBLE,
    temp DOUBLE
    ) USING TIMESERIES;

    这是一种用于验证 rowkey 精度限制的候选写法,是否可用仍需以当前版本的文档和实际执行结果为准。

  3. 如果业务必须保留微秒信息,可以考虑将微秒部分单独存入数值列。同时要确认降低时间戳精度后,多条记录是否可能映射到同一个 rowkey。若可能发生冲突,就需要选择支持业务唯一键的数据模型,并先核对该模型是否符合所用 GridDB 版本的语法和能力。

注意事项

不要因为把列声明改为 TIMESTAMP,就认为微秒精度仍会保留。默认精度及其行为需要按当前版本确认。如果降低精度会合并不同采样点,单独增加微秒字段也无法解决 rowkey 冲突。

备注:内容仅供参考。