部分数据

{"account":"l4d9TM","appId":"cn.doitedu.app1","appVersion":"2.0","carrier":"小米移动","deviceId":"KVlABkbMqqwn","deviceType":"REDMI-5","eventId":"adClick","ip":"180.62.91.180","latitude":25.213352855705107,"longitude":100.58718180057615,"netType":"WIFI","osName":"android","osVersion":"6.5","properties":{"adCampain":"7","adId":"6","adLocation":"3","pageId":"41"},"releaseChannel":"豌豆荚","resolution":"1024*768","sessionId":"rGeXt8N0rD1","timeStamp":1602063058368}
{"account":"DxL36Dom","appId":"cn.doitedu.app1","appVersion":"2.2","carrier":"中国联通","deviceId":"0HtfcnPofgoR","deviceType":"REDMI-5","eventId":"fetchCoupon","ip":"160.171.79.244","latitude":34.21346724565028,"longitude":117.60034950493103,"netType":"4G","osName":"android","osVersion":"6.5","properties":{"couponId":"2","pageId":"393"},"releaseChannel":"百度手机助手","resolution":"1024*768","sessionId":"meO4lXHYmx1","timeStamp":1602063059899}
{"account":"l4d9TM","appId":"cn.doitedu.app1","appVersion":"2.0","carrier":"小米移动","deviceId":"KVlABkbMqqwn","deviceType":"REDMI-5","eventId":"adShow","ip":"180.62.91.180","latitude":25.213352855705107,"longitude":100.58718180057615,"netType":"WIFI","osName":"android","osVersion":"6.5","properties":{"adCampain":"11","adId":"18","adLocation":"10","pageId":"650"},"releaseChannel":"豌豆荚","resolution":"1024*768","sessionId":"rGeXt8N0rD1","timeStamp":1602063061307}
{"account":"OojqS36Vk","appId":"cn.doitedu.app1","appVersion":"4.0","carrier":"中国移动","deviceId":"5hZaxgYv2Vdp","deviceType":"REDMI-6","eventId":"productView","ip":"228.241.223.115","latitude":34.344448280621755,"longitude":105.58117092708984,"netType":"WIFI","osName":"android","osVersion":"7.5","properties":{"pageId":"556","productId":"20","refType":"2","refUrl":"901","title":"umL jbF MaD","url":"RQj/OAD","utm_campain":"11","utm_loctype":"5","utm_source":"5"},"releaseChannel":"拇指玩","resolution":"1024*768","sessionId":"6xyR0rGoA0Y","timeStamp":1602063061549}
{"account":"DxL36Dom","appId":"cn.doitedu.app1","appVersion":"2.2","carrier":"中国联通","deviceId":"0HtfcnPofgoR","deviceType":"REDMI-5","eventId":"submitOrder","ip":"160.171.79.244","latitude":34.21346724565028,"longitude":117.60034950493103,"netType":"4G","osName":"android","osVersion":"6.5","properties":{"refType":"3"},"releaseChannel":"百度手机助手","resolution":"1024*768","sessionId":"meO4lXHYmx1","timeStamp":1602063062810}
{"account":"wWRAho9y","appId":"cn.doitedu.app1","appVersion":"3.4","carrier":"腾讯移动","deviceId":"8MHvYuyzpkYB","deviceType":"MI-10","eventId":"addCart","ip":"71.108.129.236","latitude":28.223969803957008,"longitude":106.58697132089286,"netType":"WIFI","osName":"android","osVersion":"8.0","properties":{"pageId":"877","productId":"395","productNumb":"9","refUrl":"PZB/oso","url":"BLh/siJ"},"releaseChannel":"小米应用商店","resolution":"1024*768","sessionId":"zJ6FB9XqKQw","timeStamp":1602063063065}
{"account":"DxL36Dom","appId":"cn.doitedu.app1","appVersion":"2.2","carrier":"中国联通","deviceId":"0HtfcnPofgoR","deviceType":"REDMI-5","eventId":"pageView","ip":"160.171.79.244","latitude":34.21346724565028,"longitude":117.60034950493103,"netType":"4G","osName":"android","osVersion":"6.5","properties":{"pageId":"491","refUrl":"992","title":"VHz zdV rja","url":"NxJ/kOp","utm_campain":"10","utm_loctype":"1","utm_source":"10"},"releaseChannel":"百度手机助手","resolution":"1024*768","sessionId":"meO4lXHYmx1","timeStamp":1602063063921}

