Не удалось получить столбец из базы данных Influx - PullRequest
0 голосов
/ 02 октября 2019

Я использую sprigboot и приток клиентов: 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;

Кто-нибудь может подсказать, что я делаю не так?

ПРИМЕЧАНИЕ. Замечание: странно, что мы не можем выбратьзапросить для строкового столбца какие-либо предложения?

1 Ответ

1 голос
/ 03 октября 2019

Я думаю, что подход клиентской библиотеки infxdb-java для создания абстракции для доступа к данным немного сбивает с толку. Прежде всего, ни один из них не является на самом деле столбцами. В InfluxDB ваши данные хранятся с использованием следующей модели данных (иначе, линейный протокол): measurement-name,tag-set field-set timestamp

« Измерение » - это высокий уровень группировки данных, и он строка , « набор тегов » - это набор пар ключ / значение, которые можно рассматривать как метаданные, где все значения проиндексированы и строки и « набор полей » представляет собой набор пар ключ / значение, значения которых могут быть int64 , float64 , bool или строка . В отличие от тегов, поля не индексируются.

В классе LayoutMapper вы устанавливаете tag=true для id и linename, что означает, что эти два являются членами набора тегов вВаше измерение. Теги используются для запроса полей высокопроизводительным способом. По этой причине они обычно находятся в предложении WHERE, а не в SELECT.

В InfluxDB, если вы хотите вернуть определенный тег, предложение SELECT должно включать хотя бы одно поле. Вот почему вы получаете результаты только по запросам, включая поля * и layout. В общем, попробуйте следующее:

SELECT layout, linename FROM layout;
...