精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

漫談數據倉庫之拉鏈表(原理、設計以及在Hive中的實現)

大數據 數據倉庫
本文將會談一談在數據倉庫中拉鏈表相關的內容,包括它的原理、設計、以及在我們大數據場景下的實現方式。

0x00 前言

本文將會談一談在數據倉庫中拉鏈表相關的內容,包括它的原理、設計、以及在我們大數據場景下的實現方式。

[[191222]]

全文由下面幾個部分組成:

  1. 先分享一下拉鏈表的用途、什么是拉鏈表。
  2. 通過一些小的使用場景來對拉鏈表做近一步的闡釋,以及拉鏈表和常用的切片表的區別。
  3. 舉一個具體的應用場景,來設計并實現一份拉鏈表,***并通過一些例子說明如何使用我們設計的這張表(因為現在Hive的大規模使用,我們會以Hive場景下的設計為例)。
  4. 分析一下拉鏈表的優缺點,并對前面的提到的一些內容進行補充說明,比如說拉鏈表和流水表的區別。

0x01 什么是拉鏈表

拉鏈表是針對數據倉庫設計中表存儲數據的方式而定義的,顧名思義,所謂拉鏈,就是記錄歷史。記錄一個事物從開始,一直到當前狀態的所有變化的信息。

我們先看一個示例,這就是一張拉鏈表,存儲的是用戶的最基本信息以及每條記錄的生命周期。我們可以使用這張表拿到***的當天的***數據以及之前的歷史數據。

我們暫且不對這張表做細致的講解,后文會專門來闡述怎么來設計、實現和使用它。

拉鏈表的使用場景

在數據倉庫的數據模型設計過程中,經常會遇到下面這種表的設計:

  1. 有一些表的數據量很大,比如一張用戶表,大約10億條記錄,50個字段,這種表,即使使用ORC壓縮,單張表的存儲也會超過100G,在HDFS使用雙備份或者三備份的話就更大一些。
  2. 表中的部分字段會被update更新操作,如用戶聯系方式,產品的描述信息,訂單的狀態等等。
  3. 需要查看某一個時間點或者時間段的歷史快照信息,比如,查看某一個訂單在歷史某一個時間點的狀態。
  4. 表中的記錄變化的比例和頻率不是很大,比如,總共有10億的用戶,每天新增和發生變化的有200萬左右,變化的比例占的很小。

那么對于這種表我該如何設計呢?下面有幾種方案可選:

  1. 方案一:每天只留***的一份,比如我們每天用Sqoop抽取***的一份全量數據到Hive中。
  2. 方案二:每天保留一份全量的切片數據。
  3. 方案三:使用拉鏈表。

為什么使用拉鏈表

現在我們對前面提到的三種進行逐個的分析。

方案一

這種方案就不用多說了,實現起來很簡單,每天drop掉前一天的數據,重新抽一份***的。

優點很明顯,節省空間,一些普通的使用也很方便,不用在選擇表的時候加一個時間分區什么的。

缺點同樣明顯,沒有歷史數據,先翻翻舊賬只能通過其它方式,比如從流水表里面抽。

方案二

每天一份全量的切片是一種比較穩妥的方案,而且歷史數據也在。

缺點就是存儲空間占用量太大太大了,如果對這邊表每天都保留一份全量,那么每次全量中會保存很多不變的信息,對存儲是極大的浪費,這點我感觸還是很深的……

當然我們也可以做一些取舍,比如只保留近一個月的數據?但是,需求是無恥的,數據的生命周期不是我們能完全左右的。

拉鏈表

拉鏈表在使用上基本兼顧了我們的需求。

首先它在空間上做了一個取舍,雖說不像方案一那樣占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是萬分之一。

其實它能滿足方案二所能滿足的需求,既能獲取***的數據,也能添加篩選條件也獲取歷史的數據。

所以我們還是很有必要來使用拉鏈表的。

0x02 拉鏈表的設計和實現

如何設計一張拉鏈表

下面我們來舉個栗子詳細看一下拉鏈表。

我們先看一下在Mysql關系型數據庫里的user表中信息變化。

在2017-01-01這一天表中的數據是:

在2017-01-02這一天表中的數據是, 用戶002和004資料進行了修改,005是新增用戶:

在2017-01-03這一天表中的數據是, 用戶004和005資料進行了修改,006是新增用戶:

如果在數據倉庫中設計成歷史拉鏈表保存該表,則會有下面這樣一張表,這是***一天(即2017-01-03)的數據:

說明

  • t_start_date表示該條記錄的生命周期開始時間,t_end_date表示該條記錄的生命周期結束時間。
  • t_end_date = ‘9999-12-31’表示該條記錄目前處于有效狀態。
  • 如果查詢當前所有有效的記錄,則select * from user where t_end_date = ‘9999-12-31’。
  • 如果查詢2017-01-02的歷史快照,則select from user where t_start_date <= ‘2017-01-02’ and t_end_date >= ‘2017-01-02’。(*此處要好好理解,是拉鏈表比較重要的一塊。**)

在Hive中實現拉鏈表

在現在的大數據場景下,大部分的公司都會選擇以Hdfs和Hive為主的數據倉庫架構。目前的Hdfs版本來講,其文件系統中的文件是不能做改變的,也就是說Hive的表智能進行刪除和添加操作,而不能進行update。基于這個前提,我們來實現拉鏈表。

還是以上面的用戶表為例,我們要實現用戶的拉鏈表。在實現它之前,我們需要先確定一下我們有哪些數據源可以用。

  1. 我們需要一張ODS層的用戶全量表。至少需要用它來初始化。
  2. 每日的用戶更新表。

而且我們要確定拉鏈表的時間粒度,比如說拉鏈表每天只取一個狀態,也就是說如果一天有3個狀態變更,我們只取***一個狀態,這種天粒度的表其實已經能解決大部分的問題了。

另外,補充一下每日的用戶更新表該怎么獲取,據筆者的經驗,有3種方式拿到或者間接拿到每日的用戶增量,因為它比較重要,所以詳細說明:

  1. 我們可以監聽Mysql數據的變化,比如說用Canal,***合并每日的變化,獲取到***的一個狀態。
  2. 假設我們每天都會獲得一份切片數據,我們可以通過取兩天切片數據的不同來作為每日更新表,這種情況下我們可以對所有的字段先進行concat,再取md5,這樣就ok了。
  3. 流水表!有每日的變更流水表。

ods層的user表