1.把文件中的json形式转化为普通形式导入到表中

1.1本地文件导入到hive中

create table tb_event(json string);
load data local inpath '/data/event.log' into table tb_event;

1.2 简单过滤文件,导入一个新的表中

create table tb_event_log as
select
if(account!='',account,eventId) as guid, --需要我们确定每个人独一的id
*
from
(select
json_tuple(
json ,
'account' ,'appId' ,'appVersion','carrier','deviceId','deviceType','eventId','ip','latitude','longitude','netType','osName','osVersion','properties','releaseChannel','resolution','sessionId' ,'timeStamp')
as
(account ,appId ,appVersion,carrier,deviceId,deviceType,eventId,ip,latitude,longitude,netType,osName,osVersion,properties,releaseChannel,resolution,sessionId ,`timeStamp`)
from
tb_event) t
where account!='' and eventId!='';

1.3简单查询是否正确

select * from tb_event_log limit 10;

由于原表文件的间隔符为'/001',我们需要改为以'\t'为间隔,否则不好导入到clickhouse中

2.在hive中把间隔符改为制表符为间隔

insert overwrite local directory '/data/'
row format delimited fields terminated by '\t'
select * from tb_event_log

3.在clickhouse中建表,以guid和timeStamp排序

create table tb_event_log2(
guid String,
account String,
appId String,
appVersion String,
carrier String,
deviceId String,
deviceType String,
eventId String,
ip String,
latitude String,
longitude String,
netType String,
osName String,
osVersion String,
properties String,
releaseChannel String,
resolution String,
sessionId String,
`timeStamp` String
)engine=MergeTree
order by (guid,`timeStamp`);

4.把文件导入到表格中(在本地导入)

cat ./000000_0  |  clickhouse-client  -q  "insert into db_doit19.tb_event_log2 FORMAT TSV"

5.求解

求完成adShow-->adClick--> addCart--> submitOrder的人数,以及完成部分的人数

select
ct,
four as f,
(three+four) as th,
(two+three+four) as tw,
(one+two+three+four) as o
from
(select
count(1) ct,
sum(if(funnel=1,1,0)) as one,
sum(if(funnel=2,1,0)) as two,
sum(if(funnel=3,1,0)) as three,
sum(if(funnel=4,1,0)) as four
from
(select
guid,
windowFunnel(1000000)(    ---设置的滑动窗口,括号里填时间,单位毫秒
toDateTime(cast(`timeStamp` as Int64)),  ---
eventId='adShow',  ---条件链从‘adShow’开始到‘submitOrder’结束,完成几条输出数值几
eventId='adClick',      ---若起始不是‘adShow’,则输出0
eventId='addCart',
eventId='submitOrder'
) as funnel
from
tb_event_log2
group by guid
having  funnel>0
) )

