Hive的基本概念和常用命令
一、概念:
1、結構化和非結構化資料
結構化資料:固有的鍵值對
非結構資料:沒有固定的鍵值對,沒有明確的對映關係
所以就可以理解下面這句話:hive是由facebook開源用於解決海量結構化日誌的資料統計專案。
2、Hive是基於Hadoop檔案系統上的資料倉庫架構,它為資料倉庫的管理提供了許多功能:資料ETL(抽取、轉換和載入)、資料儲存管理和大型資料集的查詢和分析能力。
RDBMS(關係型資料庫)
OLTP(聯機事務處理過程):一組事務同時去執行,低延遲,查詢為主。
ACID(原子性、一致性、隔離性、永續性)
OLAP(聯機分析處理過程):以資料倉庫為基礎,高延遲,分析為主。
3、Hive定義了類SQL語言-Hive QL(HQL),允許使用者進行和SQL相似的操作,它可以將結構化的資料檔案對映為一張資料表,並提供簡單的SQL查詢功能,同時允許開發人員方便的使用MR操作,可以將SQL語言轉換為MR任務執行。
二、官網:
三、ETL
E:Extract 資料抽取
T:Transform 資料轉換
L:Load資料裝載
ETL是將業務系統的資料經過抽取、清洗轉換之後,裝載到資料倉庫的過程。目的是將分散、零亂、標準不統一的資料整合到一起。例如專案日誌資訊、資料爬蟲資訊等。就可以提供決策分析依據了。
資料抽取:把不同的資料來源資料抓取過來,存到某個地方。
資料清洗:過濾哪些不符合要求的資料或修正資料之後再進行抽取。不完整資料:比如資訊缺失。錯誤資料:日期格式不正確、日期越界、字串出現空格等重複資料:需要去重等
資料轉換:不一致的資料進行轉換,比如一個職工有職工號和人事號,學生有身份證號和學號等
常見ETL工具:Oracle的OWB、SQL Server的DTS、SSIS服務、Informatic等等,工具可以快速建立起ETL工程,遮蔽了複雜的編碼任務、提高了速度,降低了難度,但是缺少靈活性。
SQL方法優點是靈活,提高了ETL效率,但是編碼複雜,對技術要求高。
Hive結合了前面兩種的優點。
四、安裝Hive
可參考之前安裝Hive的文件教程《CentOS6.5-Hadoop2.7.3安裝hive-2.1.1》。
也可以進入官網參考
找到Getting Started Guide
選擇Running Hive
五、常用命令
安裝完成後我們進入hive
在官網上有命令使用的文件
文件內容
我們使用一些命令:
檢視資料庫show databases;
建立資料庫show database 庫名
可以檢視HDFS上
使用資料庫use 庫名
建立表的資料型別,我們可以檢視官網
就可以找到所有的資料型別了
建立表的時候,如果欄位是關鍵字,則需要加反飄號`(Tab鍵上面)。
那關鍵字有哪些?
比如
報錯
FAILED: ParseException line 2:0 Failed to recognize predicate 'date'. Failed rule: 'identifier' in column specification
所以我們改為:
但是我們依然不建議使用關鍵字,儘量去避免,不要使用。我們修改下欄位名
這其中有兩個小細節:第一CTRL+L清屏 第二從記事本複製表語句的時候前面不要有空格,否則會報錯,Display all 528 possibilities? (y or n)。
我們再看資料載入
我們儘量不要使用insert、update、delete,我們可以使用load,所以我們點選load
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
如果加Local表示Linux本地的資料檔案
如果不加Local,表示HDFS上的資料檔案
我們在Linux上準備一個數據檔案
我們先載入資料
load data local inpath '/data/hivetest/stu_info_local' into table gjz_error;
我們檢視資料,資料全部是NULL,因為hive預設的分隔符是^A,也就是001,而我們的分隔符是一個tab鍵。
我們把分隔符改為^A(先按Ctrl+V,再按Ctrl+A)
然後我們重新匯入資料,發現數據已經匯入了
我們再將資料檔案上傳到HDFS上
建立資料表
我們匯入資料
此時我們檢視HDFS上,發現原來的資料也不在了
但是資料已經載入到hive了
另外資料檔案已經在新的目錄下了
所以不加local是剪下移動的過程,而加local是複製的過程。
前面的問題:如果我們的資料不是預設的分隔符,即不是^A該怎麼辦呢?
我們準備檔案
準備資料,將資料分隔符改為\t
我們看官網上這個部分
我們重新建表,加入資料
create table hive_table_local_format(
id int,
name string
)row format delimited fields terminated by '\t'
Hive在HDFS檔案系統上的結構
我們在test庫下面建立表
匯入資料
我們檢視
/user/hive/warehouse/test.db/hive_table_local_format
我們可以得到
元資料庫開始是derby,只能開啟一個客戶端,再開啟一個會話啟動會報錯,所以我們改變了元資料庫為Mysql,其中可選的是:
我們建立一個數據庫
create database stu_test
使用資料庫並建立表
將檔案上傳到HDFS上
我們先建立兩個目錄
我們把資料上傳
我們載入資料到hive中
在載入之前我們可以看到,我們看到stu_test中沒有資料
我們載入資料
我們再載入第二個資料
注:我們會發現,自動重新命名了。
我們檢視我們表的資訊:
- show create table
- desc [extended][formatted] table
- 元資料庫
或者
或者
或者
我們檢視Tals
修改表名
官網
我們修改一個表試一下
給表新增一個列
alter table table_name add columns (age int);
添加註釋也在這個部分
清除資料
Truncate table table_name
注意不會刪除元資料
Hive的日誌檔案配置檔案
目錄修改為hive.log.dir=/opt/bigdata/hive/logs
我們可以在hive-site.xml.template找到下面兩個屬性,這兩個屬性可以幫助我們在日誌中顯示資料和列名,將屬性新增到hive-site.xml中
<property>
<name>hive.cli.print.current.db</name>
<value>false</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>false</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
我們新增到配置中,下次重啟進入就可以看到日誌了
一些常用的命令
官網的位置
就可以看到命令了
比如:
quit exit 退出客戶端
set 臨時設定屬性 可以參考Mysql中設定編碼等方式去理解。另外set也可以使用者檢視引數的屬性。
顯示所有函式show functions;
我們可以查詢函式的使用比如max
Desc function max;
Desc function extended case;
Hive可以用java寫成函式,使用add jar就可以新增使用
也可以將python指令碼新增進來,使用add file
!感嘆號的方式可以檢視Linux上的檔案
dfs方式可以檢視HDFS上的檔案