Advertisement
gubichas

Untitled

Mar 12th, 2025
110
0
18 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.08 KB | None | 0 0
  1. def get_new_shows_query(date_day: str) -> str:
  2.     """
  3.    Возвращает SQL-запрос для агрегации данных по показам (shows)
  4.    из таблиц unified.mdsp_request_cloud и unified.mdsp_event_cloud.
  5.    Здесь:
  6.      - dt заменяет show_date,
  7.      - request_ts_ms/event_ts_ms используются вместо show_ts,
  8.      - отсутствующие поля (stat_id, segments и т.п.) заменяются заглушками.
  9.    """
  10.     query = f"""
  11.    WITH req AS (
  12.        SELECT
  13.            dt AS date_day,
  14.            bid_request_id,
  15.            site_id AS pad_id,
  16.            tag_id AS block_id,
  17.            0 AS adplace_id,         -- Заглушка, так как stat_id отсутствует
  18.            0 AS statid,             -- Заглушка
  19.            0 AS test_id,            -- Заглушка
  20.            if(arrayExists(x -> x = 1, regions), toUInt8(regions[1] == 1), 0) AS fl_russia
  21.        FROM unified.mdsp_request_cloud
  22.        WHERE dt = toDate('{date_day}')
  23.    ),
  24.    evt AS (
  25.        SELECT
  26.            dt AS date_day,
  27.            bid_request_id,
  28.            request_site_id AS pad_id,
  29.            request_tag_id AS block_id,
  30.            campaign_id,
  31.            dictGetString('DSP_ProductCategory', 'name',
  32.                dictGetUInt64('DSP_Flight', 'product_category_id', toUInt64(ad_group_id))
  33.            ) AS category
  34.        FROM unified.mdsp_event_cloud
  35.        WHERE dt = toDate('{date_day}')
  36.          AND event_type = 10  -- Предположим, что event_type=10 соответствует показам (shows)
  37.    )
  38.    SELECT
  39.        r.date_day,
  40.        429675720 AS user_id,  -- Фиксированное значение
  41.        r.pad_id,
  42.        r.block_id,
  43.        e.category,
  44.        r.adplace_id,
  45.        r.statid,
  46.        r.test_id,
  47.        e.campaign_id,
  48.        r.fl_russia,
  49.        count(*) AS real_shows,
  50.        0 AS revenue  -- Заглушка для revenue
  51.    FROM evt e
  52.    JOIN req r
  53.      ON e.bid_request_id = r.bid_request_id
  54.     AND e.pad_id = r.pad_id
  55.     AND e.block_id = r.block_id
  56.    GROUP BY
  57.        r.date_day,
  58.        e.campaign_id,
  59.        r.pad_id,
  60.        r.block_id,
  61.        e.category,
  62.        r.adplace_id,
  63.        r.statid,
  64.        r.test_id,
  65.        r.fl_russia
  66.    """
  67.     return query
  68.  
  69. def get_new_clicks_query(date_day: str) -> str:
  70.     """
  71.    Возвращает SQL-запрос для агрегации данных по кликам (clicks)
  72.    из таблиц unified.mdsp_request_cloud и unified.mdsp_event_cloud.
  73.    Здесь:
  74.      - dt используется вместо click_date,
  75.      - отсутствующие поля заменяются заглушками.
  76.    """
  77.     query = f"""
  78.    WITH req AS (
  79.        SELECT
  80.            dt AS date_day,
  81.            bid_request_id,
  82.            site_id AS pad_id,
  83.            tag_id AS block_id,
  84.            0 AS adplace_id,         -- Заглушка
  85.            0 AS statid,             -- Заглушка
  86.            0 AS test_id,            -- Заглушка
  87.            0 AS crosstraffic_id,    -- Заглушка
  88.            if(arrayExists(x -> x = 1, regions), toUInt8(regions[1] == 1), 0) AS fl_russia
  89.        FROM unified.mdsp_request_cloud
  90.        WHERE dt = toDate('{date_day}')
  91.    ),
  92.    evt AS (
  93.        SELECT
  94.            dt AS date_day,
  95.            bid_request_id,
  96.            request_site_id AS pad_id,
  97.            request_tag_id AS block_id,
  98.            campaign_id,
  99.            ad_group_id AS dsp_flight_id,
  100.            dictGetString('DSP_ProductCategory', 'name',
  101.                dictGetUInt64('DSP_Flight', 'product_category_id', toUInt64(ad_group_id))
  102.            ) AS category,
  103.            dictGetUInt64('DSP_Flight', 'product_category_id', toUInt64(ad_group_id)) AS product_category_id,
  104.            dictGetUInt64('ATD_Campaign', 'income_source_id',
  105.                dictGetUInt64('ATD_DspCampaign', 'atd_oid', campaign_id)
  106.            ) AS income_source_id
  107.        FROM unified.mdsp_event_cloud
  108.        WHERE dt = toDate('{date_day}')
  109.          AND event_type = 6  -- Предположим, что event_type=6 соответствует кликам
  110.    )
  111.    SELECT
  112.        r.date_day,
  113.        429675720 AS user_id,
  114.        e.campaign_id,
  115.        r.pad_id,
  116.        e.dsp_flight_id,
  117.        r.block_id,
  118.        e.category,
  119.        r.adplace_id,
  120.        r.statid,
  121.        r.test_id,
  122.        r.crosstraffic_id,
  123.        r.fl_russia,
  124.        e.product_category_id,
  125.        e.income_source_id,
  126.        count(*) AS clicks
  127.    FROM req r
  128.    JOIN evt e
  129.      ON r.bid_request_id = e.bid_request_id
  130.     AND r.pad_id = e.pad_id
  131.     AND r.block_id = e.block_id
  132.    GROUP BY
  133.        r.date_day,
  134.        e.campaign_id,
  135.        r.pad_id,
  136.        e.dsp_flight_id,
  137.        r.block_id,
  138.        e.category,
  139.        r.adplace_id,
  140.        r.statid,
  141.        r.test_id,
  142.        r.crosstraffic_id,
  143.        r.fl_russia,
  144.        e.product_category_id,
  145.        e.income_source_id
  146.    """
  147.     return query
  148.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement