HIVE去重及其应用之UV统计
Posted 小基基o_O
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE去重及其应用之UV统计相关的知识,希望对你有一定的参考价值。
HIVE的3种去重方法
SELECT DISTINCT user_id FROM t;
SELECT user_id FROM t GROUP BY user_id;
SELECT user_id FROM (
SELECT
user_id,
ROW_NUMBER()OVER(PARTITION BY user_id ORDER BY user_id)r
FROM t
)t1 WHERE r=1;
建议用第三种,效率高
应用场景:统计各页面每天 UV
mysql方案
SELECT
page,
ymd,
COUNT(DISTINCT name) uv
FROM
t
GROUP BY
page,
ymd
;
HIVE方案
建表
删库,建库
DROP DATABASE IF EXISTS app;
CREATE DATABASE app LOCATION '/app';
创建明细表
DROP TABLE IF EXISTS app.tb;
CREATE TABLE app.tb (
name STRING,
page STRING
)
PARTITIONED BY (ymd STRING)
LOCATION '/app/tb';
-- 插入数据
INSERT INTO TABLE app.tb PARTITION(ymd='2021-08-31') VALUES
('剑圣','首页'),('剑圣','首页'),('巫妖','首页'),('剑圣','商品页'),('剑圣','商品页'),('先知','首页');
INSERT INTO TABLE app.tb PARTITION(ymd='2021-09-01') VALUES
('先知','首页'),('剑圣','首页'),('先知','首页'),('剑圣','商品页'),('先知','商品页'),('先知','首页');
创建UV统计表
-- 删表,建表:
DROP TABLE IF EXISTS app.tb_uv;
CREATE TABLE app.tb_uv (
page STRING,
uv INT
)
PARTITIONED BY (ymd STRING)
LOCATION '/app/tb_uv';
写入
INSERT OVERWRITE TABLE app.tb_uv PARTITION(ymd='2021-08-31')
SELECT
page,
count(name)
FROM
(
SELECT
page,
name,
ROW_NUMBER()OVER(PARTITION BY name,page ORDER BY name)r
FROM app.tb
WHERE ymd='2021-08-31'
)t
WHERE r=1
GROUP BY page;
INSERT OVERWRITE TABLE app.tb_uv PARTITION(ymd='2021-09-01')
SELECT
page,
count(name)
FROM
(
SELECT
page,
name,
ROW_NUMBER()OVER(PARTITION BY name,page ORDER BY name)r
FROM app.tb
WHERE ymd='2021-09-01'
)t
WHERE r=1
GROUP BY page;
以上是关于HIVE去重及其应用之UV统计的主要内容,如果未能解决你的问题,请参考以下文章
hive 的日志处理统计网站的 PV UV案例 与 给合 python的数据清洗数据案例
REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理