LOAP引擎:clickhouse05: 漏斗函数的应用相关推荐

  1. ie php脚本引擎,使用php重新实现PHP脚本引擎内置函数

    使用php重新实现PHP脚本引擎内置函数 // 实在无聊,突发奇想,想把PHP里面部分已经提供封装好的函数重新使用PHP实现一遍, // 于是便有了下面的代码主要实现了PHP中部分字符串处理函数,同时 ...

  2. 在MySQL的InnoDB存储引擎中count(*)函数的优化

    转载自  在MySQL的InnoDB存储引擎中count(*)函数的优化 写这篇文章之前已经看过了很多数据库方面的优化内容,大部分都是加索引.使用事务.要什么select什么等等.然而,只是停留在阅读 ...

  3. mysql常用命令行操作(二):表和库的操作、引擎、聚合函数

    一.查看.创建.删除数据库 create database library default character set utf8 collate utf8_general_ci; # 创建数据库并设置 ...

  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数引擎 vs rand 函数

    1. 结果范围 随机数引擎:生成的 unsigned 整数在一个系统定义的范围内 rand 生成的数的范围:在 0 到 RAND_MAX 之间 eg. 一个引擎类型的范围可以通过调用该类型对象的 mi ...

  5. smarty模板引擎_7-自定义函数

    扩展自定义函数的两种方式 1.通过registerPlugin()注册,仅对当前模板有效 [php] view plaincopy function getVerify($params,$smarty ...

  6. War3脚本引擎(Jass)执行函数分析

    前言 Jass是魔兽争霸3中比较重要的一个部分,下面资料通过逆向分析Jass执行脚本期间的一些逻辑和函数 环境 游戏版本:126 分析 Jass脚本执行入口,一般都是由固定函数或者特定类型函数(cod ...

  7. java中的insert函数_drools规则引擎之insert函数

    insert的作用与在Java 类当中调用KieSession的insert方法效果一样,都是将Fact对象插入到当前的Working Memory当中,基本用法格式如下: insert(new So ...

  8. 1w字详解 ClickHouse漏斗模型实践方案(收藏)

    作者:互联网大数据团队- Wu Yonggang 日常工作中做为数仓开发工程师.数据分析师经常碰到漏斗分析模型,本文详细介绍漏斗模型的概念及基本原理,并阐述了其在平台内部的具体实现.针对实际使用过程的 ...

  9. 用户行为分析模型实践--漏斗分析模型

    在<用户行为分析模型实践--路径分析模型 >中,讲述了基于平台化查询中查询时间短.需要可视化的要求,并结合现有的存储计算资源以及具体需求,我们在实现中将路径数据进行枚举后分为两次进行合并. ...

  10. 用户行为分析模型实践(二)—— 漏斗分析模型

    作者:vivo 互联网大数据团队- Wu Yonggang 在<用户行为分析模型实践(一)-- 路径分析模型>中,讲述了基于平台化查询中查询时间短.需要可视化的要求,并结合现有的存储计算资 ...

最新文章

  1. C/C++字节对齐总结
  2. 噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...
  3. python做自动化控制postman_使用postman+newman+python做接口自动化测试
  4. Android Studio 安装配置问题总结
  5. Android自定义实现FlowLayout
  6. 验证码_12306验证码很难吗?2020年最新的Python验证码模块开源
  7. PhpED和Zend Studio for Eclipse的Debugger配置
  8. 某车企笔试题解答(1)
  9. Java基础常见笔试题总结
  10. linux unzip命令
  11. 转:让老板头疼的90后,管不得?
  12. [Ctsc2010]珠宝商 SAM+点分治+根号分治
  13. PyCharm 字母大小写切换
  14. 用计算机弹生僻字乐谱,【计算器乐谱】抖音生僻字计算器乐谱 抖音生僻字计算器数字简谱...
  15. 在openSUSE上编译aMule-DLP
  16. 微信JS-SDK的使用
  17. 【平头哥】手动CKLink驱动安装/更新
  18. devstack+ubuntu16.04 desktop版安装openstack S版手册
  19. Git - 入门到熟悉_日志管理
  20. android支付宝支付微信支付封装,如何在Android App中集成支付宝和微信支付功能

热门文章

  1. python pdfminer中文字体问题_在python中使用pdfminer处理连字
  2. 数模系列(3):模糊综合评价法
  3. 基于FPGA的数字时钟verilog开发
  4. 如何高效绘制知识地图?
  5. Jquery实现确定取消对话框
  6. Android人脸支付功能,人脸支付是未来吗?盘点安卓人脸支付手机,小米看后很尴尬…...
  7. 综述 | 一文看尽三种针对人工智能系统的攻击技术及防御策略
  8. 解决 java.sql.SQLException: ORA-01688: unable to extend table XXX partition YYY by 1024 in tablespace
  9. Ubuntu输入简体中文变成繁体
  10. 圣人、仁人、君子、善人、士、小人之名简释