写入操作
更新时间:2022-07-19
写入单域数据点
用户可以参考如下代码写入单域数据点:
注意:当写入的metric、field、tags、timestamp都相同时,后写入的value会覆盖先写入的value。
String METRIC = "wind"; // metric
String TAG_KEY = "city"; // 标签名称
String TAG_VALUE = "ShangHai"; // 标签值
String FIELD = "direction"; // 域
// 创建数据点
List<Datapoint> datapoints = Arrays.asList(new Datapoint()
.withMetric(METRIC) // 设置Metric
.withField(FIELD) // 设置数据点域,可选,不填使用默认域名 value
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addDoubleValue(System.currentTimeMillis(), 0.1)); // 添加一个数据点
tsdbClient.writeDatapoints(datapoints);
一个Datapoint对象可以同时添加多个数据点,这些数据点使用相同的metric和标签,相同的域。多个相同metric和标签的数据放入同一个Datapoint对象,可以减少payload。
Datapoint datapoint = new Datapoint()
.withMetric(METRIC) // 设置Metric
.withField(FIELD) // 设置数据点域,可选,不填使用默认域名 value
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addDoubleValue(System.currentTimeMillis(), 0.1) // 添加一个数据点
.addDoubleValue(System.currentTimeMillis() + 1, 0.2); // 再添加一个数据点
Datapoint对象可以添加double,long和String类型的数据点。对于同一个field,如果写入了某个数据类型的value之后,相同的field不允许写入其他数据类型。
// 添加Double类型数据点
Datapoint datapoint1 = new Datapoint()
.withMetric("wind") // 设置Metric
.withField(FIELD) // 设置数据点域,可选,不填使用默认域名 value
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addDoubleValue(System.currentTimeMillis(), 0.1); // 添加Double类型数据点
// 添加Long类型数据点
Datapoint datapoint2 = new Datapoint()
.withMetric("temperature") // 设置Metric
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addLongValue(System.currentTimeMillis(), 10L); // 添加Long类型数据点
// 添加String类型数据点
Datapoint datapoint3 = new Datapoint()
.withMetric("humidity") // 设置Metric
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addStringValue(System.currentTimeMillis(), "string"); // 添加String类型数据点
// 添加BigDecimal类型数据点
Datapoint datapoint4 = new Datapoint()
.withMetric("metric") // 设置Metric
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addBigDecimalValue(System.currentTimeMillis(), BigDecimal.valueOf(1.234)); // 添加BigDecimal类型数据点
写入多域数据点
不同的域并不需要同时写入,可以认为不同的域都是独立的。但如果查询时要用一条语句查出来,需要保证metric、所有的tag、时间戳都是一致的。
可以参考以下代码写入多域数据点:
String METRIC = "wind"; // metric
String TAG_KEY = "city"; // 标签名称
String TAG_VALUE = "ShangHai"; // 标签值
String FIELD_1 = "direction"; // 域1
String FIELD_2 = "speed"; // 域2
long TIME = System.currentTimeMillis(); // 时间
// 添加FIELD_1的数据点
Datapoint datapoint1 = new Datapoint()
.withMetric(METRIC) // 设置Metric
.withField(FIELD_1) // 设置域1
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag
.addDoubleValue(TIME, 0.1); // 指定时间写入Double类型数据点
// 添加FIELD_2的数据点
Datapoint datapoint2 = new Datapoint()
.withMetric(METRIC) // 设置Metric,需要和FIELD1的一样
.withField(FIELD_2) // 设置域2
.addTag(TAG_KEY, TAG_VALUE) // 设置Tag,需要和FIELD1的一样
.addLongValue(TIME, 10L); // 指定时间添加Long类型数据点,时间需要和FIELD_1的一样
tsdbClient.writeDatapoints(Arrays.asList(datapoint1, datapoint2));