大數據導論-思維、技術與應用-第7章-數據倉庫Hive課件_第1頁
大數據導論-思維、技術與應用-第7章-數據倉庫Hive課件_第2頁
大數據導論-思維、技術與應用-第7章-數據倉庫Hive課件_第3頁
大數據導論-思維、技術與應用-第7章-數據倉庫Hive課件_第4頁
大數據導論-思維、技術與應用-第7章-數據倉庫Hive課件_第5頁
已閱讀5頁,還剩95頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 大數據導論第七章CONTENTS目錄PART 01 數據倉庫概述PART 02 數據倉庫Hive概述PART 03 Hive和數據庫的比較PART 04 Hive的體系架構PART 05 Hive的工作流程PART 06 Hive數據類型PART 07 HiveQL:數據定義與操作PART 08 HiveQL:查詢PART 09 Hive模式設計PART 10 作業(yè)PART 01 數據倉庫概述數據倉庫是一個面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的數據集合,用于支持管理決策。數據倉庫的定義數據倉庫是一個面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的數據集合,用于支持管理決策。根據數據倉庫

2、概念的含義,數據倉庫擁有以下四個特點:面向主題集成的相對穩(wěn)定的反映歷史變化數據倉庫的定義面向主題 數據倉庫中的數據是按照一定的主題域進行組織。主題是一個抽象的概念,是指用戶使用數據倉庫進行決策時所關心的重點方面,一個主題通常與多個操作型信息系統(tǒng)相關。集成的 在數據倉庫系統(tǒng)中,無論何種數據源,無論是Access、SQL Server、MySQL還是Oracle,甚至是系統(tǒng)訪問日志中的數據,都會被統(tǒng)一裝入到同一個數據倉庫系統(tǒng)。數據倉庫的定義相對穩(wěn)定的 數據倉庫中的數據,一旦從數據源中存入,便不會再進行任何修改,只會在此基礎上進行進一步的分析處理。反映歷史變化 數據倉庫中的數據通常包含歷史信息,系統(tǒng)

3、記錄了企業(yè)從過去某一時點,如開始應用數據倉庫的時點,到目前的各個階段的信息。通過這些信息,可以對企業(yè)的發(fā)展歷程和未來趨勢做出定量分析和預測。數據倉庫與操作數據庫操作數據庫稱作聯(lián)機事務處理(OLTP)系統(tǒng),主要任務執(zhí)行聯(lián)機事務處理和查詢處理。數據倉庫系統(tǒng)即聯(lián)機分析處理(OLAP),在數據分析和決策支持方面為用戶或者機器學習提供服務。二者的主要區(qū)別在于五個大的方面:用戶系統(tǒng)的面向性數據內容數據庫設計視圖訪問模式數據倉庫與操作數據庫用戶系統(tǒng)的面向性:OLTP是面向客戶的,而OLAP是面向市場的;數據內容:OLTP主要是面向當前的業(yè)務,而OLAP是需要使用歷史數據的;數據庫設計:OLTP是根據實體關系

4、進行設計,而OLAP是面向主題進行設計的;視圖:OLTP是面向個別具體問題的,而OLAP是要面向整個企業(yè)全景的;訪問模式:OLTP是原子事務操作,而OLAP是只讀操作。數據倉庫的架構數據倉庫的架構主要由四層組成。數據源數據倉庫服務器OLAP服務器前端工具數據倉庫的架構數據源 是數據倉庫系統(tǒng)的基礎,是整個系統(tǒng)的數據源泉。通常包括企業(yè)內部信息和外部信息。數據倉庫服務器 是整個數據倉庫系統(tǒng)的核心。數據倉庫的真正關鍵是數據的存儲和管理。OLAP服務器 對分析需要的數據進行有效集成,按多維模型予以組織,以便進行多角度、多層次的分析,并發(fā)現趨勢。前端工具 主要包括各種報表工具、查詢工具、數據分析工具、數據

