這篇文章主要為大家展示了“hive需要掌握哪些基礎知識”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“hive需要掌握哪些基礎知識”這篇文章吧。
Hive作為數據倉庫,起源于Facebook,工作原理大致可以解釋為:對用戶輸入的hql進行解釋,編譯,優化并生成查詢計劃,并轉化為MapReduce任務進而執行:解釋器——編譯器——優化器——執行器;
底層存儲用到的是HDFS分布式存儲系統;
優點:1. 簡單易上手:提供了類SQL查詢語言HQL;2.可擴展:為超大數據集設計了計算/擴展能力(MR作為計算引擎,HDFS作為存儲系統);3. 提供統一的元數據管理;4. Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數:繼承hive的UDF類,重寫evaluate方法;5. 容錯:良好的容錯性,節點出現問題SQL仍可完成執行;
缺點:1. hive的HQL表達能力有限;2. 效率比較低,自動生成的mapreduce作業,通常情況下不夠智能化,且調優比較困難;
1)Hive CLI(Hive CommandLine,Hive命令行),客戶端可以直接在命令行模式下進行操作
2)hwi(Hive WebInterface,Hive Web接口),Hive提供了更直觀的Web界面
3)hiveserver,Hive提供了Thrift服務,Thrift客戶端目前支持C++/Java/PHP/Python/Ruby
Textfile:默認格式,數據不做壓縮,磁盤開銷大,數據解析開銷大;
SEQUENCEFILE:SequenceFile是Hadoop API提供的一種二進制文件支持,其具有使用方便、可分割、可壓縮的特點;
rcfile:RCFILE是一種行列存儲相結合的存儲方式。首先,其將數據按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block。其次,塊數據列式存儲,有利于數據壓縮和快速的列存取;
parquet:Apache Parquet是Hadoop生態圈中一種新型列式存儲格式,它可以兼容Hadoop生態圈中大多數計算框架;
從本地數據導入:load data local inpath '/home/hadoop/test.txt' overwrite into table test01partition(state='good', city='xiamen');
從其他表導入數據:from test01 insert overwrite table test02 partition(state='good', city='xiamen') select id,name,age,course,body,address;
導出數據到本地文件系統:insert overwrite localdirectory '/home/hns/test' select * from test01;
導出數據到HDFS中:insertoverwrite directory '/home/hns/test' select * from test01;
導出到hive的另一張表:insertinto table test02 partition (age='25') select id, name, tel from test01;
建表:
CTRAT TABLE IF NOT EXISTS page_view(viewTime INT,userid BIGINT)
ROWFORMAT DELIMITED FIELDS TERMINATED BY ‘,’ //指定了列分隔符為,
LINE TERMINATED BY ‘\n’ //指定了行分隔符為換行符\n
PARTITIONEDBY (country STRING, state STRING) //用這兩個字段分區
STORED AS TEXTFILE //指定存儲文件的格式
刪表:
DROPTABLE IF EXISTS page_view;
修改列信息:
ALTERTABLE page_view ADD COLUMNS ( appname STRING COMMENT ‘Application name',sessionid LONG COMMENT ‘ The current session id');
查詢:
select* from tablename;(全表查詢,生產環境不建議使用,慢且占用資源,僅用作范例)
可添加limit關鍵字限制查詢條數,或where語句篩選查詢范圍
where… like …:可進行模糊查詢,如:
SELECT* from test.scBUS where scBUS.country like concat('%','a1','%')
HAVING子句:允許用戶通過一個簡單的語法完成原本需要通過子查詢才能對GROUP BY語句產 生的分組進行條件過濾的任務,如:
selectsno,sname,stall from student where sage=6 and sex=’男’ group by sno havingstall>167;
join語句:
Hive支持通常的SQL JOIN語句,但是只支持等值連接:
selectdistinct a.sname from student a left join sc b on (a.sno=b.sno);
關于內連接、外連接和半連接:
幾種連接區別簡單概括為:內連接只顯示了倆張表都存在的數據,而外連接則是顯示出所有的數據,其中左連接是左外邊的表輸出完整數據。右外連接是右邊的表輸出完整數據,全外連接就是兩張表的所有行全部輸出。做半連接用來補充hive相對于mysql等語句缺失的in/exists這樣的子句,就用left semi join代替,和left join的區別在于右邊的表數據不會加載進結果;
Orderby 和sortby:ORDER BY會對查詢結果集執行一個全局排序,所有的數據都通過一個reducer進行處理;SORT BY,其只會在每個reducer中對數據進行排序,也就是執行一個局部排序過程,生產中可以和DISTRIBUTE BY一起用,實現分區并排序。
以上是“hive需要掌握哪些基礎知識”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。