使用Jenkins InfluxDB插件如何覆盖已有表的现有字段?
覆盖InfluxDB已有字段的实现方法
InfluxDB本身没有独立的字段更新操作,相同measurement(你这里对应的表是series_1、series_2)、相同全量标签组合、相同时间戳的写入请求,会自动覆盖对应点的字段值:你写入时传了哪些字段,就覆盖哪些字段的值,未传递的字段原值保留。
对应到你使用的Jenkins InfluxDB插件,按以下步骤操作即可:
- 匹配待覆盖数据的标签集:你构造的
customDataMapTags必须和待覆盖的旧数据的标签完全一致,标签的key、value不能多也不能少,否则会被判定为新的数据点,无法触发覆盖。 - 匹配待覆盖数据的时间戳:插件默认使用Jenkins任务执行的当前时间作为写入时间戳,如果你要覆盖的旧数据不是当前时间生成的,需要通过
customTimestamp参数手动指定和旧数据完全一致的时间戳(单位为毫秒)。 - 构造要覆盖的字段:只需要把需要更新的字段放入自定义字段Map即可,不需要修改的字段可以不用传递。
示例代码(覆盖series_1中指定点的field_a值)
def myFields1 = [:] def myCustomMeasurementFields = [:] // 仅填写需要覆盖的字段,未填写的字段会保留原值 myFields1['field_a'] = 99 myCustomMeasurementFields['series_1'] = myFields1 // 标签必须和待覆盖的旧数据完全匹配 myTags = ['series_1':['tag_a':'a','tag_b':'b']] influxDbPublisher( selectedTarget: 'my-target', customDataMap: myCustomMeasurementFields, customDataMapTags: myTags, // 手动指定和待覆盖旧数据一致的毫秒级时间戳 customTimestamp: 1690000000000 )
注意事项
- 如果不需要保留旧的未修改字段,你可以把所有字段的新值都传入字段Map,即可实现整行数据的完全覆盖。
- 标签值的大小写、特殊字符需要和旧数据完全一致,否则会生成新的数据点而不是覆盖旧数据。
内容的提问来源于stack exchange,提问作者HC LW
相关产品推荐
相关产品推荐