5、挖掘工具,以及各種基于數據倉庫或數據集市的應用開發(fā)工具。傳統(tǒng)數據倉庫的問題進入大數據時代,傳統(tǒng)架構的數據倉庫遇到了非常多的挑戰(zhàn)。傳統(tǒng)數據倉庫有如下幾個問題:無法滿足快速增長的海量數據存儲需求無法處理不同類型的數據傳統(tǒng)數據倉庫建立在關系型數據倉庫之上,計算和處理能力不足過去的數據庫沒有提供搜索和數據挖掘的能力,而這些需求已經是企業(yè)的剛需。PART 02 數據倉庫Hive概述Hive是基于Hadoop的數據倉庫,可對存儲在HDFS上的文件中的數據集進行數據整理、特殊查詢和分析處理,提供了類似于SQL語言的查詢語言HiveQL。數據倉庫Hive概述Hive是基于Hadoop的數據倉庫,可對存儲在HD

6、FS上的文件中的數據集進行數據整理、特殊查詢和分析處理,提供了類似于SQL語言的查詢語言HiveQL。Hive把HQL語句轉換成MapReduce任務后,采用批處理的方式對海量數據進行處理。但Hive不是一個數據庫。Hive不支持OLTP(聯(lián)機事務處理)所需的關鍵功能,而更接近成為一個OLAP(聯(lián)機分析)工具。PART 03 Hive和數據庫的比較Hive是基于Hadoop平臺的數據倉庫,與傳統(tǒng)的數據庫有著根本的差別。Hive與數據庫的比較查詢語言HQLSQL數據存儲位置HDFSRaw Device 或者 Local FS數據格式用戶定義系統(tǒng)決定數據更新不支持支持索引無有執(zhí)行MapReduce

7、Executor執(zhí)行延遲高低可擴展性高低數據規(guī)模大小Hive建立在Hadoop的分布式文件系統(tǒng)(HDFS)和MapReduce系統(tǒng)之上。PART 04 Hive的體系架構Hive的體系架構Hive的體系架構Hive體系架構的組件可以分為兩大類:服務端組件Driver組件Metastore組件Thrift服務客戶端組件CLIThrift客戶端WEB GUIHive的體系架構各組件作用如下:Driver組件 將用戶的HiveQL語句進行解析、編譯優(yōu)化,生成執(zhí)行計劃,然后調用底層的MapReduce計算框架。Hive驅動程序把元數據存儲在數據庫中。Metastore組件 存儲Hive的元數據。Hiv

8、e支持把Metastore服務獨立出來,安裝到遠程的服務器集群里,從而解耦Hive 服務和Metastore服務,保證Hive運行的可靠性。Hive的體系架構各組件作用如下:Thrift服務 用來進行可擴展且跨語言的服務的開發(fā),Hive集成了該服務,能讓不同的編程語言調用Hive的接口。CLI Command Line Interface,命令行接口。架構圖的最上面包括一個命令行接口(CLI),可以在Linux終端窗口向Hive驅動程序直接發(fā)出查詢或管理命令。Hive的體系架構各組件作用如下:Thrift客戶端 Hive架構的許多客戶端接口是建立在Thrift客戶端之上,包括JDBC和ODBC

