| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- from datetime import UTC, date, datetime
- from sqlalchemy.dialects.mysql import insert
- from app.core.config import Settings
- from app.infrastructure.mysql.analytics_models import (
- AnalyticsSyncOffsetRecord,
- DimDateRecord,
- MetricDefinitionRecord,
- )
- from app.infrastructure.mysql.sessions import (
- DatabaseName,
- create_mysql_engine,
- create_session_factory,
- )
- def build_analytics_foundation(settings: Settings | None = None) -> None:
- resolved_settings = settings or Settings()
- engine = create_mysql_engine(resolved_settings, DatabaseName.ANALYTICS)
- factory = create_session_factory(engine)
- today = date.today()
- date_key = int(today.strftime("%Y%m%d"))
- with factory.begin() as session:
- session.execute(
- insert(DimDateRecord)
- .values(
- date_key=date_key,
- full_date=today,
- year=today.year,
- month=today.month,
- day=today.day,
- )
- .on_duplicate_key_update(full_date=today)
- )
- session.execute(
- insert(MetricDefinitionRecord)
- .values(
- metric_code="ORDER_COUNT",
- name="订单量",
- description="按筛选条件统计的订单数量",
- unit="笔",
- expression="COUNT(order_id)",
- )
- .on_duplicate_key_update(name="订单量")
- )
- session.execute(
- insert(AnalyticsSyncOffsetRecord)
- .values(source_name="core_outbox", updated_at=datetime.now(UTC))
- .on_duplicate_key_update(updated_at=datetime.now(UTC))
- )
- engine.dispose()
- if __name__ == "__main__":
- build_analytics_foundation()
- print("Analytics 基础维度、指标定义和同步游标已构建。")
|