DIM层维度表学习之用户维度表分析

1.用户维度表的模型

DROP TABLE IF EXISTS dim_user_zip;
CREATE EXTERNAL TABLE dim_user_zip
(`id`           STRING COMMENT '用户ID',`name`         STRING COMMENT '用户姓名',`phone_num`    STRING COMMENT '手机号码',`email`        STRING COMMENT '邮箱',`user_level`   STRING COMMENT '用户等级',`birthday`     STRING COMMENT '生日',`gender`       STRING COMMENT '性别',`create_time`  STRING COMMENT '创建时间',`operate_time` STRING COMMENT '操作时间',`start_date`   STRING COMMENT '开始日期',`end_date`     STRING COMMENT '结束日期'
) COMMENT '用户维度表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/gmall/dim/dim_user_zip/'TBLPROPERTIES ('orc.compress' = 'snappy');

2.解析表存储

1. 用户表的选型及理由

1.用户表的特点:

  • 基数大
  • 变化少,注意,一般是不存在物理删除的,删除只是状态的修改,因此变化为insert 和update

2.选型

这样就可以使用拉链表,用开始日期和结束日期来展现用户这段信息持续的状态,
基数太大,而且变化并不太多,因此保存全部数据消耗的资源并没有显现出特别大的意义,感觉浪费资源了
在这里插入图片描述

3.拉链表如何变化的?

1.拉链表的存储

这里注意一下,这里拉链表用状态的结束时间来分区,因为开始时间并不能表现状态的结束和真正的持续结束时间。

2.拉链表都有哪些?

每天的拉链表
和最新的拉链表
因为最新状态的结束时间并不确定,为了避免一天一修改的麻烦,直接将最新状态的结束时间设定为一个不可到达的值,这里设置为9999-12-31.
也就是说,每天的拉链表和9999-12-31
因为是按结束时间进行分区,则每天保存的,就是当天结束的状态,或者说,

3.对插入(注册)的想法是什么?

对于插入,直接将数据添加到9999,

4.对更新的想法是什么?

  • 一个用户一次更新:将原来的状态结束日期修改为前一天(其实当天也行,看怎么理解了),最新的结束日期修改为9999,也就是说,最新状态由今天开始
  • 一个用户多次更新:通过ODS中的用户增量表的ts来区分更新顺序,只保留最新的,按一次修改进行。
    在这里插入图片描述在这里插入图片描述
 select`id`           ,--STRING COMMENT '用户ID',`name`         ,--STRING COMMENT '用户姓名',`phone_num`    ,--STRING COMMENT '手机号码',`email`        ,--STRING COMMENT '邮箱',`user_level`   ,--STRING COMMENT '用户等级',`birthday`     ,--STRING COMMENT '生日',`gender`       ,--STRING COMMENT '性别',`create_time`  ,--STRING COMMENT '创建时间',`operate_time` ,--STRING COMMENT '操作时间',`start_date`   ,--STRING COMMENT '开始日期',`end_date`     --STRING COMMENT '结束日期'from dim_user_zipwhere dt = '9999-12-31'unionselect`id`           ,--STRING COMMENT '用户ID',`name`         ,--STRING COMMENT '用户姓名',`phone_num`    ,--STRING COMMENT '手机号码',`email`        ,--STRING COMMENT '邮箱',`user_level`   ,--STRING COMMENT '用户等级',`birthday`     ,--STRING COMMENT '生日',`gender`       ,--STRING COMMENT '性别',`create_time`  ,--STRING COMMENT '创建时间',`operate_time` ,--STRING COMMENT '操作时间','2022-06-09' start_date,'9999-12-31' end_datefrom (selectdata.`id`           ,--STRING COMMENT '用户ID',data.`name`         ,--STRING COMMENT '用户姓名',data.`phone_num`    ,--STRING COMMENT '手机号码',data.`email`        ,--STRING COMMENT '邮箱',data.`user_level`   ,--STRING COMMENT '用户等级',data.`birthday`     ,--STRING COMMENT '生日',data.`gender`       ,--STRING COMMENT '性别',data.`create_time`  ,--STRING COMMENT '创建时间',data.`operate_time` ,--STRING COMMENT '操作时间',row_number() over ( partition by data.id order by ts desc ) rfrom ods_user_info_incwhere dt = '2022-06-09'and type = 'insert' or type = 'update' ) t0 where r = 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

