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