Grafana对接AWS Timestream时序图报Data is missing a number field如何解决
问题产生原因
表格视图对返回字段类型无强制校验,字符串、数值类内容都可直接渲染,因此表格展示正常不代表数据结构符合时序图要求。触发Data is missing a number field报错、时序图选项不出现的核心原因是:Grafana时序面板要求返回结果必须包含可识别的时间类型字段+数值类型的指标字段,当前你的查询结果里w_flow字段没有被识别为合法数值,常见触发场景如下:
- 查询返回的
w_flow实际为字符串类型:比如建表时误将该字段存为varchar类型,或查询时对字段做了拼接(比如拼接了流量单位后缀)、格式化操作,输出内容包含非数值字符 - 时间字段未被正确识别:查询时将Timestream原生
timestamp类型的时间字段转成了字符串输出,或修改时间字段别名后没有在Grafana中做列映射,连带导致指标列类型识别失效 - 查询输出格式配置错误:Grafana查询编辑器里的返回格式被误设为
Table而非Time series,插件不会自动做时序结构解析 - Timestream数据源插件版本过旧:存在类型识别兼容bug,无法自动解析Timestream返回的measure值类型
- 查询语句结构混乱:比如用了
SELECT *返回大量无关字段、做了pivot转置打乱了列结构,导致面板找不到对应的数值指标列
修复配置步骤
按以下顺序排查调整即可:
- 先修正Timestream查询语句
不要用SELECT *,明确指定返回列,做显式类型校验转换:- 时间字段直接返回原生
time列,不要做字符串格式化,保留timestamp类型,时间过滤条件用Grafana内置宏$__timeFilter(time) - 对
w_flow做显式数值转换,不管原字段是什么类型,都转成数值型输出,参考写法:SELECT time, CAST(w_flow AS DOUBLE) AS w_flow, [你的分组维度字段,比如site_id、device_id] FROM "你的业务库名"."你的业务表名" WHERE $__timeFilter(time) ORDER BY time ASC - 不要在查询里给
w_flow拼接单位,单位配置后续在Grafana面板里加即可,避免引入非数值字符
- 时间字段直接返回原生
- 调整Grafana查询页配置
- 找到查询编辑器下方的
Format as选项,确认选中Time series,不要选Table - 如果修改过时间字段的别名,在列映射配置里手动指定时间列对应的字段名,不要留自动识别
- 维度类字段(站点、设备等分组标签)映射到
Labels项,不要和指标值混放
- 找到查询编辑器下方的
- 配置转换规则兜底
如果改完查询还是识别异常,进入面板的Transform标签页添加两个转换规则:- 添加
Convert field type转换,字段选择w_flow,目标类型设置为Number - 添加
Organize fields,将时间字段排序到最前,隐藏无关的冗余字段,确认w_flow的类型标识为数值
- 添加
- 兼容问题排查
如果以上操作都无效,升级Grafana内置的AWS Timestream数据源插件到最新稳定版,旧版本插件确实存在Timestream返回值类型识别的bug。
内容的提问来源于stack exchange,提问作者IgorAlves
相关产品推荐
相关产品推荐

