Hive虽然强大,但是我们遇到的业务需求必定是千奇百怪的。

在做日志解析的时候,我们会遇到访客,和访次的概念。

对于在2个小时之内的访问,我们认为是访问一次,对于两个小时之外的访问,我们认定是再次访问。

也就是是说,最新一次访问,与上一次访问之间间隔超过2个小时,则算是第二次访问。

用Hive来做过滤。

理一下思路:

select cookie_id, min(visit_time)

from web_log

group by cookie_id

用上面的计算来求出每个Cookie的第一次访问。

然后把这个访客的第一次访问的数据清理出来

select *

from web_log a

left outer join (

select cookie_id, min(visit_time) first_visit

from web_log

group by cookie_id

) b

on a.cookie_id = b.cookie_id

where a.visit_time > first_visit + 2 hours

这样就取出了一些第二次访问的客户数据了。

重复5-6次。

这样就可以计算出到底有多少防次访问了网站。

虽然不一定是最优解,不知道还有没有更好的办法呢??

想到一个方法,在Reduce阶段,用Distribute By cookie_id。

然后使用Python脚本进行编程。

取一条登陆记录,取其访问的时间。用变量保存。

然后再取一条记录,

如果新的记录的访问时间与上一次的访问记录相差2个小时,则输出上一条记录。

如果在2个小时之内,更新变量,不输出,继续访问。这样就像是个游标一样处理数据。

最后将输出格式为 cookie_id,first_visit_time,last_visit_time这样的格式,每一条这样的记录作为一次的访问。这一次访问包含N次请求。

http://dacoolbaby.iteye.com/blog/1824977

同样,对于商品第一次浏览的时间统计:

--- 先根据规则购买用户的订单表,得到用户购买某些三级品类的订单时间
set hive.exec.parallel=true;
set mapreduce.job.split.metainfo.maxsize=-1;
drop table if exists dev.dev_jypt_jiazhuang_rule_user_all_buy;
create table if not exists dev.dev_jypt_jiazhuang_rule_user_all_buy
as
select * from dev.jiazhuang_user_rule_buy_order_table_15_v2
where
item_third_cate_cd in
('878','753','751','13690','760','898',
'870','1278','13691','13298','745','13117',
'880','1300','749','14421','12394','758',
'9934','9906','9939','9915','9904','9933',
'4952','9863','9916','9931','9911','11961',
'9910','9940','1629','9933','9912','1631') --- 根据规则用户购买某些三级品类的订单时间,得出用规则户购买某个三级品类的最早时间
drop table if exists dev.dev_jypt_jiazhuang_rule_user_first_buy;
create table if not exists dev.dev_jypt_jiazhuang_rule_user_first_buy
as
select
user_log_acct,
-- sale_ord_id,
-- parent_sale_ord_id,
-- brand_cd,
brandname,
item_third_cate_cd,
item_third_cate_name,
-- item_sku_id,
-- sale_qtty,
-- after_prefr_amount,
-- rev_addr_province_id,
-- rev_addr_city_id,
-- rev_addr_county_id,
min(sale_ord_tm) user_first_buy_tm
from
dev.dev_jypt_jiazhuang_rule_user_all_buy
group by
user_log_acct,
brandname,
item_third_cate_cd,
item_third_cate_name

  

 
 

hive 提取用户第一次浏览/购买 某商品的 时间的更多相关文章

  1. Cookie小案例-----记住浏览过的商品记录

    Cookie小案例------记住浏览过的商品记录 我们知道,这个功能在电商项目中非经常见.这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用, 实现功能例如以下: 1, ...

  2. cookie记录用户的浏览商品的路径

    在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联. 下面将使用cookie记录用户的浏览过的历史页面.该网站将每个页面的标题保存在该页面的$TIT ...

  3. <项目><day11>查看用户浏览过的商品

    <项目>查看用户浏览过的商品 1.创建一个entity包储存实体对象 1.1创建一个Product的类存储实体对象 对象具有以下属性,并添加set和get方法,含参和不含参的构造方法,to ...

  4. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

  5. Web---Cookie技术(显示用户上次登录的时间、显示用户最近浏览的若干个图片(按比例缩放))

    本章博客讲解: 1.Cookie基本用法演示 2.演示Cookie的访问权限 3.演示Cookie的删除 4.利用Cookie显示用户上次登录的时间 5.利用Cookie技术显示用户最近浏览的若干个图 ...

  6. php中如何实现网上商城用户历史浏览记录的代码

    /如是COOKIE 里面不为空,则往里面增加一个商品ID if (!empty($_COOKIE['SHOP']['history'])){ //取得COOKIE里面的值,并用逗号把它切割成一个数组 ...

  7. bookStore第三篇【用户模块、购买模块、订单模块】

    用户模块 要登陆后才能购买,因此我们先写购买模块 设计实体 private String id; private String username; private String password; p ...

  8. app内购提示,您已购买此商品,但未下载

    出现这样的问题,是支付没有finish造成的,一般在支付过程中断网了,下次再购买同一商品的时候就会出现这样的问题, 解决办法,在点击购买的时候判断支付队列中是否有为finish的商品,若有,则进行处理 ...

  9. js记录用户行为浏览记录和停留时间(转)

    演示地址:http://weber.pub/demo/160902/test.html 测试源码下载:http://pan.baidu.com/s/1nvPKbSP 密码:r147 解决问题所使用的知 ...

随机推荐

  1. ES6中的一些新特性

    这两个命令是ES6的新语法知识.这两个新的特性解决了ES6中的一些小的"bug"问题.其中包含一些知识:块级作用域.let命令.const命令.全局对象的属性.Google V8引 ...

  2. hihocoder 1288 : Font Size (微软2016校园招聘4月在线笔试)

    hihocoder 1288 笔试第一道..wa了好几次,也是无语..hihocoder错了不会告诉你失败的时候的测试集,这样有时候就很烦.. 遍历所有的字体,从min(w,h)开始逐渐变小开始遍历. ...

  3. 在MEF中实现延迟加载部件

    在MEF的宿主中,当我们通过Import声明导入的对象时,组装(Compose)的时候会创建该对象.例如: interface ILogger    {        void Log(string ...

  4. Delphi 中ASSERT用法

    http://blog.csdn.net/dongyonggan/article/details/5780979 用法:ASSERT(表达式) 如果为假,ASSERT会产生一个EASSERTIONFA ...

  5. Matlab中如何读取.dat文件

    处理movielens1M数据集 中间有个双冒号,直接用load的只读取第一列,这时候我们可以用dlmread(中间是l不是i),如下图,只需要提取1 3 5列就好了.

  6. 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. 新公司官网项目优化实践(Vue)

    入职后接手website-html和website-mobile项目,发现项目加载速度不太理想,于是结合自己之前的经验对项目做了优化.此篇文章主要记录这次优化详情. 原始项目:开发环境:website ...

  8. CDK上安装kube-dashboard

    首先把addon的代码下载下来 git clone https://github.com/minishift/minishift-addons 然后进入相应的目录,运行 ericdeMacBook-P ...

  9. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

  10. http://www.ruanyifeng.com/blog/2013/07/gpg.html

    http://www.ruanyifeng.com/blog/2013/07/gpg.html