9、接口。WEB GUI客戶端提供了通過網頁的方式訪問Hive所提供的服務。這個接口對應Hive的HWI組件(Hive Web Interface)。Hive的主要工作就是把用戶提交的HQL查詢轉換成MapReduce程序,并提交給Hadoop的MapReduce計算框架執(zhí)行,最后再把執(zhí)行結果返回給用戶。PART 05 Hive的工作流程Hive的工作流程Hive的工作流程Hive的具體工作流程如下:Execute Query:Hive界面如命令行或Web UI將查詢發(fā)送到Driver(任何數據庫驅動程序如JDBC、ODBC等)來執(zhí)行;Get Plan:Driver根據查詢編譯器解析查詢語句(Qu

10、ery),驗證查詢語句的語法,查詢計劃或者查詢條件;Get Metadata:編譯器將元數據請求發(fā)送給Metastore;Send Metadata:Metastore將元數據作為響應發(fā)送給編譯器;Send Plan:編譯器檢查要求和重新發(fā)送Driver的計劃。查詢的解析和編譯完成;Hive的工作流程Hive的具體工作流程如下:Execute Plan:Driver將執(zhí)行計劃發(fā)送到執(zhí)行引擎; 6.1 Execute Job:Hadoop內部執(zhí)行的是MapReduce工作過程,任務執(zhí)行引擎發(fā)送一個任務到資源管理節(jié)點(Job Tracker),資源管理器分配該任務到任務節(jié)點(Task Tracke

11、rs),由任務節(jié)點上開始執(zhí)行MapReduce任務; 6.1 Metadata Ops:在執(zhí)行引擎發(fā)送任務的同時,對Hive的元數據進行相應操作; 6.2 Job Done:MapReduce任務執(zhí)行完畢以后,通知執(zhí)行引擎;Hive的工作流程Hive的具體工作流程如下:Fetch Results:執(zhí)行引擎接收數據節(jié)點(Data Node)的結果;Send Results:執(zhí)行引擎發(fā)送這些合成值到Driver;fetch Results:Driver將結果發(fā)送到Hive接口。Hive支持基本數據類型和復雜類型,基本類型包括數值型,Boolean,字符串,時間戳。復雜類型包括數組,Map、和Str

12、uct。PART 06 Hive數據類型基本數據類型Hive的基本數據類型包括:整數類型小數類型文本類型Boolean二進制時間類型基本數據類型1. 整數類型 Hive有4種帶符號的整數類型:TINYINT、SMALLINT、INT、BIGINT,分別對應Java中的byte、short、int、long,字節(jié)長度分別為1、2、4、8字節(jié)。在使用整數字面量時,默認情況下為INT,如果要聲明為其他類型,通過后綴來標識。類型描述后綴示例TINYINT1字節(jié)的有符號整數,-128127Y10YSMALLINT2個字節(jié)的有符號整數,-3276832767S10SINT4個字節(jié)的帶符號整數-10BIGI

13、NT8字節(jié)帶符號整數L10L基本數據類型2. 小數類型 浮點類型包括FLOAT和DOUBLE兩種,分別為32位和64位浮點數。DECIMAL用于表示任意精度的小數,通常在貨幣當中使用。類型描述示例FLOAT4字節(jié)單精度浮點數1.01500.00DOUBLE8字節(jié)雙精度浮點數750000.00DECIMAL17字節(jié)任意精度的帶符號小數DECIMAL(5,2)基本數據類型3. 文本類型 Hive有3種類型用于存儲字文本。STRING存儲變長的文本,對長度沒有限制。VARCHAR與STRING類似,但是長度上只允許在1-65355之間。CHAR則用固定長度來存儲數據。類型描述示例STRING字符串,

14、變長。使用單引號或雙引號來指定Welcome to use Hive.VARCHAR變長字符串,最長65355字節(jié)Welcome to use Hive.CHAR固定長度字符串Welcome!基本數據類型4. Boolean Boolean表示二元的true或false。5. 二進制 BINARY用于存儲變長的二進制數據。6. 二進制 TIMESTAMP類型支持傳統(tǒng)的UNIX時間戳可選納秒的精度,支持的java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”和格式“YYYY-MM-DD HH:MM:ss.ffffffffff”。DATE類型則表示日

15、期,對應年月日三個部分,格式形式描述為 YYYY-MM-DD。復雜數據類型Hive的基本數據類型包括:ARRAYMAPSTRUCTUNION復雜數據類型1.2. ARRAY和MAP ARRAY和MAP類型對應于Java中的數組和映射表。 數組是有序的同類型的集,聲明格式為ARRAY,元素訪問通過0開始的下標,例如arrays1訪問第二個元素。 MAP是鍵值對集合,key必須為基本類型,value可以是任何類型。MAP通過MAP來聲明。Map的元素訪問則使用,例如mapkey1。 復雜數據類型3. STRUCT STRUCT則封裝一組有名字的字段,其類型可以是任意的基本類型,元素的訪問使用點號。

