網(wǎng)站優(yōu)化檢測百度網(wǎng)頁推廣怎么做
數(shù)據(jù)倉庫是一個面向主題的、集成的、非易失的、隨時間變化的,用來支持管理人員決策的數(shù)據(jù)集合,數(shù)據(jù)倉庫中包含了粒度化的企業(yè)數(shù)據(jù)。
數(shù)據(jù)倉庫的主要特征是:主題性、集成性、非易失性、時變性。
數(shù)據(jù)倉庫的體系結(jié)構(gòu)通常包含4個層次:數(shù)據(jù)源、數(shù)據(jù)存儲和管理、數(shù)據(jù)服務(wù)以及數(shù)據(jù)應(yīng)用。
- 數(shù)據(jù)源:數(shù)據(jù)倉庫的數(shù)據(jù)來源,包括外部數(shù)據(jù)、現(xiàn)有業(yè)務(wù)系統(tǒng)和文檔資料等。
- 數(shù)據(jù)存儲和管理:為數(shù)據(jù)提供的存儲和管理,包括數(shù)據(jù)倉庫、數(shù)據(jù)集市、數(shù)據(jù)倉庫監(jiān)視、運行與維護工具和元數(shù)據(jù)管理等。
- 數(shù)據(jù)服務(wù):為前端工具和應(yīng)用提供數(shù)據(jù)服務(wù),包括直接從數(shù)據(jù)倉庫中獲取數(shù)據(jù)提供給前端使用,或者通過OLAP服務(wù)器為前端應(yīng)用提供更為復(fù)雜的數(shù)據(jù)服務(wù)。
- 數(shù)據(jù)應(yīng)用:直接面向最終用戶,包括數(shù)據(jù)工具、自由報表工具、數(shù)據(jù)分析工具、數(shù)據(jù)挖掘工具和各類應(yīng)用系統(tǒng)。
1.概述
Hive是建立在Hadoop之上的一種數(shù)倉工具。該工具的功能是將結(jié)構(gòu)化、半結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,基于數(shù)據(jù)庫表,提供了一種類似SQL的查詢模型(HQL),用于訪問和分析存儲在Hadoop文件中的大型數(shù)據(jù)集。
??Hive本身并不具備存儲功能,其核心是將HQL轉(zhuǎn)換為MapReduce程序,然后將程序提交到Hadoop集群中執(zhí)行。
2.數(shù)據(jù)模型
①庫
??MySQL中默認數(shù)據(jù)庫是default,用戶可以創(chuàng)建不同的database,在database下也可以創(chuàng)建不同的表。Hive也可以分為不同的數(shù)據(jù)(倉)庫,和傳統(tǒng)數(shù)據(jù)庫保持一致。在傳統(tǒng)數(shù)倉中創(chuàng)建database。默認的數(shù)據(jù)庫也是default。Hive中的庫相當(dāng)于關(guān)系數(shù)據(jù)庫中的命名空間,它的作用是將用戶和數(shù)據(jù)庫的表進行隔離。
②表
??Hive中的表所對應(yīng)的數(shù)據(jù)是存儲在HDFS中,而表相關(guān)的元數(shù)據(jù)是存儲在關(guān)系數(shù)據(jù)庫中。Hive中的表分為內(nèi)部表和外部表兩種類型,兩者的區(qū)別在于數(shù)據(jù)的訪問和刪除:
內(nèi)部表的加載數(shù)據(jù)和創(chuàng)建表的過程是分開的,在加載數(shù)據(jù)時,實際數(shù)據(jù)會被移動到數(shù)倉目錄中,之后對數(shù)據(jù)的訪問是在數(shù)倉目錄實現(xiàn)。而外部表加載數(shù)據(jù)和創(chuàng)建表是同一個過程,對數(shù)據(jù)的訪問是讀取HDFS中的數(shù)據(jù);
內(nèi)部表刪除時,因為數(shù)據(jù)移動到了數(shù)倉目錄中,因此刪除表時,表中數(shù)據(jù)和元數(shù)據(jù)會被同時刪除。外部表因為數(shù)據(jù)還在HDFS中,刪除表時并不影響數(shù)據(jù)。
創(chuàng)建表時不做任何指定,默認創(chuàng)建的就是內(nèi)部表。想要創(chuàng)建外部表,則需要使用External進行修飾
③分區(qū)
??分區(qū)是一個優(yōu)化的手段,目的是減少全表掃描,提高查詢效率。在Hive中存儲的方式就是表的主目錄文件夾下的子文件夾,子文件夾的名字表示所定義的分區(qū)列名字。
④分桶
??分桶和分區(qū)的區(qū)別在于:分桶是針對數(shù)據(jù)文件本身進行拆分,根據(jù)表中字段(例如,編號ID)的值,經(jīng)過hash計算規(guī)則,將數(shù)據(jù)文件劃分成指定的若干個小文件。分桶后,HDFS中的數(shù)據(jù)文件會變?yōu)槎鄠€小文件。分桶的優(yōu)點是優(yōu)化join查詢和方便抽樣查詢。
3.HQL的執(zhí)行
Hive在執(zhí)行一條HQL語句時,會經(jīng)過以下步驟:
- 語法解析:Antlr定義SQL的語法規(guī)則,完成SQL詞法,語法解析,將SQL轉(zhuǎn)化為抽象語法樹AST Tree;
- 語義解析:遍歷AST Tree,抽象出查詢的基本組成單元QueryBlock;
- 生成邏輯執(zhí)行計劃:遍歷QueryBlock,翻譯為執(zhí)行操作樹OperatorTree;
- 優(yōu)化邏輯執(zhí)行計劃:邏輯層優(yōu)化器進行OperatorTree變換,合并不必要的ReduceSinkOperator,減少shuffle數(shù)據(jù)量;
- 生成物理執(zhí)行計劃:遍歷OperatorTree,翻譯為MapReduce任務(wù);
- 優(yōu)化物理執(zhí)行計劃:物理層優(yōu)化器進行MapReduce任務(wù)的變換,生成最終的執(zhí)行計劃。
參考:
https://datawhalechina.github.io/juicy-bigdata/#/ch07-Hive?id=_702-%e6%95%b0%e6%8d%ae%e4%bb%93%e5%ba%93%e6%a6%82%e5%bf%b5