InfluxDB v2.5.1
influxdb-client-java 6.7.0
Java POJO
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Measurement(name = "my_measurement")
public class MyMeasurement {
@Column(timestamp = true)
private Instant time;
@Column(name = "my_tag", tag = true)
private Long myTag;
@Column(name = "value")
private Integer value;
}
Write
influxDBClient.getWriteApiBlocking().writeMeasurements(WritePrecision.NS,
IntStream.range(0, 1000)
.mapToObj(i -> MyMeasurement.builder()
.time(Instant.now())
.myTag(Math.abs(new Random().nextLong()))
.value(Math.abs(new Random().nextInt()))
.build())
.collect(Collectors.toList()));
Read
influxDBClient.getQueryApi()
.query("from(bucket: \"mybucket\") |> range(start: -1d) |> filter(fn: (r) => r[\"_measurement\"] == \"my_measurement\")", MyMeasurement.class);
The reading statement throws InfluxException
com.influxdb.exceptions.InfluxException: Class 'MyMeasurement' field 'myTag' was defined with a different field type and caused a ClassCastException. The correct type is 'java.lang.String' (current field value: '1000816197908726879').
long.class.isAssignableFrom(fieldType))
and String is not assiganble for Long.
Possible solution is to use String
for tags in your POJO.