数据量不小,不能全量存储, 数据缓慢变化的维度数据

拉链表的建表语句--全量表 通过有效起始时间<=时间<=有效结束时间来获取维度的全量切片数据

建表语句

drop table if exists dwd_dim_user_info_his;

create external table dwd_dim_user_info_his(

`id` string COMMENT '用户 id',

`name` string COMMENT '姓名',

`birthday` string COMMENT '生日',

`gender` string COMMENT '性别',

`email` string COMMENT '邮箱',

`user_level` string COMMENT '用户等级',

`create_time` string COMMENT '创建时间',

`operate_time` string COMMENT '操作时间',

`start_date` string COMMENT '有效开始日期',

`end_date` string COMMENT '有效结束日期'

) COMMENT '用户拉链表'

stored as parquet

location '/warehouse/gmall/dwd/dwd_dim_user_info_his/'

tblproperties ("parquet.compression"="lzo");

已有的一些数据表

drop table if exists ods_user_info;

create external table ods_user_info(

`id` string COMMENT '用户 id',

`name` string COMMENT '姓名',

`birthday` string COMMENT '生日',

`gender` string COMMENT '性别',

`email` string COMMENT '邮箱',

`user_level` string COMMENT '用户等级',

`create_time` string COMMENT '创建时间',

`operate_time` string COMMENT '操作时间'

) COMMENT '用户表'

PARTITIONED BY (`dt` string)

row format delimited fields terminated by '\t'

STORED AS

INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'

OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

location '/warehouse/gmall/ods/ods_user_info/';

数据示例:

20200101ods数据

id create_time operate_time

1 20200101 20200101

20200102 ods数据,产生修改的数据

1 20200101 20200102

20200103 ods数据,产生修改的数据

1 20200101 20200103

2 20200103 20200103

20200101拉链表

1 20200101 9999-99-99

20200102拉链表数据

1 20200101 20200101

1 20200102 9999-99-99

20200103拉链表数据

1 20200101 20200101

1 20200102 20200102

1 20200103 9999-99-99

2 20200103 9999-99-99

步骤一:初始化拉链表(以某一天为基准日期,这一天的数据都当成是新增数据)

select

id,

name,

birthday,

gender,

email,

user_level,

create_time,

operate_time,

'20200101' as start_date,

'9999-99-99' as end_date

from

ods_user_info

where

dt = '20200101'

步骤二:制作当日变动数据(新增、修改)

insert overwrite table dwd_dim_user_info_his_tmp --先导入临时表。再通过临时表导入正式表

select

user_his.id,

user_his.name,

user_his.birthday,

user_his.gender,

user_his.email,

user_his.user_level,

user_his.create_time,

user_his.operate_time,

user_his.start_date,

if(

update_user.end_date is not null

and user_his.end_date = '9999-99-99',

'20200101',

user_his.end_date

) as end_date

from

(

select

id,

name,

birthday,

gender,

email,

user_level,

create_time,

operate_time,

start_date,

end_date

from

dwd_dim_user_info_his

where

dt = '20200101'

) user_his

left join (

select

id,

name,

birthday,

gender,

email,

user_level,

from

ods_user_info

where

dt = '20200102'

) update_user on user_his.id = update_user.id

union all

select

id,

name,

birthday,

gender,

email,

user_level,

create_time,

operate_time,

'20200102' as start_date,

'9999-99-99' as end_date

from

ods_user_info

where

dt = '20200102'

