【问题标题】:Not able to retrieve a column from Influx database无法从 Influx 数据库中检索列
【发布时间】:2019-10-02 09:54:04
【问题描述】:

我正在使用 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;

谁能建议我做错了什么?

注意:观察到我们不能对字符串列进行选择查询有任何建议,这很奇怪?

【问题讨论】:

    标签: java spring-boot influxdb influxql


    【解决方案1】:

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

    测量”是一个高级别的数据分组,它是字符串,“标签集”是一个集合键/值对可以被视为元数据,其中所有值都索引字符串,“字段集”是键的集合/value 对,其中的值可以是 int64float64boolstring。与标签相比,字段没有索引。

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

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

    SELECT layout, linename FROM layout;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-20
      • 2023-03-12
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多