16、例如,如果列Name的類型是STRUCTfirst STRING,last STRING,那么第一個元素可以通過Name.first來訪問。4. UNION UNION是異類的數據類型的集合。在給定的任何一個時間點,UNION類型可以保存指定數據類型中的任意一種。UNION類型聲明語法為UNIONTYPE。HQL的數據定義,用于創(chuàng)建、修改和刪除數據庫和創(chuàng)建、修改和刪除表;HQL的數據操作,用于將數據加載到Hive表中,以及將數據抽取到文件系統(tǒng)中。PART 07 HiveQL:數據定義與操作Hive創(chuàng)建數據庫Hive中的數據庫本質上就是一個表目錄,通過使用數據庫來組織表可以避免表名沖突。如果用戶

17、在創(chuàng)建表的時候沒有顯式地指定數據庫,那么將會使用默認的數據庫default。命令格式CREATE DATABASE|SCHEMA IF NOT EXISTS 創(chuàng)建一個名為userdb的數據庫:hive CREATE DATABASE IF NOT EXISTS userdb;隨時可以通過SHOW命令來查看Hive中所包含的數據庫:hive SHOW DATABASES; default userdbHive創(chuàng)建數據庫JDBC程序 可以在Java程序里使用JDBC操作Hive,和使用普通JDBC數據庫一樣。創(chuàng)建數據庫的JDBC程序如下:import java.sql.SQLException;i

18、mport java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveCreateDb private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create drive

19、r instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/default, , ); Statement stmt = con.createStatement(); stmt.executeQuery(CREATE DATABASE userdb); System.out.println(Database userdb created successfully. ); con.close(); Hiv

20、e刪除數據庫當不需要的時候,用戶可以刪除數據庫。如果某個數據庫被刪除了,那么其對應的目錄也同時會被刪除。命令格式DROP DATABASE StatementDROP DATABASE IF EXISTS database_name RESTRICT|CASCADE;刪除名為userdb的數據庫:hive DROP DATABASE IF EXISTS userdb;Hive刪除數據庫JDBC程序 刪除數據庫的JDBC程序如下:import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;im

21、port java.sql.Statement;import java.sql.DriverManager;public class HiveDropDb private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection C

22、onnection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/default, , ); Statement stmt = con.createStatement(); stmt.executeQuery(DROP DATABASE userdb); System.out.println(“Drop userdb database successful.”); con.close(); Hive創(chuàng)建表Hive的表有內部表和外部表兩大類。內部表也稱為管理表。Hive會控制內部表數據的生命周期,當刪除一個內部表的時候,

23、Hive也會刪除這個表中的數據。但是,內部表不方便與其他數據處理系統(tǒng)共享數據。外部表是外部的,所以Hive并不擁有外部表的數據,只是有權使用這些數據。因此,刪除外部表的時候,并不會刪除這份數據,只是把描述表的元數據刪除。Hive創(chuàng)建表命令格式CREATE TABLE IF NOT EXISTS db_name. table_name(col_name data_type COMMENT col_comment, .)COMMENT table_commentROW FORMAT row_formatSTORED AS file_format創(chuàng)建一個名為employee表,表中字段和數據類型如下

24、:Sr.No字段名稱數據類型1Eidint2NameString3SalaryString4DesignationstringHive創(chuàng)建表hive CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, designation String) COMMENT Employee details ROW FORMAT DELIMITED FIELDS TERMINATED BY t LINES TERMINATED BY n STORED AS TEXTFILE;Hive創(chuàng)建表JDBC程序 創(chuàng)建表的JD

25、BC程序如下:import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveCreateTable private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLExce

