美文网首页
使用SQL统计出每个用户的累积访问次数

使用SQL统计出每个用户的累积访问次数

作者: 十丈_红尘 | 来源:发表于2019-07-01 20:26 被阅读0次

#原始数据 ##要求使用SQL统计出每个用户的累积访问次数,如下表所示:

## 建表语句
1. 创建动态分区表
create table test01_visit(userId string, visitData string, visitCount int) partitioned by(x string);
2. 设置动态分区属性
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict; 
3. 创建临时表并加载数据
create table test_visit(userId string, visitData string, visitCount int) row format delimited fields terminated by '\t' location '/data';
+--------------------+-----------------------+------------------------+--+
| test_visit.userid  | test_visit.visitdata  | test_visit.visitcount  |
+--------------------+-----------------------+------------------------+--+
| u01                | 2017/1/21             | 5                      |
| u02                | 2017/1/23             | 6                      |
| u03                | 2017/1/22             | 8                      |
| u04                | 2017/1/20             | 3                      |
| u01                | 2017/1/23             | 6                      |
| u01                | 2017/2/21             | 8                      |
| U02                | 2017/1/23             | 6                      |
| U01                | 2017/2/22             | 4                      |
+--------------------+-----------------------+------------------------+--+
4. 将临时表中的数据插入到动态分区表中
insert overwrite table test01_visit partition(x) select userId, visitData, visitCount, visitData from test_visit;
+----------------------+-------------------------+--------------------------+-----------------+--+
| test01_visit.userid  | test01_visit.visitdata  | test01_visit.visitcount  | test01_visit.x  |
+----------------------+-------------------------+--------------------------+-----------------+--+
| u04                  | 2017/1/20               | 3                        | 2017/1/20       |
| u01                  | 2017/1/21               | 5                        | 2017/1/21       |
| u03                  | 2017/1/22               | 8                        | 2017/1/22       |
| u02                  | 2017/1/23               | 6                        | 2017/1/23       |
| u01                  | 2017/1/23               | 6                        | 2017/1/23       |
| U02                  | 2017/1/23               | 6                        | 2017/1/23       |
| u01                  | 2017/2/21               | 8                        | 2017/2/21       |
| U01                  | 2017/2/22               | 4                        | 2017/2/22       |
+----------------------+-------------------------+--------------------------+-----------------+--+
5. 将时间字段格式替换
select date_format(regexp_replace(visitData,'/','-'),'yyyy-MM')from test01_visit;
+----------+--+
|   _c0    |
+----------+--+
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-02  |
| 2017-02  |
+----------+--+
select from_unixtime(unix_timestamp(visitdata,'yyyy/MM/dd'),'yyyy-MM') from test01_visit;
+----------+--+
|   _c0    |
+----------+--+
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-01  |
| 2017-02  |
| 2017-02  |
+----------+--+
6.字符串格式化
select lower(userId) from test01_visit;
+------+--+
| _c0  |
+------+--+
| u04  |
| u01  |
| u03  |
| u02  |
| u01  |
| u02  |
| u01  |
| u01  |
+------+--+
7.统计出每个用户的每个月的访问次数
select lower(userId) as uid, date_format(regexp_replace(visitdata,'/','-'),'yyyy-MM') as date_month, sum(visitcount) as visitcount from test01_visit group by lower(userId), date_format(regexp_replace(visitdata,'/','-'),'yyyy-MM');
+------+-------------+-------------+--+
| uid  | date_month  | visitcount  |
+------+-------------+-------------+--+
| u01  | 2017-01     | 11          |
| u01  | 2017-02     | 12          |
| u02  | 2017-01     | 12          |
| u03  | 2017-01     | 8           |
| u04  | 2017-01     | 3           |
+------+-------------+-------------+--+
8.统计出每个用户的累积访问次数
select *, sum(t1.visitcount) over(partition by uid order by date_month rows between unbounded preceding and current row) from (select lower(userId) as uid, date_format(regexp_replace(visitdata,'/','-'),'yyyy-MM') as date_month, sum(visitcount) as visitcount from test01_visit group by lower(userId), date_format(regexp_replace(visitdata,'/','-'),'yyyy-MM')) t1;
+---------+----------------+----------------+---------------+--+
| t1.uid  | t1.date_month  | t1.visitcount  | sum_window_0  |
+---------+----------------+----------------+---------------+--+
| u01     | 2017-01        | 11             | 11            |
| u01     | 2017-02        | 12             | 23            |
| u02     | 2017-01        | 12             | 12            |
| u03     | 2017-01        | 8              | 8             |
| u04     | 2017-01        | 3              | 3             |
+---------+----------------+----------------+---------------+--+

相关文章

  • 使用SQL统计出每个用户的累积访问次数

    #原始数据##要求使用SQL统计出每个用户的累积访问次数,如下表所示:

  • hive级联累计

    根据访问次数统计表,得到累计访问总计 建表,load数据 求每个用户的月总金额 把表自己inner join 生成...

  • mysql & mine

    常用的 MySQL 内置函数 按月计算指定年数的每个月的用户出现次数 统计前一天的日志sql语句: 计算该用户指定...

  • linux如何统计有多少用户访问和每个用户访问次数

    命令 每个用户访问次数 共有多少用户访问 分步详解 1. cat xx.log | grep '你的字符串' 找到...

  • 统计网站访问量

    1、便利数组,将5日每位用户访问网站的次数统计出来并以逆序排序 2、统计某天8点到9点用户的访问量 3、统计一天内...

  • Cookie

    为何使用Cookie:某些网站为了辨别用户身份、自动登录、统计统一客户端对网站的访问次数、进行 session 跟...

  • Hive 的几个练习题

    题目1 需求:每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 三个字段的意思:用户名,月份,访问...

  • 数据布点

    场景一:栏目访问 场景描述:访问导航栏目页面即其子栏目页面 统计分析目标 统计各页面的展示次数 分析用户主要的消费...

  • 拼多多面试题:如何查找前20%的数据?

    【题目】 用户访问次数表,列名包括用户编号、用户类型、访问量。要求在剔除访问次数前20%的用户后,每类用户的平均访...

  • Redis应用实战

    一.统计每个页面的UV UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数。每个用户每天在...

网友评论

      本文标题:使用SQL统计出每个用户的累积访问次数

      本文链接:https://www.haomeiwen.com/subject/vrnncctx.html