📑 目录导读
- Dune Analytics核心定位——为何是链上数据分析的“瑞士军刀”
- SQL查询基础重塑——从数据表结构到查询逻辑
- 进阶查询技巧——窗口函数、时间序列与跨协议分析
- 实战案例:欧易生态数据透视——用SQL挖掘链上行为
- 性能优化与调试——让查询跑得更快、更准
- 常见问题问答——解决90%新手遇到的坑
Dune Analytics核心定位
在加密货币领域,链上数据是价值的“矿脉”,Dune Analytics作为目前最流行的开源链上数据分析平台,允许用户通过编写SQL查询来提取、聚合和可视化区块链数据,与传统的区块链浏览器不同,Dune将原始链上数据预处理为结构化的关系型数据库,让分析师无需底层节点即可完成复杂分析。

如果你正通过欧易交易所下载进行交易或投资,理解链上数据将是你的决策利器——例如通过分析大户地址的ETH流入/流出趋势,提前预判市场方向。
SQL查询基础重塑
数据库结构认知
Dune的PostgreSQL数据库中,每一条区块链都有核心表:
ethereum.transactions:交易记录(from、to、value、gas)ethereum.logs:事件日志(合约地址、topic、data)ethereum.blocks:区块信息(时间戳、区块高度)
关键字段:
block_time:区块生成时间(UTC)value / 10^18:将Wei转换为ETHgas_used * gas_price / 10^18:交易手续费(ETH)
第一条查询语句
SELECT
block_time,
"from" AS sender,
"to" AS receiver,
value / 1e18 AS eth_amount
FROM ethereum.transactions
WHERE block_time >= NOW() - INTERVAL '1 day'
ORDER BY block_time DESC
LIMIT 100;
这条查询将展示最近24小时内按时间倒序的100笔交易,并自动将Wei单位转换为ETH,访问欧易交易所官网时,类似的数据逻辑可帮助你追踪大额转账异动。
进阶查询技巧:让数据会“说话”
1 窗口函数:分析账户行为模式
SELECT
"from",
block_time,
value / 1e18 AS amount,
ROW_NUMBER() OVER (PARTITION BY "from" ORDER BY block_time) AS tx_sequence,
SUM(value / 1e18) OVER (PARTITION BY "from" ORDER BY block_time) AS cumulative_amount
FROM ethereum.transactions
WHERE "from" IN (
'0x123...', -- 替换为目标地址
'0x456...'
)
ORDER BY "from", block_time;
窗口函数ROW_NUMBER用于标记每个地址的交易序号,SUM OVER则计算累计交易额——这对于分析鲸鱼地址的建仓节奏极有价值。
2 时间序列聚合:发现周期性规律
SELECT
DATE_TRUNC('hour', block_time) AS hour_bucket,
COUNT(*) AS tx_count,
AVG(value / 1e18) AS avg_eth_value,
SUM(value / 1e18) AS total_volume
FROM ethereum.transactions
WHERE block_time >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY hour_bucket
ORDER BY hour_bucket;
通过DATE_TRUNC将时间按小时分桶,结合AVG和SUM,你可以精准发现以太坊网络在每周哪几个小时交易量最大——这直接影响欧易交易所上的现货和合约流动性管理。
3 跨协议分析:连接生态孤岛
-- 分析Uniswap V3与SushiSwap的流动性变化
SELECT
'UniswapV3' AS protocol,
block_time,
SUM( CASE WHEN topic0 = '0x...' THEN data_value END ) AS liquidity
FROM ethereum.logs
WHERE contract_address = '0x1F98431c8ad98523631ae4a59f267346ea31F984'
AND block_time >= '2024-01-01'
GROUP BY block_time
UNION ALL
SELECT
'SushiSwap' AS protocol,
block_time,
SUM( data_value ) AS liquidity
FROM ethereum.logs
WHERE contract_address = '0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F'
AND block_time >= '2024-01-01'
GROUP BY block_time;
利用UNION ALL合并不同协议的事件日志,可以直观对比TVL变化——这种能力在DeFi summer中尤为关键。
实战案例:挖掘欧易生态相关数据
如果你使用的是欧易交易所下载的钱包地址,以下查询可分析该地址与其他高活跃地址的交互网络:
WITH active_addresses AS (
SELECT
"from" AS addr,
COUNT(*) AS tx_count
FROM ethereum.transactions
WHERE block_time >= NOW() - INTERVAL '30 days'
GROUP BY "from"
HAVING COUNT(*) > 100
)
SELECT
t."from",
t."to",
COUNT(*) AS interaction_count,
SUM(t.value / 1e18) AS total_eth_moved
FROM ethereum.transactions t
JOIN active_addresses a1 ON t."from" = a1.addr
JOIN active_addresses a2 ON t."to" = a2.addr
WHERE t.block_time >= NOW() - INTERVAL '30 days'
GROUP BY t."from", t."to"
ORDER BY interaction_count DESC
LIMIT 20;
此查询筛选出近30天内交易超过100次的活跃地址,并发现它们之间的高频交易对——通常这些地址背后是做市商或套利机器人,通过这类分析,可以优化你在欧易交易所的挂单策略,减少滑点损失。
性能优化与调试
1 避免全表扫描
- 始终在
WHERE中使用索引字段:block_time、from、to - 用
LIMIT限制结果集大小,尤其是在测试阶段
2 善用CTE(公用表表达式)
WITH raw_data AS (
SELECT *
FROM ethereum.transactions
WHERE block_time >= '2024-01-01'
)
SELECT
DATE_TRUNC('day', block_time) AS day,
COUNT(*)
FROM raw_data
GROUP BY day;
CTE将复杂查询拆解为可复用的逻辑单元,避免重复计算。
3 利用Dune的缓存机制
- 同一查询在短时间内重复执行时,Dune会自动返回缓存结果
- 如需最新数据,可在查询后添加
OPTIMIZE FOR LATENCY
常见问题问答
Q1:Dune中的时间戳是UTC还是本地时间?
A:所有block_time均以UTC零时区存储,如果你需要转换为北京时间(UTC+8),可以在SELECT中使用:
block_time AT TIME ZONE 'Asia/Shanghai' AS beijing_time。
Q2:查询结果中ETH单位不对,总显示为小数值怎么办?
A:在Dune中,value字段的单位是Wei(10^-18 ETH),务必除以1e18或10^18进行转换。
Q3:如何分析特定代币的转账数据?
A:使用ethereum.token_transfers表,其中包含token_address、from、to、amount_raw等字段,注意:amount_raw需要除以代币的小数位数(例如USDC除以10^6)。
Q4:为什么我的查询耗时超过30秒?
A:常见原因:未对block_time加索引过滤,或跨多个大表做全表JOIN,建议先缩小时间范围,并使用EXPLAIN ANALYZE检查执行计划,为提升效率,可优先在欧易交易所官网进行缓存数据预加载。
Q5:能否将Dune查询结果导出为CSV?
A:可以,在查询结果页面点击“Download CSV”按钮即可,注意:单次导出上限为100万行,超标需要分段查询或使用Dune API。
通过本教程,你已掌握从SQL基础到链上数据实战的核心技能,无论是追踪NFT鲸鱼地址,还是分析DeFi协议的资金流向,这些查询模版都可以直接复用,下篇我们将探讨如何利用Dune的图表可视化功能,将原始数据转化为吸引人的仪表盘——在深入分析之前,别忘了在欧易交易所下载上确认你的数据源与交易策略无缝衔接,数据驱动决策,链上洞察从现在开始。
标签: SQL查询