0

我正在使用 sprigboot 和 influx 客户端:https ://github.com/influxdata/influxdb-java

我面临一个问题,我试图从流入数据库中获取特定列,但是当我将列名放入查询中时我无法获得任何记录。但是,当我尝试使用 select * 然后我得到数据。

@Data
@Measurement(name = "layout")
public class LayoutMapper {

    @Column(name = "id", tag=true)
    private String id;

    @Column(name = "linename", tag=true)
    private String lineName;

    @Column(name = "tenantid")
    private String tenantName;

    @Column(name = "layout")
    private String layout;



}

将 POJO 保存到数据库:

Point point = Point.measurementByPOJO(clazz.getClass()).addFieldsFromPOJO(pojoObject).build();
            connection.query(new Query("CREATE RETENTION POLICY " + retentionPolicyName + " ON " + dbProperties.getDatabase() DURATION 1h  REPLICATION 1 DEFAULT"));
            connection.write(dbProperties.getDatabase(), retentionPolicyName, point);

在职的:

  select * from layout;
  select layout from layout;

不工作(给出空记录):

select linename from layout;

谁能建议我做错了什么?

注意:观察它奇怪的是我们不能对字符串列进行选择查询任何建议?

4

1 回答 1

1

我认为 influxdb-java 客户端库创建用于访问数据的抽象的方法有点令人困惑。首先,这些实际上都不是列。在 InfluxDB 中,您的数据使用以下数据模型(又名线路协议)存储:measurement-name,tag-set field-set timestamp

“<strong>测量”是数据的高级分组,它是字符串,“<strong>标签集”是键/值对的集合,可以被认为是所有值都被索引字符串的元数据, “<strong>字段集”是键/值对的集合,其中值可以是int64float64boolstring。与标签相反,字段没有索引。

LayoutMapper类中,您设置tag=trueidand linename,这意味着这两个是您测量中标记集的成员。标签用于以高性能方式查询字段。因此,它们通常位于 WHERE 子句中,而不是单独位于 SELECT 中。

在 InfluxDB 中,如果要返回特定的标签,则 SELECT 子句必须至少包含一个字段。*这就是为什么您只能从包括和layout字段在内的查询中获得结果。总而言之,尝试以下方法:

SELECT layout, linename FROM layout;
于 2019-10-03T09:02:57.703 回答