#python #timestamp #influxdb #influxdb-python
Вопрос:
Я отправляю данные в базу данных InfluxDB с помощью клиентской библиотеки Python. В приведенном примере используется time
метод из Point
класса, который, как предполагается, позволяет записывать данные с предоставленной меткой времени, а не время, полученное данными на сервере.
Я использую следующий импорт:
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
from influxdb_client.domain.write_precision import WritePrecision
И у меня есть следующие сегменты кода для создания Point
и отправки его с помощью write
метода:
def get_shark_intervals(sharks, buffer):
for shark in sharks:
demand = Shark.decode_readings(shark.read([Shark.DEMAND]))
interval = Shark.decode_datetime(shark.read([Shark.INTERVAL]))
if demand is None or interval is None:
return
print(interval)
buffer.append(
[
int(datetime(
2000 interval[0],
interval[1],
interval[2],
interval[3],
interval[4],
interval[5]
).timestamp()),
"L1",
shark.get_equipment(),
shark.get_description(),
shark.get_nom_voltage(),
"DEMAND",
int(demand[0][1])
]
)
print(buffer[-1][0])
return
def flush_buffer(influx, buffer):
len_buffer = len(buffer)
points = [0] * len_buffer
for i in range(0, len_buffer):
point = Point("consumption")
.tag("location", buffer[i][1])
.tag("equipment", buffer[i][2])
.tag("description", buffer[i][3])
.tag("nominal_voltage", buffer[i][4])
.tag("type", buffer[i][5])
.field("W", buffer[i][6])
.time(buffer[i][0], write_precision = WritePrecision.S)
points[i] = point
influx.write(
bucket = BUCKET,
record = points,
write_precision = WritePrecision.S
)
buffer = []
return
Для двух print
операторов в моем коде я получаю этот вывод:
Список отформатирован как [Год, Месяц, День, Час, Минута, Секунда], и метка времени Unix совпадает с элементами списка при преобразовании; однако, как показано ниже, InfluxDB, похоже, использует полученную сервером метку времени при отображении запроса.:
Это также видно в необработанных данных, которые _time
не соответствуют предоставленным отметкам времени:
Комментарии:
1. При тестировании дополнительной телеметрии с интервалом выборки в 1 секунду и интервалом загрузки в 10 секунд все метки времени синхронизируются с интервалами в 10 секунд, поэтому создается впечатление, что база данных InfluxDB игнорирует метку времени в отправляемой точке.