0001_create_group_funnel_tables.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """create group-buy funnel tables (daily + rolling)
  2. Revision ID: 0001
  3. Revises:
  4. Create Date: 2026-06-24
  5. Two tables per docs/03 §11 (v3):
  6. * ads_trd_group_funnel_daily - single day, full history.
  7. * ads_trd_group_funnel_rolling - rolling 7d/30d, single overwritten row.
  8. """
  9. from __future__ import annotations
  10. from typing import Sequence, Union
  11. from alembic import op
  12. import sqlalchemy as sa
  13. # revision identifiers, used by Alembic.
  14. revision: str = "0001"
  15. down_revision: Union[str, None] = None
  16. branch_labels: Union[str, Sequence[str], None] = None
  17. depends_on: Union[str, Sequence[str], None] = None
  18. def upgrade() -> None:
  19. op.create_table(
  20. "ads_trd_group_funnel_daily",
  21. sa.Column("dt", sa.String(length=8), primary_key=True),
  22. sa.Column("uv_start", sa.BigInteger(), nullable=True),
  23. sa.Column("uv_show", sa.BigInteger(), nullable=True),
  24. sa.Column("uv_detail", sa.BigInteger(), nullable=True),
  25. sa.Column("uv_order", sa.BigInteger(), nullable=True),
  26. sa.Column("uv_paid", sa.BigInteger(), nullable=True),
  27. sa.Column(
  28. "etl_time",
  29. sa.DateTime(),
  30. nullable=True,
  31. server_default=sa.func.now(),
  32. ),
  33. )
  34. op.create_table(
  35. "ads_trd_group_funnel_rolling",
  36. sa.Column("dt", sa.String(length=8), primary_key=True),
  37. sa.Column("uv_start_7d", sa.BigInteger(), nullable=True),
  38. sa.Column("uv_show_7d", sa.BigInteger(), nullable=True),
  39. sa.Column("uv_detail_7d", sa.BigInteger(), nullable=True),
  40. sa.Column("uv_order_7d", sa.BigInteger(), nullable=True),
  41. sa.Column("uv_paid_7d", sa.BigInteger(), nullable=True),
  42. sa.Column("uv_start_30d", sa.BigInteger(), nullable=True),
  43. sa.Column("uv_show_30d", sa.BigInteger(), nullable=True),
  44. sa.Column("uv_detail_30d", sa.BigInteger(), nullable=True),
  45. sa.Column("uv_order_30d", sa.BigInteger(), nullable=True),
  46. sa.Column("uv_paid_30d", sa.BigInteger(), nullable=True),
  47. sa.Column(
  48. "etl_time",
  49. sa.DateTime(),
  50. nullable=True,
  51. server_default=sa.func.now(),
  52. ),
  53. )
  54. def downgrade() -> None:
  55. op.drop_table("ads_trd_group_funnel_rolling")
  56. op.drop_table("ads_trd_group_funnel_daily")