Dune Analytics 零基础入门教学
Dune Analytics 号称“平民版Nansen”、“链上数据分析师神器”,为各路大神所追捧。然而神器在手,奈何找不到适合新手小白的说明书,我等只得望洋兴叹否
本文作为一篇入门级的极简教学,适合Dune 的零基础小白用户,与大家一起掀开Dune 女神的面纱。
Dune Analytics 是什么
Dune Analytics 作为一款链上数据研究分析的强大工具,经过4 轮融资,目前估值已达10亿美元。
用户通过类SQL 的数据库查询语言,从Dune 缓存的区块链数据仓库中检索、筛选、提取、聚合,形成一个个Query,再对查询到的数据进行可视化,最终汇总而成一个个Dashboard 面板。
何谓数据仓库
区块链本质上是一个去中心化的帐本,所有过往的交易转帐、合约调用形成了一条条的交易记录明细,包含交易时间、转入、转出地址、交易金额、调用讯息、合约事件、tx_hash 等数据。
Dune Analytics 将以上所有数据分门别类进行存储形成数据仓库,供有需要的人通过类SQL语言来调用、查询、分析(可谓功德无量)。
何谓SQL
SQL 即“结构化查询语言”,专用于数据库相关的查询、管理。在Dune 中,我们用SQL 查询语句来获取所有想要的数据,构建成对应的“Query”。
何谓数据表
每一个数据表(table)可以视作一个超大的Excel 表格,按顺序记录了所有与之相关的数据。
Dune 提供了很多内置的知名协议专属的”数据表dataset”。注册登陆你的Dune 账户,点击顶部的”New Query” 即可打开如下页面: 左侧即为内置数据表,右侧是“查询语句”和“查询结果”
常用数据表
除了内置的数据表外,还有些常用的数据表,比如: 最常用的ethereum.transactions,可以查询所有的以太坊链上交易讯息,包括了普通转帐和合约调用等讯息。
数据表里有什么
不同数据表,提供的内容各有迥异。
以"ethereum.transactions"为例,表内提供了:
block_time区块时间 from发起地址 to转入地址(或调用的合约地址) value转帐金额, data附加数据(合约调用的input data)
等诸多数据
transactions 数据表
SQL 查询语句怎么写
基本的SQL 查询语句:SELECT * FROM X
select: 取什么数据 from: 从哪里取数据 where: 限制条件是什么 order by: 根据什么排序 limit: 限制取回的数据条数
SQL 查询语句
Dune Analytics 教学:你的第一条查询语句
打开Dune 的”New Query”,贴上以下语句
点击”Run” 稍等即可在”Query Results”看到查询结果
语句中的*代表查询所有字段,limit5是为了限制数据取回的数量,如果不加这条限制,你就是在告诉Dune 要取回以太坊链上的所有交易数据(耗时超长且无必要)
首条Dune 查询语句
更复杂的查询语句
现在让我们来试试更复杂(也更有趣)的Dune 查询语句:查询V 神钱包的链上交易讯息
这次我们新增了where "from"限制条件,只筛选“V神”的钱包地址,order by语句限定排序条件,desc表降序
复制以上程式码或fork 后自己该参数运行dune.com/queries/724390
更复杂的查询语句
更有用的查询语句
现在,让我们筛选一些“更有用”的讯息,比如:转帐金额
这次我们select选取两个字段:block_time和value
value的值,我们通过value/1e18这个计算公式,换算为ETH 单位。
as关键词为其取一个好听的别名
第5 行and关键词指where下多个限定条件取交集
Query 连结:https://dune.com/queries/728779
更有用的查询语句
Dune Analytics 教学:你的第一个可视化图表
数据已有,可视化图表呼之欲出,对于随时间变动的数值,最普遍使用的图表就是bar chart (条形图、柱状图)了
在前一步生成的查询结果顶部点击“New visualization”,选择“Bar Chart”,看到系统已经自动帮我们把X,Y轴都选好了。
如果在数据较多的情况下,则需要手动选择Y轴数据
首个可视化图表
Sum 函数求和
一个最普遍的数据统计需求就是:加总求和,我们对筛选到的数据,直接使用sum函数即可
sum(value/1e18) as "total"
然后在可视化图表区域选择Counter,修改Title,就有了如图的汇总数据:83.25 万ETH
sum 求和函数
计数count
SUM、AVG、MAX、MIN、COUNT统称为聚合函数,用于将组中的行汇总为单个值。
前面提到的sum用于对数值求和,count则用于统计查询记录的总数目。
比如我们统计下V 神钱包总计对外发出交易的次数
select count(*)
count 计数
Dune Analytics 教学:你的第一个数据看板
保存前面每一个Query 并取名,现在我们就来搭建你的首个Dune Dashboard
在首页点击“New Dashboard”,或直接在Query 结果页面点击“Add to dashboard”,输入Dashboard 名字即可
dune.com/gm365/:-V-YYDS
建议:首次取名选简短的英文,这部分内容会被用在url 上(只支持英文、数字且后期无法修改)。你可以首次取名并保存之后,再对其改名以显示完成内容(现在可以中英文、emoji 表情混用了)
分类汇总group by
另一个常见的数据统计需求:分类汇总,比如我们想知道V 神每月的转入、转出ETH 总额
Query 代码的第1行中date_trunc('month', block_time)称为截断日期函数,用于将时间间隔截断为指定的精度级别(这里我们选取month统计每月数值,你还可以选hour、minute、second、day、week、year等时间间隔单位)
第2 行中,我们要使用sum表示对当月的ETH 转帐金额进行求和
最后一行的group by 1即按第一个字段"date"进行分类汇总,如果是第二个字段,则为group by 2,以此类推
分类汇总
累计求和Cumulative Sum
累计求和,在前一项数据基础上,累加当前数据,不断重复。
一般我们会先按日求和,再不断累加汇总。比如统计某个协议有史以来所有充值到合约地址的ETH总额。
要实现“累计求和”,其Query 代码稍微有些复杂。
面对这种情况,千万不要气馁。因为我们新人小白也有必杀技 :Fork 並修改關鍵參數
比如,我们直接fork 下面这个Query ,在其基础之上,只需要修改第8 行参数即可
dune.com/queries/732520
累计求和
Fork 神技能
作为新人小白,我们一定要掌握的最重要的一门技能:fork 神技
站在前辈大神的肩膀之上,能让我们光速入门。越过陡峭的学习曲线,Fork 大神的代码与劳动成果,然后只需要简单修改核心参数,即可实现同类功能,获取心仪的数据(感恩大神与前辈的付出)
具体到Dune上,我们在任一Dune看板的图表区域点击左上角Query名字即可查看完整SQL查询语句。Fork之,修改关键参数,然后点Run即可见证奇迹
比如oxBi 大神做好的一个叫”Total Holder by Day – ENS ” 的Query,统计了ENS 代币每日的总持币人数。代码有67 行之长,语法复杂,艰深无比,我等小白唯有汪洋兴叹的份儿。
但,如果你只是想借用下大神这个Query 的功能,统计其他代币的每日持币人数,我们Fork 后修改第14 行代码中Token 地址即可搞定。
站在巨人肩膀之上,轻松无比。
dune.com/queries/326596/621471
ENS 每日持币人数Query
Dune Analytics 零基础实战
零基础入门的小白能否直接实战
当然!
https://dune.com/gm365/Syndicate
这个@SyndicateDAO看板,所用到的基础知识在前面全部有所涉及。事实上,这也是我近期学习并用Dune 做的第一个数据Dashboard。
在前面基础知识铺垫之上,另一个关键就在于找准协议所对应的合约地址,大家可以点开每一个Query查看具体的SQL代码,你会发现实现这些链上数据统计功能并没有太难。
辛迪加沙丘仪表板
总结
Dune 帮我们保存了珍贵的链上数据,我们要做的便是“各取所需,为我所用”。
大神们构建的Query语句精妙绝伦,却也繁复无比。我们作为小白,只要掌握了最基本的SQL查询语句,其实已经可以开启神奇的链上数据分析师之旅了。
本文只能算作一个相当初级的Dune 入门指南,无论是对SQL还是Dune 的介绍,都有诸多遗漏。对于有心深入链上数据分析的同学而言,建议可以先从基础的SQL入门教程开始,掌握基础语法后,就可以选一个你喜欢的协议来尝试制作你个人版本的Dune 数据看板了。
比如前面提到的Syndicate Dashboard,也是我个人尝试的第一个看板。没成想,竟然还被收录到了第29 期的官方Dune Digest 中,属实意外。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。