49 файлов, миграция сделана командой tasks.py check --fix — той самой, ради которой в скрипте оставлена читаемость старой формы. Побочно тот же прогон проставил тег decomposed целям, у которых есть задачи: это его штатная работа. check после миграции зелёный, индексы согласованы. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Импорт родного экспорта Apple Health
- Секция: ядро
- Зачем: Слой sample пуст: полная история и точные сэмплы лежат в zip-архиве и никуда не едут
- Теги: goal:native-export-import
Слой sample пуст: настоящих сэмплов HealthKit в потоке нет вовсе — HAE отдаёт
посекундную развёртку, а не измерения (находка 34). Полная история и точные
сэмплы лежат в zip родного экспорта.
Это же основание для устаревания нижнего слоя и единственный способ поднять историю глубже недели: дыра старше недели проходами синхронизации не чинится.
Формат разобран на девяти экспортах за 5.5 лет (находки 42–45), гадать не придётся:
- версии 11 → 13 → 14, на 14 стоит больше года; за всё время ни один тип записи не исчез, только добавлялись. Значит незнакомый тип — новый тип, а не сломанный парсер: падать на нём нельзя;
Correlation— обёртка из двух записей, ею приезжает давление. Появилась только в 2026 году. Парсер по одним<Record>разберёт давление как две несвязанные метрики и потеряет их парность;WorkoutStatisticsвнутри тренировки — с 2024 года;- имя файла локализовано:
экспорт.xml, неexport.xml— так во всех девяти архивах; - DTD расходится с данными (в v11 у
<Me>на атрибут больше объявленного) — валидировать документ его же DTD нельзя; - объём: 1.6 ГБ XML и 3.6 млн записей в свежем экспорте — только потоковый разбор, документ целиком в память не влезет.
Шаги:
- потоковый разбор
экспорт.xmlв слойsample, включаяCorrelation; HeartRateVariabilityMetadataListсInstantaneousBeatsPerMinute— это тот жеheartbeatSeries, что в HAE (находка 39), 1.25 млн ударов;- маршруты GPX и ЭКГ отдельными файлами — их в XML нет;
- заливка кусками по годам, идемпотентно: повторный импорт того же архива не должен ничего менять;
export_cda.xmlигнорируем — это клинический формат тех же данных.
Готово, когда история за несколько лет лежит в слое sample, повторный импорт
не меняет ничего, а суммы по слою сходятся с часовым слоем HAE на пересечении
периодов.
Архивы: /home/av/MediaEverything/HealthData/apple_health/ — девять штук,
2021-12 … 2026-08. Старые версии формата годятся как регрессионный набор.