26、ption / Register driver and create driver instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStatement(); / execute statement stmt.executeQuery(CREATE TABLE IF NOT EXI

27、STS + employee ( eid int, name String, + salary String, designation String) + COMMENT Employee details + ROW FORMAT DELIMITED + FIELDS TERMINATED BY t + LINES TERMINATED BY n + STORED AS TEXTFILE;); System.out.println(“ Table employee created.”); con.close(); Hive加載數據Hive沒有行級別的數據插入、數據更新和刪除操作,那么往表中添加

28、數據的唯一途徑就是使用一種“大量”的數據加載操作。有兩種方法可以用來加載數據:從本地文件系統(tǒng)從Hadoop文件系統(tǒng)命令格式LOAD DATA LOCAL INPATH filepath OVERWRITE INTO TABLE tablename PARTITION (partcol1=val1, partcol2=val2 .)Hive加載數據1201 Gopal 45000 Technical manager1202 Manisha 45000 Proof reader1203 Masthanvali 40000 Technical writer1204 Kiran 40000 Hr Ad

29、min1205 Kranthi 30000 Op Admin要將下面的數據加載到表中,這些數據存儲在/home/user目錄中名為sample.txt的文件中。加載文本數據到表中hive LOAD DATA LOCAL INPATH /home/user/sample.txt OVERWRITE INTO TABLE employee;Hive加載數據JDBC程序 將給定的數據加載到表中的JDBC程序如下:import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;import java.s

30、ql.Statement;import java.sql.DriverManager;public class HiveLoadData private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection Connection

31、 con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStatement(); / execute statement stmt.executeQuery(LOAD DATA LOCAL INPATH /home/user/sample.txt + OVERWRITE INTO TABLE employee;); System.out.println(Load Data into employee succe

32、ssful); con.close(); Hive修改表大多數Hive表的屬性可以通過ALTER TABLE語句來進行修改。這種操作會修改元數據,但不會修改數據本身。這些語句主要用來修改表模式中出現的錯誤、改變分區(qū)路徑,以及其他一些操作。Rename To 語句ALTER TABLE name RENAME TO new_nameALTER TABLE name ADD COLUMNS (col_spec, col_spec .)ALTER TABLE name DROP COLUMN column_nameALTER TABLE name CHANGE column_name new_nam

33、e new_typeALTER TABLE name REPLACE COLUMNS (col_spec, col_spec .)命令格式 修改表名、添加列、刪除列、修改列名、替換列Hive修改表把表名從employee修改為emp:hive ALTER TABLE employee RENAME TO emp;JDBC程序 對表進行重命名的JDBC程序如下:import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet; import java.sql.Statement;import jav

34、a.sql.DriverManager;public class HiveAlterRenameTo private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection Connection con = DriverManag

35、er.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStatement(); / execute statement stmt.executeQuery(ALTER TABLE employee RENAME TO emp;); System.out.println(Table Renamed Successfully); con.close(); Hive修改表Change 語句hive ALTER TABLE employee CHANG

36、E name ename String;hive ALTER TABLE employee CHANGE salary salary Double;命令格式 修改列名和列數據類型JDBC程序import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveAlterChangeColumn private static String driverName

37、 = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Stateme

38、nt stmt = con.createStatement(); / execute statement stmt.executeQuery(ALTER TABLE employee CHANGE name ename String;); stmt.executeQuery(ALTER TABLE employee CHANGE salary salary Double;); System.out.println(Change column successful.); con.close(); Hive修改表添加列語句hive ALTER TABLE employee ADD COLUMNS

39、( dept STRING COMMENT Department name);命令格式 增加一個列名dept在employee表。JDBC程序import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveAlterAddColumn private static String driverName = org.apache.hadoop.hive.j

40、dbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStateme

41、nt(); / execute statement stmt.executeQuery(ALTER TABLE employee ADD COLUMNS + (dept STRING COMMENT Department name);); System.out.prinln(Add column successful.); con.close(); Hive修改表REPLACE 語句hive ALTER TABLE employee REPLACE COLUMNS ( eid INT empid Int, ename STRING name String);命令格式 empid代替eid列,n

42、ame代替ename列JDBC程序import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveAlterReplaceColumn private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String arg

43、s) throws SQLException / Register driver and create driver instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStatement(); / execute statement stmt.executeQuery(ALTER

44、TABLE employee REPLACE COLUMNS + (eid INT empid Int, + ename STRING name String);); System.out.println( Replace column successful); con.close(); Hive刪除表當從Hive Metastore刪除表,它刪除了表/列的數據及其元數據。命令格式DROP TABLE IF EXISTS table_name;刪除名為employee的表:DROP TABLE IF EXISTS employee;JDBC程序import java.sql.SQLExcept

45、ion;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import java.sql.DriverManager;public class HiveDropTable private static String driverName = org.apache.hadoop.hive.jdbc.HiveDriver; public static void main(String args) throws SQLException / Register driver and create

46、 driver instance Class.forName(driverName); / get connection Connection con = DriverManager.getConnection(jdbc:hive:/localhost:10000/userdb, , ); / create statement Statement stmt = con.createStatement(); / execute statement stmt.executeQuery(DROP TABLE IF EXISTS employee;); System.out.println(Drop

47、table successful.); con.close(); Hive分區(qū)Hive分區(qū)是指按照數據表的某列或某些列分為多個區(qū),區(qū)從形式上可以理解為文件夾。給表添加分區(qū) 命令格式ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (p_column = p_col_value, p_column = p_col_value, .) LOCATION location1 (p_column = p_col_value, p_column = p_col_value, .) LOCATION location2 .;Hive分區(qū)hive ALTE

48、R TABLE employee ADD PARTITION (year=2012) location /2012/part2012 (year=2013) location /2013/part2013;有一個表叫employee ,擁有如Id、Name、Salary、Designation、Dept、和yoj等字段。以下命令用于將添加兩個分區(qū)到employee表。重命名分區(qū) 命令格式ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;Hive分區(qū)hive ALTER TABLE

49、 employee PARTITION (year=2013) RENAME TO PARTITION (Yoj=2013);重新命名一個分區(qū):刪除分區(qū) 命令格式ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;hive ALTER TABLE employee DROP IF EXISTS PARTITION (year=1203);刪除一個分區(qū):Hive導出數據將Hive表中的數據導出,可以根據導出的地方不同,將這些方式分為三種:導出到本地文件系統(tǒng);導出到HDFS中;導出到H

50、ive的另一個表中。導出到本地文件系統(tǒng)hive INSERT OVERWRITE LOCAL DIRECTORY /home/wzx/sample SELECT * FROM user_table;導出到HDFShive INSERT OVERWRITE DIRECTORY /home/wzx/hdfs SELECT * FROM user_table;Hive導出數據導出到另一張Hive表中hive insert into table test partition (age=25) select id, name, tel from user_table;Hive外部表外部表是外部的,所以H

51、ive并不擁有外部表的數據,只是有權使用這些數據。因此,刪除外部表的時候,并不會刪除這份數據,只是把描述表的元數據刪除。創(chuàng)建外部表hive CREATE EXTERNAL TABLE user_exter_table( id INT, name STRING, age INT, tel STRING) LOCATION /home/wzx/external;Hive外部表給外部表加載數據hive LOAD DATA LOCAL INPATH /home/wzx/data/wyp.txt INTO TABLE user_ exter_table;Copying data from file:/h

52、ome/wzx/data/user.txtCopying file: file:/home/hdfs/user.txtLoading data to table default.user_exter_tableTable default.exter_table stats: num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67, raw_data_size: 0Hive外部表刪除外部表hive DROP TABLE user_exter_table;從下面命令輸出可以看出刪除外部表的時候,數據并沒有被刪除hive dfs -l