現在我們來看一下我們ods層的用戶資料切片表的結構:

  1. CREATE EXTERNAL TABLE ods.user ( 
  2.   user_num STRING COMMENT '用戶編號'
  3.   mobile STRING COMMENT '手機號碼'
  4.   reg_date STRING COMMENT '注冊日期' 
  5. COMMENT '用戶資料表' 
  6. PARTITIONED BY (dt string) 
  7. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
  8. STORED AS ORC 
  9. LOCATION '/ods/user'

ods層的user_update表

然后我們還需要一張用戶每日更新表,前面已經分析過該如果得到這張表,現在我們假設它已經存在。

  1. CREATE EXTERNAL TABLE ods.user_update ( 
  2.   user_num STRING COMMENT '用戶編號'
  3.   mobile STRING COMMENT '手機號碼'
  4.   reg_date STRING COMMENT '注冊日期' 
  5. COMMENT '每日用戶資料更新表' 
  6. PARTITIONED BY (dt string) 
  7. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
  8. STORED AS ORC 
  9. LOCATION '/ods/user_update'

拉鏈表

現在我們創建一張拉鏈表:

  1. CREATE EXTERNAL TABLE dws.user_his ( 
  2.   user_num STRING COMMENT '用戶編號'
  3.   mobile STRING COMMENT '手機號碼'
  4.   reg_date STRING COMMENT '用戶編號'
  5.   t_start_date , 
  6.   t_end_date 
  7. COMMENT '用戶資料拉鏈表' 
  8. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
  9. STORED AS ORC 
  10. LOCATION '/dws/user_his'

實現sql語句

然后初始化的sql就不寫了,其實就相當于是拿一天的ods層用戶表過來就行,我們寫一下每日的更新語句。

現在我們假設我們已經已經初始化了2017-01-01的日期,然后需要更新2017-01-02那一天的數據,我們有了下面的Sql。

然后把兩個日期設置為變量就可以了。

  1. INSERT OVERWRITE TABLE dws.user_his 
  2. SELECT * FROM 
  3.     SELECT A.user_num, 
  4.            A.mobile, 
  5.            A.reg_date, 
  6.            A.t_start_time, 
  7.            CASE 
  8.                 WHEN A.t_end_time = '9999-12-31' AND B.user_num IS NOT NULL THEN '2017-01-01' 
  9.                 ELSE A.t_end_time 
  10.            END AS t_end_time 
  11.     FROM dws.user_his AS A 
  12.     LEFT JOIN ods.user_update AS B 
  13.     ON A.user_num = B.user_num 
  14. UNION 
  15.     SELECT C.user_num, 
  16.            C.mobile, 
  17.            C.reg_date, 
  18.            '2017-01-02' AS t_start_time, 
  19.            '9999-12-31' AS t_end_time 
  20.     FROM ods.user_update AS C 
  21. AS T 

0x03 補充

好了,我們分析了拉鏈表的原理、設計思路、并且在Hive環境下實現了一份拉鏈表,下面對拉鏈表做一些小的補充。

拉鏈表和流水表

流水表存放的是一個用戶的變更記錄,比如在一張流水表中,一天的數據中,會存放一個用戶的每條修改記錄,但是在拉鏈表中只有一條記錄。

這是拉鏈表設計時需要注意的一個粒度問題。我們當然也可以設置的粒度更小一些,一般按天就足夠。

查詢性能

拉鏈表當然也會遇到查詢性能的問題,比如說我們存放了5年的拉鏈數據,那么這張表勢必會比較大,當查詢的時候性能就比較低了,個人認為兩個思路來解決:

  1. 在一些查詢引擎中,我們對start_date和end_date做索引,這樣能提高不少性能。
  2. 保留部分歷史數據,比如說我們一張表里面存放全量的拉鏈表數據,然后再對外暴露一張只提供近3個月數據的拉鏈表。

0xFF 總結

我們在這篇文章里面詳細地分享了一下和拉鏈表相關的知識點,但是仍然會有一會遺漏。歡迎交流。

在后面的使用中又有了一些心得,補充進來:

  1. 使用拉鏈表的時候可以不加t_end_date,即失效日期,但是加上之后,能優化很多查詢。
  2. 可以加上當前行狀態標識,能快速定位到當前狀態。
  3. 在拉鏈表的設計中可以加一些內容,因為我們每天保存一個狀態,如果我們在這個狀態里面加一個字段,比如如當天修改次數,那么拉鏈表的作用就會更大。
責任編輯:武曉燕 來源: 36大數據
相關推薦

2017-10-20 12:59:05

數據分層數據建設數據倉庫

2021-09-01 10:03:44

數據倉庫云數據倉庫數據庫

2021-01-08 05:27:49

數據庫拉鏈表存儲

2016-12-21 12:46:47

數據倉庫SQLHive

2011-05-13 14:17:27

智能數據倉庫

2013-03-20 16:23:53

數據清洗

2021-04-15 07:40:44

數據倉庫Hive環境搭建

2009-01-18 15:48:31

數據倉庫數據存儲OLTP

2020-01-03 09:40:13

大數據數據倉庫分層

2017-11-24 17:20:37

數據庫數據倉庫讀寫分離

2023-12-01 14:55:32

數據網格數據湖

2011-07-15 10:28:18

OLTP數據倉庫

2023-08-14 16:56:53

2017-03-16 20:00:17

Kafka設計原理達觀產品

2018-03-15 08:50:46

Hive-數據存儲

2022-12-13 09:54:52

數據倉庫

2022-02-18 09:02:04

數據倉庫治理

2021-10-27 11:33:31

數據倉庫架構

2017-02-28 09:21:56

HadoopHive數據倉庫

2018-03-20 09:36:57

數據倉庫數據存儲知識
點贊
收藏

51CTO技術棧公眾號

www.久久av.com| 亚洲 日韩 国产第一区| 欧美三级韩国三级日本三斤在线观看| 群体交乱之放荡娇妻一区二区 | 日本在线观看一区| 国产又黄又粗又硬| 国模 一区 二区 三区| 亚洲女同性videos| 日本特黄在线观看| 欧美自拍电影| 亚洲永久免费av| 欧美区高清在线| 国产成人精品免费看视频| 蜜桃视频一区| 色综合男人天堂| 91麻豆制片厂| 亚洲色图美女| 精品国产乱码久久久久久1区2区| 凹凸日日摸日日碰夜夜爽1| 呦呦在线视频| 国产精品丝袜黑色高跟| 久久久精品国产一区二区三区| 一级做a爱片久久毛片| 亚洲欧美久久| 欧美黄网免费在线观看| 日本 欧美 国产| 亚洲女娇小黑人粗硬| 精品伦理精品一区| 国产精欧美一区二区三区白种人| 精品国产免费人成网站| 亚洲国产精品久久久男人的天堂 | 日韩欧美高清视频| 黄色一级片黄色| 免费观看在线黄色网| 久久精品这里都是精品| 久久国产一区二区| 免费看日韩av| 国产激情精品久久久第一区二区| 国产精品永久在线| av片免费观看| 国产亚洲成人一区| 欧美日韩国产第一页| 无码人妻精品中文字幕 | 亚洲日本中文字幕免费在线不卡| 99久久久无码国产精品性波多| 美女视频一区| 欧美日韩三级一区二区| 男人天堂成人在线| 亚洲1234区| 欧美性生交大片免费| 日本精品一区在线观看| 美女露胸视频在线观看| 亚洲高清在线视频| 蜜臀av无码一区二区三区| 国产乱码在线| 亚洲福利视频一区二区| 久青草视频在线播放| 免费在线观看的电影网站| 亚洲精品一二三| 亚洲国产一二三精品无码| 97caopron在线视频| 亚洲精品国产无天堂网2021| 国产精品免费看久久久无码| 男人天堂亚洲天堂 | 久久夜色精品国产噜噜亚洲av| 亚洲男女自偷自拍| 国产精品色婷婷视频| 一本色道久久综合熟妇| 九一久久久久久| 91在线精品观看| 天堂中文网在线| 久久综合网色—综合色88| 色姑娘综合av| h网站久久久| 亚洲超丰满肉感bbw| 免费黄色福利视频| а√天堂资源国产精品| 日韩一区二区三区四区| 在线看黄色的网站| 久久99视频| 久久精品最新地址| 日韩三级免费看| 日本中文一区二区三区| 亚洲一区二区日本| 日本美女一级视频| 国产精品美女久久福利网站| 久久久天堂国产精品| 欧美巨大丰满猛性社交| 欧美日韩和欧美的一区二区| 特级黄色片视频| 牲欧美videos精品| 久久精品99久久久香蕉| 日韩少妇裸体做爰视频| 免费成人小视频| 国产日韩亚洲精品| 日本综合在线| 狠狠躁夜夜躁人人爽超碰91| 色综合色综合色综合色综合| 99国产精品免费网站| 亚洲香蕉av在线一区二区三区| 日韩高清dvd碟片| 香蕉国产精品偷在线观看不卡| 国产精品一区二区三区久久久| 亚洲精品免费在线观看视频| 久久精品夜夜夜夜久久| 久久久久久久久久久综合| 高清不卡亚洲| 精品国内片67194| 国产又粗又猛又爽又黄的视频四季 | 久久爱.com| 亚洲精品国产美女| 97成人资源站| 蜜臀av一区二区在线免费观看| 高清一区二区三区视频| 日本激情在线观看| 欧美日韩在线视频观看| 女同性αv亚洲女同志| 欧美一区二区三| 欧美资源在线观看| 丰满人妻熟女aⅴ一区| 国产精品福利电影一区二区三区四区| 国精产品一区一区三区视频| 国产一区二区三区精品在线观看 | 偷拍夫妻性生活| 亚洲国产mv| 99在线影院| 免费av在线网址| 欧美日韩在线三级| 亚洲理论片在线观看| 99精品视频免费观看| 成人毛片网站| 青草在线视频| 日韩限制级电影在线观看| 午夜精品久久久久99蜜桃最新版| 日本中文字幕一区| 日韩欧美亚洲区| 欧美日韩大片| 亚洲男人天堂久| 波多野结衣视频网站| www.欧美.com| a级黄色一级片| 欧美亚洲色图校园春色| 国语自产精品视频在线看| 丰满少妇高潮在线观看| 亚洲精品ww久久久久久p站| 91aaa精品| 欧美私人啪啪vps| 北条麻妃高清一区| а_天堂中文在线| 亚洲变态欧美另类捆绑| 日本特黄特色aaa大片免费| 成人免费高清在线| 亚洲 自拍 另类小说综合图区| 国产精品网在线观看| 97成人精品区在线播放| 亚洲色图狠狠干| 欧美性xxxx极品hd满灌| 成都免费高清电影| 日产国产欧美视频一区精品| 一区二区国产日产| 国内精品视频| 久久久久久亚洲精品| 亚洲av成人无码久久精品老人 | heyzo久久| 国产精品亚洲视频在线观看| 亚洲成人三级| 日韩欧美亚洲国产另类| 男人天堂中文字幕| 92国产精品观看| 熟女人妇 成熟妇女系列视频| 欧美久久精品一级c片| 成人黄色免费在线观看| 色www永久免费视频首页在线| 亚洲高清福利视频| 超碰在线观看91| 亚洲天堂久久久久久久| 国产国语老龄妇女a片| 三级不卡在线观看| 男人天堂成人网| 欧美久久精品| 国产情人节一区| 波多野结衣精品| 最近2019中文免费高清视频观看www99 | 热久久久久久久| 亚洲爆乳无码精品aaa片蜜桃| 女同一区二区三区| 国产色综合天天综合网| www.综合网.com| 中文字幕亚洲欧美日韩高清| 亚洲精品国产精品乱码不卡| 91福利在线看| 国产真人真事毛片| 日本一区二区视频在线| 涩视频在线观看| 美女在线视频一区| www在线观看免费| 色琪琪久久se色| 久久66热这里只有精品| 日本午夜精品久久久久| 97热在线精品视频在线观看| 免费在线看黄网站| 日韩精品中文字幕有码专区| 国产xxxxxx| 欧美性三三影院| 少妇一级淫片免费放中国| 亚洲视频在线一区二区| 波多野结衣一本| 成人小视频免费在线观看| 天天干天天草天天| 亚洲欧美卡通另类91av| 日本天堂免费a| 日韩久久久久| 久久精品国产一区二区三区不卡| 国产精品久久久久久久久久辛辛 | 久久久久999| 久草在现在线| 亚洲精品黄网在线观看| 精品久久久无码中文字幕| 精品视频1区2区| 国产精品成人无码| 日韩欧美精品网址| 精品处破女学生| 亚洲免费av高清| 亚洲综合久久av一区二区三区| 91在线一区二区| 娇妻高潮浓精白浆xxⅹ| 国产成人免费视频精品含羞草妖精| 亚州精品一二三区| 久久天堂成人| 久久精品国产精品亚洲色婷婷| 在线观看不卡| 国产资源在线免费观看| 亚洲欧美日韩高清在线| 最新中文字幕久久| 999国产精品永久免费视频app| 日韩国产伦理| heyzo久久| 亚洲最新在线| 99久久www免费| 亚洲三区视频| 99国产**精品****| 欧美爱爱视频网站| 久久精品亚洲欧美日韩精品中文字幕| 亚洲欧洲一二三| 日韩av片子| 亚洲视频电影| 91精品秘密在线观看| 影音先锋男人的网站| 午夜欧美在线| wwwjizzjizzcom| 欧美人成在线| 黄色一级在线视频| 亚洲免费综合| 日韩不卡一二三| 精品一区二区三区免费观看| 深夜做爰性大片蜜桃| 国产盗摄精品一区二区三区在线 | 国产精品nxnn| 久久精品国产美女| 精品国产成人| www亚洲国产| 欧美私人啪啪vps| 国产91xxx| 日韩电影一二三区| 五月婷婷之婷婷| 国产不卡在线视频| 波多野结衣福利| 日本一区二区高清| wwwav国产| 欧美日韩精品中文字幕| 免费在线不卡av| 日韩午夜激情电影| 欧美视频免费一区二区三区| 夜夜躁日日躁狠狠久久88av | 亚洲精品一二三区| 成人午夜视频精品一区| 在线观看国产精品网站| 国产视频第一页| 精品国产乱码久久久久久浪潮| 黄色在线小视频| 久久视频在线播放| 欧美私密网站| 成人网在线免费看| 日韩欧美美女在线观看| 一区二区日本伦理| 激情欧美一区二区三区| 日日噜噜噜噜久久久精品毛片| 国产精品18久久久久久vr| 久久精品成人av| 一区二区高清视频在线观看| 精品不卡一区二区| 日韩限制级电影在线观看| 精品999视频| 色综合五月天导航| 亚洲精品555| 国产欧美日韩在线播放| 国产精品国产三级国产在线观看| 久久亚洲中文字幕无码| 久草在线在线精品观看| 波多野结衣a v在线| 一区二区三区波多野结衣在线观看| 日本视频网站在线观看| 精品日韩欧美一区二区| av在线播放网站| 2019中文字幕在线观看| 欧美1区2区3| 亚洲一区三区视频在线观看| 国产精品乱看| 亚洲国产精品狼友在线观看| 中文字幕一区三区| 波多野结衣 久久| 亚洲韩国日本中文字幕| 羞羞网站在线看| 91视频免费在线| 成人直播大秀| 97av视频在线观看| 成人黄色av网站在线| 久久久久久久久毛片| 欧美情侣在线播放| 国产h视频在线观看| 欧美亚洲另类制服自拍| 懂色av一区二区| 4444亚洲人成无码网在线观看| 国模娜娜一区二区三区| 69xxx免费| 欧美日韩在线一区二区| jizz日韩| 国产精品男人的天堂| 精品视频免费| 亚洲五月天综合| 久久久99久久| 青青草视频在线观看免费| 亚洲欧美一区二区精品久久久| 免费成人在线电影| 久久国产精品 国产精品| 99riav1国产精品视频| 亚洲av无码一区东京热久久| 亚洲一二三四久久| 亚洲国产中文字幕在线| 欧美国产日韩一区二区| 中文久久电影小说| 8x8x华人在线| 国产成人精品aa毛片| 久久97人妻无码一区二区三区| 日韩一区国产二区欧美三区| caopen在线视频| 99视频在线| 999亚洲国产精| 一区二区三区伦理片| 在线亚洲精品福利网址导航| av大片在线看| 91在线无精精品一区二区| 欧美激情综合| www.com日本| 色婷婷综合久久久中文字幕| 黄色av免费在线看| 国产欧美精品va在线观看| 欧美gay男男猛男无套| 韩国一区二区在线播放| 亚洲精品乱码久久久久久黑人| 亚洲伦理在线观看| 欧美亚洲成人网| 成人婷婷网色偷偷亚洲男人的天堂| 三级视频中文字幕| 亚洲精品中文字幕在线观看| 成人久久久精品国产乱码一区二区 | 亚洲一区二区三区sesese| 日韩国产一区二区| 在线a免费观看| 亚洲3atv精品一区二区三区| 丝袜视频国产在线播放| 国产成人精品国内自产拍免费看| 日韩久久电影| 女同性αv亚洲女同志| 日韩欧美精品网址| 国产在线激情视频| 国产a一区二区| 亚洲自啪免费| 三上悠亚在线观看视频| 精品国产成人系列| 日韩精品三区| 国产成人精品免费看在线播放 | 国产精品区免费视频| 日韩主播视频在线| 免费在线观看日韩| 亚洲欧美日韩精品久久亚洲区 | 69av.com| 日韩毛片在线观看| 国产精品毛片无码| 成人av一级片| √…a在线天堂一区| 日本激情一区二区| 成人精品久久久| 国产精品亚洲欧美| 国产性生活大片| 亚洲色图av在线| av在线亚洲色图| 在线能看的av网站| 色综合天天综合网天天看片| 99热国产在线中文|