zoukankan      html  css  js  c++  java
  • 数据仓库 用户新增主题

    实现思路:要知道今天有哪些用户是新增用户,需要知道两件事,一是今天所有的活跃用户,因此,新增用户的数据来源,还是DWS层的设备日活表,新增用户,就是部分日活的用户。二是要知道哪些用户在以前活跃过,用今日活跃用户减去以前活跃过的用户,剩下的就是新增用户。

    DWS层(每日新增设备明细表)

    建表语句。

    分析:这个表用来存储每日新增的设备(用户),数据量比起每日活跃表来说,要少的多。因为一台设备可以在每天都生成活跃记录,而新增设备却只会出现一条记录,数据量相对较少,可以不用分区表。

    drop table if exists dws_new_mid_day;
    create external table dws_new_mid_day
    (
        `mid_id` string COMMENT '设备唯一标识',
        `user_id` string COMMENT '用户标识', 
        `version_code` string COMMENT '程序版本号', 
        `version_name` string COMMENT '程序版本名', 
        `lang` string COMMENT '系统语言', 
        `source` string COMMENT '渠道号', 
        `os` string COMMENT '安卓系统版本', 
        `area` string COMMENT '区域', 
        `model` string COMMENT '手机型号', 
        `brand` string COMMENT '手机品牌', 
        `sdk_version` string COMMENT 'sdkVersion', 
        `gmail` string COMMENT 'gmail', 
        `height_width` string COMMENT '屏幕宽高',
        `app_time` string COMMENT '客户端日志产生时的时间',
        `network` string COMMENT '网络模式',
        `lng` string COMMENT '经度',
        `lat` string COMMENT '纬度',
        `create_date`  string  comment '创建时间' 
    )  COMMENT '每日新增设备信息'
    stored as parquet
    location '/warehouse/gmall/dws/dws_new_mid_day/';

    数据导入,以2019-02-10为例。用日活表取连接新增设备表,如果以前没有出现在新增设备中的数据(nm.mid_id is null),即为新增的设备。

    insert into table dws_new_mid_day
    select  
        ud.mid_id,
        ud.user_id , 
        ud.version_code , 
        ud.version_name , 
        ud.lang , 
        ud.source, 
        ud.os, 
        ud.area, 
        ud.model, 
        ud.brand, 
        ud.sdk_version, 
        ud.gmail, 
        ud.height_width,
        ud.app_time,
        ud.network,
        ud.lng,
        ud.lat,
        '2019-02-10'
    from dws_uv_detail_day ud left join dws_new_mid_day nm on ud.mid_id=nm.mid_id
    where ud.dt='2019-02-10' and nm.mid_id is null;

    ADS层(每日新增设备表)

    上面的新增设备明细表,只是记录了每日新增了哪些设备,但报表上要展示的,是每日新增了多少数量的设备,因此,还需要一个ADS层的表去存储count后的数据,以便于直接展示在报表里。

    建表语句。

    drop table if exists ads_new_mid_count;
    create external table ads_new_mid_count
    (
        `create_date`     string comment '创建时间' ,
        `new_mid_count`   BIGINT comment '新增设备数量' 
    )  COMMENT '每日新增设备信息数量'
    row format delimited fields terminated by '	'
    location '/warehouse/gmall/ads/ads_new_mid_count/';

    导入数据,以2019-02-10为例。

    insert into table ads_new_mid_count 
    select
    create_date,
    count(*)
    from dws_new_mid_day
    where create_date='2019-02-10'
    group by create_date;

    最后,还要将上面的两个导数据的sql写成脚本,略。

  • 相关阅读:
    C#类型转换
    C#运算符
    SQL视图与触发器
    存储过程
    SQL 变量
    SQL 经典练习题
    字符串函数,数据类型转换,链接查询,纵向查询
    常用的 SQL 函数
    习题整理(1)
    子查询的部分内容
  • 原文地址:https://www.cnblogs.com/noyouth/p/13196403.html
Copyright © 2011-2022 走看看