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

news2024/11/30 4:57:21

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 ORC
    LOCATION '/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_zip
        where dt = '9999-12-31'
        union
        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 '操作时间',
            '2022-06-09' start_date,
            '9999-12-31' end_date
        from (
            select
                data.`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 ) r
            from ods_user_info_inc
            where dt = '2022-06-09'
            and type = 'insert' or type = 'update' ) t0 where r = 1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Pro3.0.2保姆级安装教程

软件简介: ArcGIS Pro是ERSI推出的新一代原生态64位ArcGIS桌面产品。具备强大的二维、三维一体化功能,继承了传统桌面产品ArcMap等产品几乎所有的功能,并在多个方面作了进一步的优化和改进,是云端一体化、数据科学与空间数据科学…

深入理解 JVM 之——字节码指令与执行引擎

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 类文件结构 Write Once,Run Anywhere 对于 C 语言从程序到运行需要经过编译的过程,只有经历了编译后,我们所编写的代码才能够翻译为机器可以直接运行的二进制代码&#x…

Java“牵手”淘宝商品列表数据,关键词搜索淘宝商品数据接口,淘宝API申请指南

淘宝商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问淘宝商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

面试求职-简历编写技巧

没有高水平简历 只有高匹配的简历 试问一下:如果一个非常牛逼的软件工程的硕士,投递市场营销岗位,结果会是什么样呢? 这位同学大概率没办法通过简历。 不是因为他不够优秀,而是因为简历和岗位不够匹配。 在公司的招…

第20章 原子操作实验(iTOP-RK3568开发板驱动开发指南 )

在上一章节的实验中,对并发与竞争进行了实验,两个app应用程序之间对共享资源的竞争访问引起了数据传输错误,而在Linux内核中,提供了四种处理并发与竞争的常见方法,分别是原子操作、自旋锁、信号量、互斥体,…

Linux DirtyPipe权限提升漏洞 CVE-2022-0847

Linux DirtyPipe权限提升漏洞 CVE-2022-0847 漏洞描述 CVE-2022-0847-DirtyPipe-Exploit CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权…

YOLOV7改进-具有隐式知识学习的Efficient解耦头

[解耦头][https://github.com/z1069614715/objectdetection_script/blob/master/yolo-improve/yolov7-DecoupledHead.py] 1、复制这些到yolo.py 2、到这 3、复制下半部分到yolo.py 4、替换这里 5、最后的加到上面的这里 6、添加 7、添加 8、V5大概一个点的提升 9、解…

快速完成工信部APP备案流程_以阿里云APP备案为例

阿里云APP备案流程分为6步,APP备案成功后应用可以上架,登录阿里云账号填写APP信息,等待阿里云初审,初审通过后进行工信部短信核验,管局审核通过后APP即可备案成功,最后移动APP应用可以分发平台上架&#xf…

万字长文,梳理清楚Python多线程与多进程!

作者丨钱魏Way 来源 https://www.biaodianfu.com/python-multi-thread-and-multi-process.html 在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白。今天准备花一些时间,把里面的细节尽可能的梳理清楚。 …

Unity 之 Invoke 与InvokeRepeting 函数控制定时调用

文章目录 InvokeInvokeRepeating Invoke 在Unity游戏开发中,Invoke是一种用于延迟调用方法的方法。它允许你在一定的时间之后执行特定的函数或方法,通常用于执行定时任务,例如在一段时间后触发一个事件或在一定间隔内重复执行某个方法。Invo…

第68步 时间序列建模实战:ARIMA建模(Matlab)

基于WIN10的64位系统演示 一、写在前面 这一期,我们使用Matlab进行SARIMA模型的构建。 不同样,这里使用另一个数据: 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic …

65.Linux系统上库文件的生成与使用

目录 1.什么是库文件 2.静态库的生成与使用 2.1静态库的生成 2.2静态库的使用 3.共享库的生成和使用 3.1共享库的生成 3.2共享库的使用 4、静态库和共享库的区别 1.什么是库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /…

云服务器下如何部署Django项目详细操作步骤

前期本人完成了“编写你的第一个 Django 应用程序”,有了一个简单的项目代码,在本地window系统自测没问题了,接下来就想办法部署到服务器上,可以通过公网访问我们的Django项目。将开发机器上运行的开发版软件实际安装到服务器上进…

四川玖璨电子商务有限公司:抖店代运营

抖店代运营是一种新兴的电商服务模式,通过专业团队全程管理店铺运营,帮助商家快速扩大销售规模。抖店代运营的出现,为很多创业者和传统实体店提供了一个转型升级的机会。 抖店代运营首先需要了解抖音这个平台的特点和用户群体,根…

史上最详细的Python安装教程,小白建议收藏!

前言:Hello大家好,我是小哥谈。Python是一种高级、通用、解释型的编程语言,由Guido van Rossum于1989年开始设计,1991年首次发布。它以简洁易读的语法而著称,并且强调代码的可读性和简洁性,使得程序员能够更…

出版行业常用软件系统开发

出版行业使用多种软件系统来支持各种出版任务,包括编辑、排版、制作、销售和管理。以下是出版行业中常用的一些软件系统以及它们各自的主要功能,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

【Java】传输层协议TCP

传输层协议TCP TCP报文格式首部长度保留位32位序列号和32位确认应答号标记ACKSYNFINRSTURGPSH 16位窗口大小16位校验和16位紧急指针选项 TCP特点可靠传输实现机制-确认应答超时重传连接管理机制三次握手四次挥手特殊情况 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘…

Java网络编程( 一 )数据如何在网络上传输

数据如何在网络上传输 网络发展背景发送端和接收端网络协议分层封装 & 分用封装:分用: 传输补充(数据链路层(以太网)):ARP协议 网络发展背景 单机阶段—>局域网阶段—>广域网阶段—&…

Leetcode129. 求根到叶子节点数字之和

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶子节点的路径 1 ->…

基于v-md-editor的在线文档编辑实现

概述 前面的文章讲到了基于语雀的在线文档编辑器的实现,在本文,将基于v-md-editor实现在线文档的编辑。 实现后效果 实现 说明:本文是基于Vue3实现的,实现了:1.Markdown的在线编辑和预览;2. 文件的上传和…