category_tree_weight.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from __future__ import annotations
  2. from datetime import datetime
  3. from decimal import Decimal
  4. from sqlalchemy import BigInteger, Integer, Numeric, String, UniqueConstraint, func
  5. from sqlalchemy.orm import Mapped, mapped_column
  6. from supply_infra.db.base import Base
  7. class CategoryTreeWeight(Base):
  8. """类目树节点热度(按日,六维加权平均分 avg + count)。"""
  9. __tablename__ = "category_tree_weight"
  10. __table_args__ = (
  11. UniqueConstraint("category_id", "biz_dt", name="uk_category_tree_weight"),
  12. )
  13. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
  14. category_id: Mapped[int] = mapped_column(
  15. BigInteger, nullable=False, comment="global_tree_category.id"
  16. )
  17. biz_dt: Mapped[str] = mapped_column(String(32), nullable=False, comment="日期YYYYMMDD")
  18. hung_word_count: Mapped[int] = mapped_column(
  19. Integer, nullable=False, default=0, comment="挂载需求词数量"
  20. )
  21. ext_pop_avg: Mapped[Decimal] = mapped_column(
  22. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="外部热度-加权平均分"
  23. )
  24. ext_pop_count: Mapped[int] = mapped_column(
  25. Integer, nullable=False, default=0, comment="外部热度-样本数"
  26. )
  27. plat_sust_pop_avg: Mapped[Decimal] = mapped_column(
  28. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="平台持续热度-加权平均分"
  29. )
  30. plat_sust_pop_count: Mapped[int] = mapped_column(
  31. Integer, nullable=False, default=0, comment="平台持续热度-样本数"
  32. )
  33. plat_ly_pop_avg: Mapped[Decimal] = mapped_column(
  34. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="平台去年同期-加权平均分"
  35. )
  36. plat_ly_pop_count: Mapped[int] = mapped_column(
  37. Integer, nullable=False, default=0, comment="平台去年同期-样本数"
  38. )
  39. recent_pop_avg: Mapped[Decimal] = mapped_column(
  40. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="近期热度-加权平均分"
  41. )
  42. recent_pop_count: Mapped[int] = mapped_column(
  43. Integer, nullable=False, default=0, comment="近期热度-样本数"
  44. )
  45. ext_pop_score: Mapped[Decimal] = mapped_column(
  46. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="外部热度-排名归一化分"
  47. )
  48. plat_sust_pop_score: Mapped[Decimal] = mapped_column(
  49. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="平台持续热度-排名归一化分"
  50. )
  51. plat_ly_pop_score: Mapped[Decimal] = mapped_column(
  52. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="平台去年同期-排名归一化分"
  53. )
  54. recent_pop_score: Mapped[Decimal] = mapped_column(
  55. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="近期热度-排名归一化分"
  56. )
  57. total_score: Mapped[Decimal] = mapped_column(
  58. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="四维排名分之和"
  59. )
  60. real_rov_7d_avg: Mapped[Decimal] = mapped_column(
  61. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="近7日真实ROV-加权平均分"
  62. )
  63. real_rov_7d_count: Mapped[int] = mapped_column(
  64. Integer, nullable=False, default=0, comment="近7日真实ROV-样本数"
  65. )
  66. real_vov_7d_avg: Mapped[Decimal] = mapped_column(
  67. Numeric(16, 8), nullable=False, default=Decimal("0"), comment="近7日真实VOV-加权平均分"
  68. )
  69. real_vov_7d_count: Mapped[int] = mapped_column(
  70. Integer, nullable=False, default=0, comment="近7日真实VOV-样本数"
  71. )
  72. created_time: Mapped[datetime] = mapped_column(
  73. nullable=False,
  74. server_default=func.now(),
  75. comment="创建时间",
  76. )
  77. updated_time: Mapped[datetime] = mapped_column(
  78. nullable=False,
  79. server_default=func.now(),
  80. onupdate=func.now(),
  81. comment="更新时间",
  82. )