Инкрементальная загрузка
Через API можно получить информацию о потреблении за 3 прошедших календарных месяца, включая текущий. Данные о потреблении поступают и обновляются каждый час. При обновлениии автоматически пересчитывается потребление за текущий и предыдущие месяцы, это может быть связано с пороговым потреблением или изменением тарифа.
Предпочтительным способом работы с данными потребления через API является инкрементальная загрузка. Это способ получения данных и их обновлений, где в каждой итерации загрузки передаются новые данные и исправления исторических данных, произошедшие с момента предыдущей итерации.
С помощью поля updated_d можно определить, когда строка данных была добавлена или отредактирована. По этому полю доступно применение фильтров через параметры start_updated_dt и end_updated_dt, где start_updated_dt — начало диапазона для updated_dt, а end_updated_dt — конец диапазона для updated_dt.
Строка может изменяться со временем по причине исправлений (пороговое потребление, изменение тарифа и т.п.), поэтому при инкрементальной загрузке, ориентируясь на поле encode_id, необходимо не только вставлять новые данные, но и обновлять исторические.
При использовании инкрементальной загрузки вместе с пагинацией в каждой итерации существует вероятность изменения данных в источнике API на странице N при подгрузке страницы N + k. Чтобы избежать недетерминированного поведения рекомендуется в качестве start_updated_dt для итерации использовать дату запуска предыдущей итерации. В таком случае недетерминированное поведение при использовании пагинации не будет приводить к потере данных на дистанции, но при этом возможно дублирование части информации в паре последовательных итераций.
Пример получения дневных данных с начала периода наблюдений
Выполняем запрос:
/v2/consumption?start_date = 2025 -01-01T00:00:00Z & end_date = 2025 -02-15T12:00:00ZЗапуск итерации происходит 15 февраля 12:00 — получаем данные за период с января по февраль по текущую дату и время.
Выполняем запрос:
/v2/consumption?start_date = 2025 -01-01T00:00:00Z & end_date = 2025 -02-15T13:00:00Z & start_updated_dt = 2025 -02-15T12:00:00Z
Запуск итерации происходит 15 февраля 13:00 — получаем данные за период с января по февраль, которые изменились/появились с 15 февраля 12:00 по 15 февраля 13:00.
Выполняем запрос:
/v2/consumption?start_date = 2025 -01-01T00:00:00Z & end_date = 2025 -02-16T17:00:00Z & start_updated_dt = 2025 -02-15T13:00:00Z
Запуск итерации происходит 16 февраля 17:00 — получаем данные за период с января по февраль, которые изменились/появились с 15 февраля 13:00 по 16 февраля 17:00.
Далее можно повторять запросы по указанной логике. Промежуток между итерациями должен быть больше или равен 1 ч.
Вы можете использовать подготовленный скрипт инкрементальной загрузки. В данном примере в качестве СУБД получателя используется PostgreSQL.
consumption_ddl.sql — описание DDL модели данных.
import_data.py — скрипт загрузки. Участки, которые необходимо заполнить самостоятельно, отмечены маркером TODO.
При запусках скрипта с интервалом больше или равным 1 ч данные будут загружаться/обновляться в СУБД инкрементально.