-- 迁移：修复 DWD 层 BC 哨兵日期（0001-12-31 23:59:43 BC）→ NULL
-- 日期：2026-02-22
-- 关联：BUG 12 — 上游 API 返回 0001-01-01T00:00:00 哨兵值，
--       ODS timestamp 转 DWD timestamptz 时在 Asia/Shanghai 时区下变为 BC 日期，
--       psycopg2 无法解析 BC 日期导致 ValueError。
-- 影响：6 个 DWD 表/列，共约 69,668 行
-- 幂等：可重复执行，WHERE 条件仅匹配 year < 1 的行

BEGIN;

-- 1. dwd.dim_assistant_ex.birth_date（约 1,107 行）
UPDATE dwd.dim_assistant_ex
   SET birth_date = NULL
 WHERE EXTRACT(year FROM birth_date) < 1;

-- 2. dwd.dim_member_card_account_ex.disable_start_time（约 18,172 行）
UPDATE dwd.dim_member_card_account_ex
   SET disable_start_time = NULL
 WHERE EXTRACT(year FROM disable_start_time) < 1;

-- 3. dwd.dim_member_card_account_ex.disable_end_time（约 18,172 行）
UPDATE dwd.dim_member_card_account_ex
   SET disable_end_time = NULL
 WHERE EXTRACT(year FROM disable_end_time) < 1;

-- 4. dwd.dwd_assistant_service_log_ex.composite_grade_time（约 5,297 行）
UPDATE dwd.dwd_assistant_service_log_ex
   SET composite_grade_time = NULL
 WHERE EXTRACT(year FROM composite_grade_time) < 1;

-- 5. dwd.dwd_recharge_order_ex.revoke_time（约 485 行）
UPDATE dwd.dwd_recharge_order_ex
   SET revoke_time = NULL
 WHERE EXTRACT(year FROM revoke_time) < 1;

-- 6. dwd.dwd_settlement_head_ex.revoke_time（约 26,435 行）
UPDATE dwd.dwd_settlement_head_ex
   SET revoke_time = NULL
 WHERE EXTRACT(year FROM revoke_time) < 1;

COMMIT;
