From 76405a06eefd5b0bfbfa8dc556ea48f6238471cf Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Sat, 8 Aug 2026 20:15:56 +0300 Subject: [PATCH] =?UTF-8?q?docs(storage):=20=D1=83=20Date=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=8F=D1=81=D0=B0=20=D0=BD=D0=B5=D1=82,=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=B5=D0=BC=D1=83=20=D0=BB=D0=B5=D0=B3=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=BF=D1=80=D0=BE=D0=BC=D0=B0=D1=85=D0=BD=D1=83=D1=82?= =?UTF-8?q?=D1=8C=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - фраза «Date не участвует вовсе» выводила тип из-под общего правила: про объявление это правда, про употребление — нет. Считая время по EventDate без имени пояса, легко получить часы вне диапазона. - Что: - фраза заменена на две: Date хранит только номер дня, пояс при счёте времени называют руками, промах виден по часам за границами 0–23. - Проверка: - замерено на стенде: без имени пояса часы от начала суток идут -4…19, отрицательных 15 843 события; с названным поясом — 0…23 Co-Authored-By: Claude Opus 5 --- docs/architecture/storage.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/architecture/storage.md b/docs/architecture/storage.md index 551ff41..caf8f1f 100644 --- a/docs/architecture/storage.md +++ b/docs/architecture/storage.md @@ -171,7 +171,9 @@ Greenplum, чтобы словарь был общим у двух хранил абсолютны тоже — `DateTime64(3, 'UTC')`. DDS и витрины обслуживают человека с дашбордом, поэтому время там лежит местным, в поясе счётчика (`Europe/Samara`, UTC+4), и пересчёт идёт один раз при наполнении слоя: автор отчёта пояса не -пишет, он берёт готовую колонку. `Date` не участвует вовсе — у типа пояса нет. +пишет, он берёт готовую колонку. `Date` хранит только номер дня — чьи это +сутки, в нём не записано. Поэтому время по `EventDate` считают, назвав пояс +руками; промах виден сразу: часы суток уезжают за границы 0–23. Объявить местным и ODS — `DateTime('Europe/Samara')` — соблазнительно: байты те же, меняется одна линза, и `toDate(UTCEventTime)` начинает совпадать с