InfluxDB записывает точки с одинаковой временной меткой, но с разными измерениями

Требование: я хочу создать базу данных effxDB для хранения данных временных рядов от нескольких датчиков, показывающих температуру в разных местах.

Проблема: Когда я записываю точки в базу данных с одинаковой отметкой времени, но разными тегами (например, местоположение) и значением поля (температуры), приток заменяет значения тегов и полей последней отметкой времени

Я проследил за документацией, доступной на их веб-сайте, и они показывают образец базы данных с вышеуказанным требованием, но не могу найти используемую схему.

Пример таблицы с дублированными временными метками

Дополнительная информация: Пример ввода:

json_body_1 = [
{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server02",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 0.7,
        "Int_value": 6,
        "String_value": "Text",
        "Bool_value": False
    }
},
{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server01",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 1.0,
        "Int_value": 2,
        "String_value": "Text",
        "Bool_value": False
    }
}]

Я использовал пример, приведенный в официальной документации, но вместо двух записей я получаю только одну. Обратите внимание, что тег хоста отличается, что в идеале должно сделать каждую точку уникальной.

Документация

1 ответ

Решение

Вы можете попробовать сделать это следующим образом (аналогично началу работы с Python и InfluxDB):

from influxdb import InfluxDBClient

influx_client = InfluxDBClient(
    host='hostname', port=8086, database='dbname')
influx_client.create_database('dbname')

points = [{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server02",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 0.7,
        "Int_value": 6,
        "String_value": "Text",
        "Bool_value": False
    }
},
{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server01",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 1.0,
        "Int_value": 2,
        "String_value": "Text",
        "Bool_value": False
    }
}]


influx_client.write_points(points)

Сегодня я тоже столкнулся с той же проблемой, и теперь я подхожу к решению.:)

from influxdb import InfluxDBClient

client = InfluxDBClient(host='host name', port=8086, database='test_db',username='writer', password=Config.INFLUXDB_WRITE_PWD)

points = [{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server02",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 0.7,
        "Int_value": 6,
        "String_value": "Text",
        "Bool_value": False
    }
},
{
    "measurement": "cpu_load_short",
    "tags": {
        "host": "server01",
        "region": "us-west"
    },
    "time": "2009-11-10T23:00:00Z",
    "fields": {
        "Float_value": 1.0,
        "Int_value": 2,
        "String_value": "Text",
        "Bool_value": False
    }
}]

status = client.write_points(json_body_1, database='test_db', batch_size=10000, protocol='json')

Вот результат

> select * from cpu_load_short;
name: cpu_load_short
time                Bool_value Float_value Int_value String_value host     region
----                ---------- ----------- --------- ------------ ----     ------
1257894000000000000 false      1           2         Text         server01 us-west
1257894000000000000 false      0.7         6         Text         server02 us-west

Другие вопросы по тегам