Last active
January 1, 2016 16:19
-
-
Save dchentech/8170329 to your computer and use it in GitHub Desktop.
用statlysis来对CodeGist进行每日统计分析访问,用 http://showterm.io 来录制的。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
地址在 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