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 sql大数据有道之Hive sql去重

hive 的日志处理统计网站的 PV UV案例 与 给合 python的数据清洗数据案例

HyperLoglog算法在Uv实时统计中的应用

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理