Github实时数据分析与可视化训练营:课时1:Github实时数据分析与可视化
课程地址:https://developer.aliyun.com/trainingcamp/12458c0a699747a6a1c239ef6818954b
六、(可选)历史离线数据分析
接下来是一个可选项,刚才做的都是实时的分析。但是Hologress其实跟阿里云的MaxCompute产品是有比较深度的融合的。我们可以做离线实时一体化的大数据查询分析和架构。以前可能离线实时都会用到好多产品,数据可能会也会搬来搬去。今天通过这套架构,会相对而言比较方便。这里提供了两种的分析形式。我们在MaxCompute中存放了GitHub历史的全量数据,有近一两年的,如果想做更长时间分析,那就需要把MaxCompute数据要么直接做外表查询,要么导入Hologress里面来,所以我们这提供了两种方式。
第一种就是外表查询,不需要导入数据,直接用Hologress来查MaxCompute的数据。这样只会消耗后Holo计算相关的资源,其实并不会用到你存储的资源。
第二种的是使用内部表,就是把MaxCompute的数据导入到Hologress。这种导入也非常快,是相当于0ETL就能够把数据从MaxCompute导过来。这种方式的话它优势是查询速度更快一点。但是这里就会有一个注意事项,因为github每日的数据量是300兆,然后大家领取的Hologress免费额度是二十几。如果你导入过多的存量历史数据,就会如果超过20G那就会产生额外的费用。这个具体费用大家可以看一下,文档都是按量付费的。如果做外表查询的话,其实不会受影响的。因为已经开通了Holo实例,只会按CU时来收费。
接下来简单介绍一下外表查询。建一个在Hologress建一个MaxCompute的外部表。
DROP FOREIGN TABLE IF EXISTS dwd_github_events_odps;
IMPORT FOREIGN SCHEMA"maxcomputepublicdata#github events" LIMIT to
(
dwd_github_events_odps
)
FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'error",if_unsuppa
建完之后直接TSC口就能够查询。这里面我们不涉及任何的数据导入导出。
SELECT
repo_name .
COUNT(*) AS events
FROM
dwd githubevents odps
WHERE
ds >= (CURRENT_DATE - interval "1 day")::text
GROUP BY
repo_name
ORDER BY
events DESC
LIMIT 5;
第二种也是创建内部表。创建完通过SQL就能够非常快速的把MaxCompute的数据导过来,而且导入的速度非常快。
INSERT INTO gh_event_data
SELECT
*
FROM
dwd github events odps
WHERE
ds >= (CURRENT_DATE - interval '1 day")::text;
---更新表的统计信息
ANALYZE gh_event_data;
然后就可以直接运行SQL口,和上面都是一样的,但是这个速度会更快一点,一会给大家演示一下。
SELECT
repo_mame.
COUNT(*) AS events
FROM
gh_event_data
WHERE
ds >= (CURRENT_DATE - interval '1 day")::text
GROUP BY
repo_name
ORDER BY
events DESC
LIMIT 5;
七、附录
附录里是大屏中分析所用到的SQL口,如果感兴趣想要自己去运行的话,可以把table 名称给替换一下。因为刚才在Hologress 创建的实时表和通过离线创建的这些表,表名称会不一样,把table 名称改一下就可以。直接在Hologress的查询编辑器里面运行这些SQL就可以自己完成分析,然后也可以自己写SQL去做。
SELECT
cast(created_at as text).
actor_login
type,
repo_name
FROM
ORDER BY
created at DESC
LIMIT 5;
八、完成
这个是一些示例,在holo里面插的一些示意效果,大家可以参考。
九、清理及后续
最后这比较重要的是如果你不需要用的话,可以在Hologress管控台把Hologress实例给停机或就释放掉。因为刚才说到Hologress是5000CU时,如果不停机的话,它会一直在运行。8code我们可以运行六百多个小时,有时候可能做完实验没有是停止或者释放的话,那它一直在运行,然后运行到最后CU10消耗完了可能就会付费。所以如果大家做完实验不需要使用,你可以先给它暂停。暂停是不记CU10的消耗的,或者说你后续不用了也可以直接把它释放掉,这样避免会产生一些额外的付费,这个是注意事项。
十、示例演示
接下来把几个核心步骤给演示一下。像第一步导入实时数据,其实就是在实例列表,然后点进去之后进入holo gress,会自己会新建一个数据库,大家按照自己去建就行了。
建建表语句也是一样的,可以看到刚才那个建好的表在这个编辑器运行之后,就会建好这个表相关的信息,这一步比较简单。
实时同步稍微讲一下,一个是绑定,让大家进列表资源组列表会可以看到购买的资源组信息。在这个网络设置里面,可以把自己VPC先绑定上,不然到时候创建同步任务的时候会报错。
开始真正创建同步任务的时候可以到进入首页之后,创建同步任务,输入名称。然后数据源选择mysql 到progress,然后整库全增量。然后新建数据源把数据源信息填进去,这里我已经新建好了,所以我直接选择就行了。资源组是刚才购买的资源组,然后新建holo gress数据源也是一样的,按照教程把信息填进去。
这杨已经建好了,基本上我们这样就创建成功了一个连接,连接之后,它会做一个联通性测试。如果刚才没有绑这个VBC,这个测试就会失败。所以大家一定要把VBC绑定一下,设一下安全组。
然后把表勾选过来。
勾选过来后,批量刷新一下映射
这一步就是刚才说到很重要的需要把目标表名schema和目标表的修改一下修改成在holo gress中创建的schema名称和目标表的名称。如果忘了的话就可以直接去刚才导入实时数据的时候看一下,就把粘贴到schema的名称,然后把这个表粘贴到表名称就可以了。基本上这样就完成了配置,然后点击启动就好。
这个我之前已经创建好任务,可以给大家看一下。如果创建完成之后,提交运行,它大概运行5到10分钟,会把历史七天的数据全量迁移过来。
可以看到历史的全量七天的大概有一亿多条已经写入了,然后实时数据是在做同步的,数据正在不断的写入到holo gress当中。这样基本上我们就可以把数据实时同步到hello gress。这一步我们也就完成了。
实时分析也比较简单。样例SQL可以看一下。比如如果数据同步成功了,运行一下压力,SQL马上就能够把数据结果给跑出来。
如果大家自己想要分析可以看一下这个表的原数据信息,点一下这个表,这些字段名称,字段所代表的信息其实都可以看到。
数据预览大概看到前200条左右的信息,可以看一下大概都是什么样的数据和字段。比如个action是一些create,然后open的action信息,这样方便大家自己去写SQL来分析一下结果。
因为这个数据源是实时更新的,接下来我们会到dad v的控制台。然后大家可以看一下,在控制台首先是要添加数据源,这个数据源我已经添加好了。
大家新建的时候,按照教程把holo gress相关的信息填进去就好。然后我们会有一个模板,点创建PC,可以看到样例的模板。你可以直接用模板来创建。
创建完成之后基本上就是这样。这个是之前已经建好的一个信息,然后刷新一下。
这样开始模板内置的信息都是写死的,那接下来的操作就是把数据源更新一下。
刚刚打开它应该会显示的是一个静态数据。但是当你把它变成实时数仓的时候,它就会自动出默认的SQL。这个SQL也不需要填,但需要只需要把上面选上就可以了。选完之后保存不需要点击,你直接退出来就保存,把每一个数字去更新一下。这个数据源大概有15个地方,就需要自己去把数据源更新一下。只要更新完这些数据就能够实时显示和查出来。
然后你只要点一下预览,基本上实时的大屏就已经完成了。可以看到这些上面所有的数据都是在实时的更新和滚动的。到这里实时数据分析和可视化的步骤基本上就完成了。
忘了介绍一下因为这个data v 也是试用版的。如果大家需要正式发布使用可以购去购买data V的正式版本。
接下来最后一步,离线的数据分析,刚才说了会有两种,一种是外部表查询,一种是内部表查询的形式。这个我可以给大家简单演示一下。大家可以看到我们在这儿新建一张MaxCompute 的外部表。
外部表创建成功之后,可以直接运行来做查询。这里会需要稍微等一下,因为这个数据没有导入到Hologress,基本上是直接读取在MaxCompute中的数据,那MaxCompute 的基本上都是离线数仓的数据。也可以把离线数仓和实时数仓来做离线实时一体化的分析。可以看到这样现在就跑出来这个结果了。
结果已经弹出来了,刚才前后有一分钟不到的样子,接下来可以看一下如果把这个表导入到内部大概需要多久。同样的是我们创建表之后,直接导入mysql 数据。这个导入非常快,我们做了优化。因为我们MaxCompute的holo gress是奔着一体化去的,所以优化完成之后,其实数据导入相对而言是比较快的。刚才少运行一行稍等一下。
导入数据之后,这时候我们再看一下同样一条SQL通过holo gress内部表的查询大概会有多快的速度。
可以看到几乎实时的就能够非常快的把数据查出来了。所以说两种方式的话就是各有优劣。可以看到就外部表我们数据没导入,不占holo gress的存储。购买holo gress的实例之后,只需要用实例的费用就可以了。内部表导入之后可能速度会更快,然后还需要占存储相关的费用,所以这两个部分就看大家自己的取舍,一个会更用的更简单,成本更低一点,速度稍微慢一点,一个成本相对会更高一点,但是查询速度会更快一点。
这样基本上就把这个实验的步骤做完了。然后附录这些表明大家可以自己去运行。最后说一下清理刚才提到比较重要的就是holo gress是会持续在计费的。如果做完之后不用了,或者CU5000CU时消耗完了,那是会产生费用的,那你需要在管控台不用的话,那你就把这个holo gress给停机掉就不会做收费了,这个需要大家注意一下,因为很有可能大家用着真的可能会忘记停机或者释放实力,后面会产生一定费用的。
基本上整个实验大概就是这样的介绍,希望大家可以领取这些免费的资源,自己尝试一下分析一下。