-Hive-
Hive定義
Hive 是一種數(shù)據(jù)倉庫技術(shù),用于查詢和管理存儲在分布式環(huán)境下的大數(shù)據(jù)集。構(gòu)建于Hadoop的HDFS和MapReduce上,用于管理和查詢分析結(jié)構(gòu)化/非結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)倉庫;
- 使用HQL(類SQL語句)作為查詢接口;
- 使用HDFS作為底層存儲;
- 使用MapReduce作為執(zhí)行層,即將HQL語句轉(zhuǎn)譯成M/R Job然后在Hadoop執(zhí)行
Hive的表其實就是HDFS的目錄/文件夾,按表名把文件夾分開。如果是分區(qū)表,則分區(qū)值是子文件夾;
Hive概述—元數(shù)據(jù)、數(shù)據(jù)、目錄
- 元數(shù)據(jù)保存在DB(Derby/MySQL)中,包括表的名字、表的列和分區(qū)及其屬性,表的屬性包括是否為外部表等,表的數(shù)據(jù)所在目錄等;
- 數(shù)據(jù)位于集群目錄下:
- 表的數(shù)據(jù)即文件(表對應(yīng)文件夾下);上傳文件即相當(dāng)于上傳數(shù)據(jù)到數(shù)據(jù)表中;文件可以有多個;表的分區(qū)對應(yīng)子目錄;
Hive概述—Hive Shell
Hive Shell 把 HiveQL 查詢轉(zhuǎn)換為一系列 MapReduce 作業(yè)對任務(wù)進(jìn)行并行處理, 然后返回處理結(jié)果。
Hive 采用 RDBMS 表 (table) 形式組織數(shù)據(jù)
, 并為存儲在 Hadoop上的數(shù)據(jù)提供附屬的對數(shù)據(jù)
進(jìn)行展示的結(jié)構(gòu)描述信息,該描述信息稱為元數(shù)據(jù)
(metadata)或表模式,以 metastore 形式存儲在
RDBMS 數(shù)據(jù)庫中。
Hive使用—內(nèi)、外部表的區(qū)別
兩者的相同點(diǎn):需要指定元數(shù)據(jù);都支持分區(qū)
不同點(diǎn):實際數(shù)據(jù)的存儲地點(diǎn)不同
Hive使用—分區(qū)Partition
在實際項目中,經(jīng)常“按天分表 的模式設(shè)計數(shù)據(jù)庫!Hive分區(qū)類似數(shù)據(jù)庫中相應(yīng)分區(qū)列的一個索引;Hive表中的一個分區(qū)對應(yīng)表下的一個目錄,所有分區(qū)的數(shù)據(jù)都存儲在各自對應(yīng)的子目錄中
例如:htable包含ds、city兩個分區(qū),則相同日期、不同
城市的hdfs目錄分別為:
- /datawarehouse/htable/ds=20100301/city=GZ
- /datawarehouse/htable/ds=20100301/city=BJ
Hive使用—桶Bucket
桶對指定列進(jìn)行哈希(hash)計算時,根據(jù)哈希值切分?jǐn)?shù)據(jù),每個桶對應(yīng)一個文件。
例如:將屬性列user分散到32個桶中,哈希值為0、10的分別對應(yīng)的文件為:
- /datawarehouse/htable/ds=20100301/city=GZ/part-00000
- /datawarehouse/htable/ds=20100301/city=GZ/part-00010
Hive使用—分區(qū)、分桶、索引
- 索引和分區(qū)最大的區(qū)別就是索引不分割數(shù)據(jù)表,分區(qū)分割數(shù)據(jù)表。
- 分區(qū)和分桶最大的區(qū)別就是分桶隨機(jī)分割數(shù)據(jù)表,分區(qū)是非隨機(jī)分割數(shù)據(jù)表。
Hive使用—Hive 表 DDL 操作
Hive使用—Hive 表 DML 操作
Hive使用—Hive數(shù)據(jù)類型
基本數(shù)據(jù)類型:
- tinyint/smallint/int/bigint 整數(shù)類型
- float/double 浮點(diǎn)類型
- boolean 布爾類型
- string/varchar/char 字符串類型
復(fù)雜數(shù)據(jù)類型: - array:數(shù)組類型,由一系列相同的數(shù)據(jù)類型的元素組成
- map:集合類型,包含key->value鍵值對,可通過key訪問元素。
- struct:結(jié)構(gòu)類型,可以包含不同數(shù)據(jù)類型的元素,這些元素可以通過“點(diǎn)語法”的方式來得到所需要的元素。
時間類型: - Date: 日期(年月日)
- Timestamp: 是unix的一個時間偏移量
- select unix_timestamp(); 查看系統(tǒng)的時間偏移
Hive使用—Hive表操作語法
創(chuàng)建表
- external 外部表,類似于mysql的csv引擎
- partitioned by 指定分區(qū)字段
- clustered by sorted by 可以對表和分區(qū)對某個列進(jìn)行分桶操作,也可以利用sorted by對某個字段進(jìn)行排序
- row format delimited fields terminated by ‘\t’ 指定數(shù)據(jù)行中字段間的分隔符和數(shù)據(jù)行分隔符
- stored as 指定數(shù)據(jù)文件格式:textfile sequence rcfile inputformat (自定義的inputformat 類)
- location 指定數(shù)據(jù)文件存放的hdfs目錄
內(nèi)部表建表指令(示例)
CREATE TABLE pokes (foo INT, bar STRING) row format delimited fields terminated by ‘\t’;
外部表建表指令(示例)
CREATE external TABLE ext_pokes (foo INT, bar STRING) row format delimited fields terminated by ‘\t’ location ‘/data/extpokes’
刪除表
- drop table [IF EXISTS] table_name
- 刪除內(nèi)部表時會刪除元數(shù)據(jù)和表數(shù)據(jù)文件
- 刪除外部表(external)時只刪除元數(shù)據(jù)
修改表
Hive使用—HiveQL加載數(shù)據(jù)
加載文件數(shù)據(jù):(local 本地、hdfs)文件數(shù)據(jù)到指定的表分區(qū)
LOAD DATA LOCAL INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
從指定表中選取數(shù)據(jù)插入到其他表中
FROM src INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100 INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200Hive使用—HiveQL Select語句
Hive使用—分區(qū)表
Hive使用—桶的使用
總結(jié)
- 上一篇: Mapreduce原理和YARN
- 下一篇: leetcode 1744. 你能在你最