拉链式存储_用户维度表(拉链表的方式存储)相关推荐

  1. 用户维度表与商店维度表

    一.加载用户数据至用户维度表 1.打开Kettle工具,创建转换 使用Kettle工具,创建一个转换load_dim_customer,并添加表输入控件.映射控件.字段选择控件.值映射控件.维度查询/ ...

  2. 加载用户维度表与商店维度表

    一.加载用户数据至用户维度表 1.打开Kettle工具,创建转换 2.配置表输入控件 3.双击"表输入2"进行配置   4.新建一个子转换并命名 5.配置"映射输入规范& ...

  3. (35)用户维度表(拉链表)

    用户表中的数据每日既有可能新增,也有可能修改,但修改频率并不高,属于缓慢变化 维度,此处采用拉链表存储用户维度数据. 1 )什么是拉链表 2)为什么要做拉链表 3)拉链表形成过程 4)拉链表制作过程图 ...

  4. 企业实战03:Oracle数据库_用户和表空间

    Oracle数据库专栏 命令后面可以不加;分号 SQL语句后面一定要加;分号 文章目录 用户和表空间 2-1 使用系统用户登录Oracle 系统用户 2-2 Oracle用户和表空间之查看登录用户 2 ...

  5. mysql 用户签到表设计_用户签到表的设计思路与数据库实现

    签到做为,一个促进用户粘性的手段已经很成熟了. 这里说下,个人的一些设计表思路 添加用户配置表.主键关联User表,即可. CREATE TABLE `cft_user_signin` ( `id` ...

  6. hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通 ...

  7. hql取满足条件最新一条记录_数据仓库怎么做拉链表记录数据变化情况,看看这篇文章 就明白了...

    小文老师给你讲解数据仓库的ETL拉链算法,通过这篇文档,让你快速了解数据拉链. 一 首先我们先来看下,什么是拉链?在数据仓库中,拉链就是记录数据在某一时间区间内的状态以及数据在某一时间点上的数据变化的 ...

  8. 利用双向循环链表实现长整数的存储_重学数据结构之链表篇

    本文是重新数据结构系列文章的第二篇,本文和大家一起探讨链表的相关知识. 链表是怎么样的数据结构 链表,不需要连续的内存空间,通过"指针(引用)"将一组零散的内存块串联起来的数据结构 ...

  9. 大数据_Hbase-原理说明_大数据存储_垂直拆表_水平拆表_动态列扩展---Hbase工作笔记0003

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说一下Hbase的原理. 咱们首先来看一张表 比如这个时候我来登录,其实我只需要知道id ...

最新文章

  1. 表达式树 java_表达树—构建表达式树、获取表达式(二)
  2. Github Pages页面重定向到新网址,实现域名跳转
  3. VR Cinema 来了!未来的影院也许是酱紫滴
  4. ssh连接出现:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  5. 异构SOA系统架构之Asp.net实现(兼容dubbo)
  6. linux虚拟环境tmux,关于在Linux系统中如何把tmux和vim打造成IDE的讲解
  7. mysql 超时连接错误码_mysql链接超时错误
  8. 大多数计算机有几个cpu,多处理器分配
  9. Amazon Alexa系列介绍(1)--综述
  10. 营销大师马斯克又发话了:芯片短缺不要怕,明年有望可解决
  11. 人与自然超越彩虹-下
  12. Python中的数值运算与逻辑运算
  13. 【读书】迟子建《额尔古纳河右岸》 摘录
  14. Cmn组合数c语言,计算并输出组合数Cmn……不会打……要求递归……谢谢
  15. 24点计算器c语言源代码,萌新求助!!24点游戏计算器
  16. im2col函数实现超级详细解释
  17. 【三维目标检测】VoxelNet(二):数据处理
  18. PE工具制作/装机U盘制作
  19. 第三方登录用户信息表设计
  20. USB答题卡识别主界面Demo

热门文章

  1. C++ 函数重载的实现原理
  2. 2019.4.26今日任务
  3. CentOS通过yum安装高版本gcc
  4. (5)Linux进程调度-CFS调度器
  5. 笔记:网络管理与检测命令
  6. java如何配置maven路径_如何配置Eclipse构建路径以使用Maven依赖项?
  7. echarts年龄饼图_解决echarts饼图显示百分比,和显示内容字体及大小
  8. 用友加密狗显示停止服务器,插上加密狗打开用友,显示下图,请问如何解决问题...
  9. python爬虫怎么写多线程_Python爬虫【第3篇】【多线程】
  10. Hadoop单机和伪分布式环境搭建