Skip to content

Instantly share code, notes, and snippets.

@dchentech
Last active January 1, 2016 16:19
Show Gist options
  • Save dchentech/8170329 to your computer and use it in GitHub Desktop.
Save dchentech/8170329 to your computer and use it in GitHub Desktop.
用statlysis来对CodeGist进行每日统计分析访问,用 http://showterm.io 来录制的。
地址在 http://showterm.io/7881a7c028d436b077273
脚本如下:
# statlysis是一个数据引擎分析框架,核心是对ETL之后的单表数据做类似SQL中GroupBy和GroupConcat的工作,
# 就像操作ActiveRecord等ORM一样简单。项目地址在 http://github.com/mvj3/statlysis
# 在这个test/helper.rb被载入后我们已经导入数据和建立Model了,
# 所以下面我们就来开始试用statlysis吧。
Statlysis.setup do
daily CodeGist, :sum_columns => [:fav_count], :group_concat_columns => [:user_id]
end
# 列出上面所有的统计分析的DSL配置
Statlysis.configuration
# 太混乱了看不清?
Statlysis.configuration.instance_variables
# 来看下按小时运行的crons,其他类型的crons看上面
Statlysis.configuration.hour_crons
# 其实还有这个快捷方式来访问的,来看看"天"这个单位里有哪些crons
Statlysis.daily
# 问下它到底有多少个cron吧
Statlysis.daily.size
# 先来看一个CodeGist表
CodeGist
# 随便看一条记录长什么样
CodeGist.find(3)
# 这个表到底有多少条记录
CodeGist.count
# 看看时间跨度范围
[CodeGist.first.created_at, CodeGist.last.created_at]
# 让我们来查询一下
Statlysis.daily['code_gist']
# 或者也可以这样查询一下
Statlysis.daily['code']['gist']
# 他们的类都是Statlysis::CronSet,说明这是一个集合,类似ActiveRecord查询封装
Statlysis.daily['code']['gist'].class
# 好吧,让我们来查出这个,注意它的类是Statlysis::Timely
Statlysis.daily['code']['gist'].first
# 看看Statlysis::Timely继承自哪里
Statlysis.daily['code']['gist'].first.class.superclass
# 好吧,没有上面的父类了。这就是Statlysis的结构,任何统计分析需求,
# 都是继承自Statlysis::Cron,继承类Statlysis::Timely就是关于时间方面的统计
Statlysis.daily['code']['gist'].first.class.superclass.superclass
# 让我们看看这个分析需求里都有哪些声明
Statlysis.daily['code_gist'].first.instance_variables
# ORM的类型
Statlysis.daily['code_gist'].first.source_type
# 时间字段
Statlysis.daily['code_gist'].first.time_column
# 时间单位
Statlysis.daily['code_gist'].first.time_unit
# 时区
Statlysis.daily['code_gist'].first.time_zone
# 数据源,但是我们注意到它是一个Set
Statlysis.daily['code_gist'].first.multiple_dataset
# 所以这里我们看到了里面包含了一个CodeGist这个Model。
# 实际上Statlysis是支持表结构相同的Model作统计分析的。
Statlysis.daily['code_gist'].first.multiple_dataset.sources
# 用来给指定条件下做累加数据输出源,类似SQL里的sum
Statlysis.daily['code_gist'].first.sum_columns
# 同样group_by也是,不过我们这里没有指定
Statlysis.daily['code_gist'].first.group_by_columns
# 同样group_concat也是,这里我们会收集user_id
Statlysis.daily['code_gist'].first.group_concat_columns
# 统计结构输出的表名,注意这是系统自动产生的,以timely开头,后面是表名和查询条件等
Statlysis.daily['code_gist'].first.stat_table_name
# 这个是用来记录上次跑统计分析用的时钟,存在st_clocks这个表里,看结构就明白了。
Statlysis.daily['code_gist'].first.clock
# 这个就是统计结果表的Model
Statlysis.daily['code_gist'].first.stat_model
# new一个看看,是空的
Statlysis.daily['code_gist'].first.stat_model.new
# 看看字段名
Statlysis.daily['code_gist'].first.stat_model.columns
# 我们现在来跑一个统计结果吧
Statlysis.daily['code_gist'].first.output
# 恭喜!结果出来了,这是一个数组,我们来看看某条记录吧。
# t代表这个按日来统计的时间,这里是2012年12月21日。
# timely_c表示这天这个条件下产生的数据有4条,
# totally_c表示包括今天和之前产生的总CodeGist量有34条。
# timely_favcount_s表示这天产生的数据被fav的总数,这个每天统计都可能有不同的结果。
# totally_favcount_s就是这个条件下所有CodeGist被fav的总数。
# other_json是用来灵活定制的JSON,虽然结果以字符串形式序列化,
# 我们可以看到这天有470700,91900这两个user_id的人创建过CodeGist。
Statlysis.daily['code_gist'].first.output[8]
# 我们发现统计数据库表会没有记录
Statlysis.daily['code_gist'].first.stat_model.count
# 那么我们现在来写入它们
Statlysis.daily['code_gist'].first.run
# 统计数据有了
Statlysis.daily['code_gist'].first.stat_model.count
# 来查看下第一条
Statlysis.daily['code_gist'].first.stat_model.first
# 来访问一下group_concat信息
Statlysis.daily['code_gist'].first.stat_model.first.other_json_hash
# 好了,简单的统计就到这里。更详细的请参考README介绍以及Examples里的示例配置代码。谢谢收看:)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment