- половина потока (50 доставок из 104) не несёт metrics вовсе и до сих пор числилась parsed: ретеншен, поверив статусу, срезал бы тела stateOfMind, которых в экспорте Apple нет - разбор перечисляет верхнеуровневые ключи data, непокрытые проглатываются декодированием: тело 40 МиБ из непокрытой секции удерживает 0 МиБ - статус partial и колонка delivery.uncovered_sections; миграция переводит прежние parsed в pending — им верить нельзя - витрина не изменилась: отпечаток совпал с прогоном до изменения
36 lines
2.9 KiB
SQL
36 lines
2.9 KiB
SQL
-- +goose Up
|
|
-- Секции тела, которых разбор не покрыл. JSON-массив имён (`["stateOfMind"]`),
|
|
-- пустой список — `[]`.
|
|
--
|
|
-- Массивом, а не строкой с разделителем: имя ключа приходит из чужого тела и
|
|
-- может содержать что угодно, включая пробел и запятую. JSON снимает вопрос
|
|
-- разделителя, согласуется с колонкой headers и читается из SQLite через
|
|
-- json_each, если ретеншену это понадобится.
|
|
--
|
|
-- Колонка — ответ на вопрос «что останется потерянным, если тело удалить».
|
|
-- Для stateOfMind ответ необратим: в экспорте Apple его нет (находка 46),
|
|
-- доставки HAE для него единственный источник.
|
|
ALTER TABLE delivery ADD COLUMN uncovered_sections TEXT NOT NULL DEFAULT '[]';
|
|
|
|
-- Статус parsed, поставленный кодом, который частичного разбора не различал,
|
|
-- ничего не доказывает: под ним лежат и полностью разобранные доставки, и
|
|
-- доставки из одних тренировок с нулём точек (48 из 99 на живом архиве).
|
|
-- Ретеншен, ради которого признак и заводится, поверил бы им и срезал тела.
|
|
--
|
|
-- pending — консервативный статус: ретеншен не трогает его никогда, а подбор
|
|
-- pending пересвернёт доставки из архива. Свёртка идемпотентна, повторный
|
|
-- прогон журнала состояния не меняет.
|
|
--
|
|
-- Целевой перевод только строк с points = 0 рассматривался и отвергнут: он
|
|
-- опирается на наблюдение «секции не смешиваются», собранное за двое суток
|
|
-- потока, а ставить на такое наблюдение необратимое удаление тел значит
|
|
-- повторять ошибку, ради которой задача и заведена.
|
|
UPDATE delivery SET parse_status = 'pending' WHERE parse_status = 'parsed';
|
|
|
|
-- +goose Down
|
|
-- ВНИМАНИЕ: миграция односторонняя ПО ДАННЫМ. Down снимает колонку, но какие
|
|
-- доставки были parsed, восстановить неоткуда — состояние пересобирается из
|
|
-- архива, а не откатом. До появления подбора pending строки останутся в этом
|
|
-- статусе.
|
|
ALTER TABLE delivery DROP COLUMN uncovered_sections;
|