每日明细
日期按列展开;每行一个点位,包含 PV、UV 和点击率。
原始查询 SQL
以下 SQL 与刷新按钮后端查询口径一致;刷新时默认将
${start_ds} / ${end_ds} 替换为最新分区日期。0. 获取最新分区
set odps.sql.select.output.format=csv;
SELECT MAX_PT('icbucdm.dwd_en_log_click_basic_di') AS ds;
1. 新埋点:协商中订单 / 所有订单 / 起草按钮
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
SELECT
ds,
REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) AS action_name,
CASE
WHEN REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) IS NULL
OR REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) = ''
THEN '(无scene)'
ELSE REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1)
END AS scene,
COUNT(*) AS pv,
COUNT(DISTINCT cookie_id) AS uv_cookie
FROM icbucdm.dwd_en_log_click_basic_di
WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
AND click_id = '/sc.trade-assurance.trade-order-list'
AND REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) IN (
'exposureNegotiationOrderTab',
'exposureAllOrderTab',
'clickNegotiationOrderTab',
'clickAllOrderTab',
'exposureDraftOrderBtn',
'clickDraftOrderBtnFromEmptyPage',
'clickDraftOrderBtnFromPageHeader'
)
GROUP BY
ds,
REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1),
CASE
WHEN REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) IS NULL
OR REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) = ''
THEN '(无scene)'
ELSE REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1)
END
ORDER BY action_name, scene, ds;
2. IM起草入口:ext=expDraftOrder / clickDraftOrder
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH events AS (
SELECT
ds,
cookie_id,
REGEXP_EXTRACT(url_decode(click_other_info), '"sellerId":"([^"]*)"', 1) AS seller_id,
REGEXP_EXTRACT(url_decode(click_other_info), '"buyerId":"([^"]*)"', 1) AS buyer_id,
CAST(ali_id AS STRING) AS ali_id_str,
REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) AS ext
FROM icbucdm.dwd_en_log_click_basic_di
WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
AND click_id = '/sc.ma.im'
AND REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) IN ('expDraftOrder', 'clickDraftOrder')
), normalized AS (
SELECT
ds,
cookie_id,
CASE
WHEN seller_id IS NOT NULL AND seller_id != '' THEN seller_id
WHEN buyer_id IS NOT NULL AND buyer_id != '' THEN buyer_id
WHEN ali_id_str IS NOT NULL AND ali_id_str != '' THEN ali_id_str
END AS biz_user_id,
CASE WHEN ext = 'expDraftOrder' THEN 1 ELSE 0 END AS is_expose,
CASE WHEN ext = 'clickDraftOrder' THEN 1 ELSE 0 END AS is_click
FROM events
)
SELECT
ds,
SUM(is_expose) AS expose_pv,
COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) AS expose_uv_cookie,
COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) AS expose_uv_biz_user,
SUM(is_click) AS click_pv,
COUNT(DISTINCT CASE WHEN is_click = 1 THEN cookie_id END) AS click_uv_cookie,
COUNT(DISTINCT CASE WHEN is_click = 1 THEN biz_user_id END) AS click_uv_biz_user,
COALESCE(ROUND(SUM(is_click) * 100.0 / CASE WHEN SUM(is_expose) = 0 THEN NULL ELSE SUM(is_expose) END, 4), 0) AS click_pv_rate_pct,
COALESCE(ROUND(COUNT(DISTINCT CASE WHEN is_click = 1 THEN cookie_id END) * 100.0 / CASE WHEN COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) = 0 THEN NULL ELSE COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) END, 4), 0) AS click_uv_cookie_rate_pct,
COALESCE(ROUND(COUNT(DISTINCT CASE WHEN is_click = 1 THEN biz_user_id END) * 100.0 / CASE WHEN COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) = 0 THEN NULL ELSE COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) END, 4), 0) AS click_uv_biz_user_rate_pct
FROM normalized
GROUP BY ds
ORDER BY ds;
3. 协商引导弹窗:展示 / 手动起草 / 继续起草 / 关闭
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH parsed AS (
SELECT
ds,
cookie_id,
REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) AS action_name,
REGEXP_EXTRACT(click_other_info, 'closeType=([^|]*)', 1) AS close_type
FROM icbucdm.dwd_en_log_click_basic_di
WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
AND click_id = '/sc.trade-assurance.trade-order-list'
AND REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) IN (
'showNegotiatingGuideDialog',
'closeNegotiatingGuideDialog',
'clickOpenNegotiationFromDialog',
'clickManualDraftFromDialog'
)
)
SELECT
ds,
SUM(CASE WHEN action_name = 'showNegotiatingGuideDialog' THEN 1 ELSE 0 END) AS expose_pv,
COUNT(DISTINCT CASE WHEN action_name = 'showNegotiatingGuideDialog' THEN cookie_id END) AS expose_uv_cookie,
SUM(CASE WHEN action_name = 'clickManualDraftFromDialog' THEN 1 ELSE 0 END) AS manual_click_pv,
COUNT(DISTINCT CASE WHEN action_name = 'clickManualDraftFromDialog' THEN cookie_id END) AS manual_click_uv_cookie,
SUM(CASE WHEN action_name = 'clickOpenNegotiationFromDialog' THEN 1 ELSE 0 END) AS open_negotiation_click_pv,
COUNT(DISTINCT CASE WHEN action_name = 'clickOpenNegotiationFromDialog' THEN cookie_id END) AS open_negotiation_click_uv_cookie,
SUM(CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'button' THEN 1 ELSE 0 END) AS close_button_pv,
COUNT(DISTINCT CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'button' THEN cookie_id END) AS close_button_uv_cookie,
SUM(CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'mask' THEN 1 ELSE 0 END) AS close_mask_pv,
COUNT(DISTINCT CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'mask' THEN cookie_id END) AS close_mask_uv_cookie
FROM parsed
GROUP BY ds
ORDER BY ds;
4. Copilot订单催付工具:stageCardExpose / stageToolClick
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH raw_events AS (
SELECT
ds,
cookie_id,
ali_id,
REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) AS ext,
url_decode(click_other_info) AS decoded_info,
REGEXP_EXTRACT(url_decode(click_other_info), 'operateContent=([^&|]*)', 1) AS operate_content
FROM icbucdm.dwd_en_log_click_basic_di
WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
AND click_id = '/sc.ma.im'
AND REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) IN ('stageCardExpose', 'stageToolClick')
), parsed AS (
SELECT
ds,
cookie_id,
ali_id,
ext,
decoded_info,
GET_JSON_OBJECT(operate_content, '$.actionName') AS action_name,
GET_JSON_OBJECT(operate_content, '$.bizData.sellerAliId') AS seller_ali_id,
GET_JSON_OBJECT(operate_content, '$.bizData.stageType') AS stage_type,
GET_JSON_OBJECT(operate_content, '$.bizData.toolType') AS tool_type
FROM raw_events
)
SELECT
ds,
SUM(CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN 1 ELSE 0 END) AS expose_pv,
COUNT(DISTINCT CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN cookie_id END) AS expose_uv_cookie,
COUNT(DISTINCT CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN CASE WHEN seller_ali_id IS NOT NULL AND seller_ali_id != '' THEN seller_ali_id ELSE CAST(ali_id AS STRING) END END) AS expose_uv_seller,
SUM(CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN 1 ELSE 0 END) AS click_pv,
COUNT(DISTINCT CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN cookie_id END) AS click_uv_cookie,
COUNT(DISTINCT CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN CASE WHEN seller_ali_id IS NOT NULL AND seller_ali_id != '' THEN seller_ali_id ELSE CAST(ali_id AS STRING) END END) AS click_uv_seller
FROM parsed
GROUP BY ds
ORDER BY ds;