Day 32
Day 32:Dune 进阶(协议级表与多表关联)- Aave/Uniswap 行为拆解
用协议级表和多表关联搭建 Aave/Uniswap 的用户行为分析框架,产出可复用查询与指标口径
2025-02-11
Dune协议级表多表关联AaveUniswapDay32Week5
Day 32: Dune 进阶(协议级表与多表关联)- Aave/Uniswap 行为拆解
今日目标
完成三件事:
- 识别协议级核心数据表(交易、事件、价格、地址标签)
- 搭建 Aave / Uniswap 多表关联查询框架
- 输出 1 套可复用指标口径(活跃、规模、用户结构)
今日学习重点
1. 协议级表优先(先定义问题,再选表)
- Uniswap 关注:Swap、Pool、Liquidity 相关事件
- Aave 关注:Supply、Borrow、Repay、Liquidation 行为
- 同一问题尽量统一时间粒度与地址口径,避免口径漂移
2. 多表关联思路(行为表 + 价格表 + 维度表)
- 行为表:回答“发生了什么”
- 价格表:回答“规模有多大(USD)”
- 维度表:回答“是谁在做(新老用户/鲸鱼/普通地址)”
SQL 模板(可直接改后运行)
模板 1:Uniswap 每日 Swap 用户与交易规模
WITH swaps AS (
SELECT
DATE_TRUNC('day', evt_block_time) AS day,
tx_hash,
sender AS wallet,
amount0,
amount1
FROM uniswap_v3_ethereum.Pair_evt_Swap
WHERE evt_block_time >= NOW() - INTERVAL '30' day
)
SELECT
day,
COUNT(DISTINCT wallet) AS swap_users,
COUNT(DISTINCT tx_hash) AS swap_txs
FROM swaps
GROUP BY 1
ORDER BY 1;
模板 2:Aave 每日借贷行为(Borrow / Repay)
WITH actions AS (
SELECT DATE_TRUNC('day', evt_block_time) AS day, user, 'borrow' AS action
FROM aave_v3_ethereum.Pool_evt_Borrow
WHERE evt_block_time >= NOW() - INTERVAL '30' day
UNION ALL
SELECT DATE_TRUNC('day', evt_block_time) AS day, user, 'repay' AS action
FROM aave_v3_ethereum.Pool_evt_Repay
WHERE evt_block_time >= NOW() - INTERVAL '30' day
)
SELECT
day,
COUNT(DISTINCT user) AS active_users,
SUM(CASE WHEN action = 'borrow' THEN 1 ELSE 0 END) AS borrow_cnt,
SUM(CASE WHEN action = 'repay' THEN 1 ELSE 0 END) AS repay_cnt
FROM actions
GROUP BY 1
ORDER BY 1;
模板 3:新增地址占比(7 天滚动)
WITH first_seen AS (
SELECT wallet, MIN(day) AS first_day
FROM (
SELECT sender AS wallet, DATE_TRUNC('day', evt_block_time) AS day
FROM uniswap_v3_ethereum.Pair_evt_Swap
UNION ALL
SELECT user AS wallet, DATE_TRUNC('day', evt_block_time) AS day
FROM aave_v3_ethereum.Pool_evt_Borrow
) t
GROUP BY 1
),
daily_active AS (
SELECT DATE_TRUNC('day', evt_block_time) AS day, sender AS wallet
FROM uniswap_v3_ethereum.Pair_evt_Swap
WHERE evt_block_time >= NOW() - INTERVAL '30' day
UNION
SELECT DATE_TRUNC('day', evt_block_time) AS day, user AS wallet
FROM aave_v3_ethereum.Pool_evt_Borrow
WHERE evt_block_time >= NOW() - INTERVAL '30' day
)
SELECT
a.day,
COUNT(DISTINCT a.wallet) AS active_wallets,
COUNT(DISTINCT CASE WHEN f.first_day = a.day THEN a.wallet END) AS new_wallets
FROM daily_active a
LEFT JOIN first_seen f ON a.wallet = f.wallet
GROUP BY 1
ORDER BY 1;
Day 32 可交付 Dashboard(最小版本)
- 图表 1:Uniswap 每日 Swap 用户 / 交易数
- 图表 2:Aave 借贷行为数量(Borrow vs Repay)
- 图表 3:新增地址占比趋势(跨协议)
建议命名:
- Query 1:
momoweb3_day32_uniswap_activity - Query 2:
momoweb3_day32_aave_actions - Query 3:
momoweb3_day32_new_wallet_ratio
今日执行清单(2-3h)
- 跑通 3 条查询并确认字段口径
- 将 3 个查询组装成 1 个 Day 32 Dashboard
- 记录 2 条跨协议行为洞察
- 写 1 段 30 秒面试表达
面试表达(30 秒)
Day 32 我从“单表统计”升级到“协议级多表分析”:先明确产品问题,再用行为表、价格表、维度表组合成可解释指标。这样不仅能看见链上发生了什么,还能判断规模变化和用户结构变化,为后续功能优先级提供依据。
明日预告
Day 33:指标体系固化(增长/留存/转化),把 Day 31-32 查询沉淀为复用模板。