metric_by_sql_general.py 937 B

12345678910111213141516171819202122232425262728293031323334
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: yq
  4. @time: 2024/10/31
  5. @desc: sql直接统计指标直出
  6. """
  7. import pandas as pd
  8. from commom import get_logger, f_fill_placeholder
  9. from data import DataLoaderBase
  10. from entitys import MetricFucEntity
  11. from .metric_base import MetricBase
  12. logger = get_logger()
  13. class MetricBySqlGeneral(MetricBase):
  14. def __init__(self, sql: str, *args, **kwargs):
  15. super().__init__(*args, **kwargs)
  16. self._sql = sql
  17. def _fill_placeholder(self, sql: str):
  18. return sql
  19. def _load_data(self, data_loader: DataLoaderBase, *args, **kwargs) -> pd.DataFrame:
  20. sql = f_fill_placeholder(self._sql)
  21. logger.info(f"sql: {sql}")
  22. data = data_loader.get_data(sql)
  23. logger.info(f"sql execute result: {data.head(5)}")
  24. return data
  25. def calculate(self, *args, **kwargs) -> MetricFucEntity:
  26. return MetricFucEntity(table=self._load_data(*args, **kwargs))