花见Live Wallpaper Themes 4K Pro for mac(4k视频壁纸)

如果你希望让自己的Mac桌面焕发活力,那么Live Wallpaper & Themes 4K Pro正是一款值得尝试的软件。它提供了丰富的超高清4K动态壁纸和主题,可以让你轻松打造出个性化的桌面环境。 这款软件拥有众多令人惊叹的功能。其中最值得一提的是,它…

linux 进程隔离Namespace 学习

一、linux namespace 介绍 1.1、概念 Linux Namespace是Linux内核提供的一种机制,它用于隔离不同进程的资源视图,使得每个进程都拥有独立的资源空间,从而实现进程之间的隔离和资源管理。 Linux Namespace的设计目标是为了解决多个进程之间…

macos系统综合清理优化 MacCleaner 3 Pro激活中文最新版

MacCleaner 3 Pro是一款用于优化和清理Mac系统的工具。它提供了一系列功能,旨在帮助用户清理无用文件、优化系统性能并保护隐私。 MacCleaner 3 Pro主要功能: 磁盘清理:该工具可以扫描和清理Mac硬盘上的无用文件和垃圾文件,包括…

P1009 [NOIP1998 普及组] 阶乘之和

首先先看数据范围&#xff0c;1<n<50所以&#xff0c;这道题必须使用高精度&#xff0c;不然会爆&#xff08;&#xff09; 题目是要求乘阶和&#xff0c;所以可以高精乘高精加&#xff0c;就是把高精乘的模板套上去接着套高精加的模板 高精度乘法 模版如下&#xff1a…

vue 子组件向父组件传递参数 子传父

子组件中写&#xff1a; this.$emit(RowCount,res.data.RowCount); 父组件中写&#xff1a; getMFGLRowCount(val){ //父组件中的方法: 接收子组件传过来的参数值赋值给父组件的变量 //this.totalCount val; alert("这…

注册登录首选,趣味滑块验证码

前言 注册登录账户时&#xff0c;保障账户安全是首要任务&#xff01;使用趣味滑块验证码&#xff0c;既能有效防御恶意攻击&#xff0c;又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全&#xff01; HTML代码 <script src"https://cdn6.kgcaptcha.co…

LlamaIndex:将个人数据添加到LLM

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 LlamaIndex是基于大型语言模型&#xff08;LLM&#xff09;的应用程序的数据框架。像 GPT-4 这样的 LLM 是在大量公共数据集上预先训练的&#xff0c;允许开箱即用的令人难以置信的自然语言处理能力。但是&#xff0c;…

07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动

本系列教程配套出有视频教程&#xff0c;观看地址&#xff1a;https://www.bilibili.com/video/BV1gV4y1e7Sg 7. LVGL对接EC11旋转编码器驱动 本次实验我们向LVGL库中对接EC11旋转编码器驱动&#xff0c;让我们能通过EC11旋转编码器操作UI。 7.1 复制工程 上次实验得出的工…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网&#xff0c;来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器&#xff0c;它的 MIMO 是 22&#xff0c;也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…

nvm 在 Windows 上的使用

NVM&#xff08;Node Version Manager&#xff09;是一个用于管理和切换多个 Node.js 版本的工具。它允许你在同一台机器上同时安装和使用不同版本的 Node.js&#xff0c;而无需手动安装和卸载。 之前都是只安装一个版本的 node.js&#xff0c;该更新时更新&#xff0c;使得以前…

NFT 合约部署教程

本篇文章主要介绍如何将您的 NFT(ERC-721 Token) 通过智能合约部署到去中心化网络中 Init Project //创建一款ocean的NFT mkdir nft-ocean//进入目录 cd nft-ocean//初始化项目&#xff0c;根据提示填写即可&#xff0c;packname和description填写即可 npm init//添加hardhat…

el-select数据过多的解决(纯前端)

前言 el-select数据过多这个问题应该很多人都遇到过&#xff0c;在生产环境中数据几百、几千条是比较常见的。当数据过多时&#xff0c;就会造成浏览器卡顿&#xff0c;如果客户电脑性能不行&#xff0c;浏览器直接卡死也有可能。 解决 先说一下现在项目中遇到的两种解决方案…