53、s /home/wzx/external;Found 1 items-rw-r-r- 3 wzx supergroup 67 2014-01-14 23:21 /home/wzx/external/user.txt在創(chuàng)建表和導入數據到表之后,使用HiveQL進行查詢。PART 08 HiveQL:查詢SELECTFROM 語句例如:有一張外部表employees,包含列ID、name、salary、AGE、BIRTHDAY、subordinates、score、address。表中數據內容如下201425003JohnDoe5500.0451972-07-12MarySmith, ToddJo

54、nesFedTax:0.2, StateTax:0.05201425004MarySmith6400.0471970-08-15BillKingFedTax:0.2, StateTax:0.05201425005ToddJones4400.0401977-06-10FedTax:0.1, StateTax:0.01201425006BillKing4200.0381979-03-05FedTax:0.1, StateTax:0.01SELECTFROM 語句1. 簡單查詢:查看employees表中的薪水數據SELECT name, salary FROM employees;查詢結果:Joh

55、nDoe 5500.0 MarySmith 6400.0 ToddJones 4400.0 BillKing 4200.0SELECTFROM 語句2. 對復合字段查詢:查看employees表中的下屬數據信息SELECT name , subordinate FROM employees;查詢結果:JohnDoe “MarySmith”, “BillKing” MarySmith “BillKing” ToddJones BillKing SELECTFROM 語句查看employees表中的扣除稅數據SELECT name , deductions FROM employees;查詢結果:

56、JohnDoe “FedTax”:0.2,”StateTax”:0.05MarySmith “FedTax”:0.2,”StateTax”:0.05ToddJones “FedTax”:0.1,”StateTax”:0.01BillKing “FedTax”:0.1,”StateTax”:0.01SELECTFROM 語句3. 引用復合字段元素:引用復合字段查看下級數據SELECT name , subordinates0 FROM employees;查詢結果:JohnDoe MarySmithMarySmith BillKingToddJones NULLBillKing NULLSELE

57、CTFROM 語句選擇一個deductions元素進行查詢SELECT name , deductions“FedTax” FROM employees;查詢結果:JohnDoe 0.2MarySmith 0.2ToddJones 0.1BillKing 0.1使用列值進行計算把查詢得到的員工姓名轉換為大寫并計算員工的稅后薪資SELECT upper(name), salary, deductions“FedTax”, round(salary*(1-deductions“FedTax) FROM employees;查詢結果:JOHNDOE 5500.0 0.24400.0MARYSMITH

58、 6400.0 0.25120.0TODDJONES 4400.0 0.13960.0BILLKING 4200.00.13780.0使用列值進行計算使用內置函數查詢表employees中有多少員工,以及計算員工平均薪水SELECT count(*), avg(salary) FROM employees;查詢結果:45125.0使用列值進行計算將employees表中每行記錄中的subordinates字段內容轉換成0個或者多個新的記錄行。如果某行員工記錄subordinates字段內容為空的話,就不會產生記錄;如果不為空,那么這個數組的每個元素都將產生一行新記錄:SELECT explod

59、e(subordinates) AS sub FROM employees;查詢結果:MarySmith ToddJones BillKingSELECTWHERE 語句假設員工表employees有Id、 Name、 Salary、Designation、和Dept字段 ID NameSalaryDesignation Dept1201Gopal45000 Technical managerTP 1202Manisha45000 Proofreader PR1203Masthanvali 40000Technical writer TP1204Krian45000ProofreaderPR1

60、205Kranthi30000Op Admin AdminSELECTWHERE 語句查看薪資超過30000的員工的詳細信息SELECT * FROM employees WHERE salary30000;查詢結果:1201 Gopal 45000 Technical manager TP 1202 Manisha 45000 Proofreader PR 1203 Masthanvali 40000 Technical writer TP 1204 Krian 45000 Proofreader PRGROUP BY 語句假設員工表employees有Id、 Name、 Salary、De

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論