java - 无法从 Influx 数据库检索列

标签 java spring-boot influxdb influxql

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

有人可以建议我做错了什么吗?

注意:观察很奇怪,我们无法对字符串列进行选择查询,有什么建议吗?

最佳答案

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

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

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

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

SELECT layout, linename FROM layout;

关于java - 无法从 Influx 数据库检索列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58199224/

相关文章:

java - 在 Appengine 上使用 MapReduce 的动态查询语言

java - SpringBoot2 - jpa 实体不是托管类型

java - spring boot 无法识别 SPRING_APPLICATION_JSON 环境变量

java - 无法连接 MongoDB

java - 使用 Micrometer 指标运行 SpringBoot 2 应用程序时出错

time-series - Apache Kudu vs InfluxDB 在时间序列数据上的快速分析

docker - 连接 Kubernetes master,更新 heapster

java - Spring/Java org.springframework.beans.factory.CannotLoadBeanClassException : Cannot find class [C:\launchCodeFiles\src\main\java\RunMario. java]

java - Android ListView 不刷新

java - 线性布局中的按钮垂直而不是水平显示?