《Hive程式設計指南》筆記
準備工作
- 配置mysql資料庫為元資料庫
vi hive2.2/conf/hive-site.xml
- 初始化hive
$HIVE_HOME/bin/schematool -dbType -initSchema - 啟動hive
HIVE_HOME/bin/hive –e ‘your sql’
一、Hive命令列引數
./hive [option]
- -d key=value 定義一個變數。
- -e “sql” 以命令列方式執行sql。
- -f filename.hql 執行filename.hql裡面的sql語句。
——>在hive命令中的方式為:hive>source filename.hql - -S 不輸出,以靜默的方式執行
- -i /path…/.hiverc 啟動時先執行.hiverc中的查詢語句(如果未指定,則查詢$HOME/.hiverc)
- 在hive命令中執行shell命令(在命令前面加!):hive>!ls -l / ;
- 在hive中執行hdfs命令:去除 hdfs關鍵字即可
- 在hiveconf中設定hive.cli.print.header為true 顯示欄位名稱
二、Hive中的資料型別
1、基本資料型別
資料型別 | 長度 | 例子 |
TINYINT | 1位元組有符號整數 | 20 |
SMALINT | 2位元組有符號整數 | 20 |
INT | 4位元組有符號整數 | 20 |
BIGINT | 8位元組有符號整數 | 20 |
BOOLEAN | 布林型別 | TRUE |
FLOUT | 單精度浮點數 | 3.14159 |
DOUBLE | 雙精度浮點數 | 3.14159 |
STRING | 字串序列 | “I love you” |
TIMESTAMP | 證書、浮點數或字串 | |
BINARY | 位元組陣列 |
資料型別 | 描述 | 例子 |
STRUCT | JAVA中的enum | STRUCT{ "JOHN", "TOM" } |
MAP | 鍵值對型別 | map{"first":"John","last":"Tom"} |
ARRAY | 陣列型別 | array{1,2,3,4,5,6,7,8} |
- 以下用如圖兩個表演示結果內容:
1、INNER JOIN 內連線(優化:表從左往右依次變大)
語句:
SELECT a.name,a.number,b.name
FROM table1 a JOIN table2 b
ON a.number=b.number;
結果:
注意:老版本不支援非等值join
新版本(1.2.0以後)支援非等值join,但是語法必須如下:
select a.name b.* from t_1 a,t_2 b where a.id>b.id; //(不加join關鍵字)
### 2、LEFT OUTER JOIN 左外連線 ###
語句:
SELECT a.name,a.number,b.name
FROM table1 a LEFT OUTER JOIN table2 b
ON a.number=b.number;
結果:
3、RIGHT OUTER JOIN 右外連線
語句:
SELECT,a.name,a.number,b.name
FROM table1 a RIGHT OUTER JOIN table2 b
ON a.number=b.number;
結果:
4、FULL OUTER JOIN 全外連線
語句:
SELECT a.name,a.number,b.name
FROM table1 a FULL OUTER JOIN table2 b
ON a.number=b.number;
結果:
5、LEFT SEMI JOIN 左半開連線
注意:左半開連線的SELECT和WHERE不能引用右半邊表的欄位
語句:
SELECT a.name,a.number
FROM table1 a LEFT SEMI JOIN table2 b
ON a.number=b.number;
結果:
6、JOIN 笛卡爾積連線
注意:就是內連線不加ON的條件
語句:
SELECT a.name,a.number,b.name
FROM table1 a JOIN table2 b;
五、檢視與索引
(一)檢視
- CREATE VIEW myview AS SELECT * FROM mytable; 建立檢視語法
- CREATE OR REPLACE VIEW myview AS SELECT * FROM mytable; 建立/更新檢視
- DROP VIEW [IF EXISTS] myview; 刪除檢視
- ALTER VIEW myview SET TBLPROPERTIES(key=value); 只能更改檢視元資料,而不能更改其他東西;
(二)索引
- 建立索引:
myindex:索引名稱CREATE INDEX myindex ON TABLE mytable(columnName) AS '索引處理器的全限定類名' WITH DEFERRED REBUILD //如果使用者指定此選項,則新索引呈現空白狀態 IN TABLE myindextable //指定建立索引後的表名 PARTITION(key=value); //對此分割槽進行索引建立
columnName:建立索引的列的名稱
myindextable:建立索引後的表名 - ALTER INDEX myindex ON TABLE mytable PARTITION(key=value) REBUILD; 修改索引
- SHOW FORMATTED INDEX ON mytable; 顯示索引
- DROP INDEX [IF EXISTS] myindex ON mytable; 刪除索引
六、模式設計
-
關係型資料庫中按照天數建立表,在Hive中改成按照天數建立分割槽。
-
分桶:
CLUSTER BY (欄位) INTO num BUCKETS
建立表時(CREATE TABLE)使用,用於把資料按照(欄位)均勻的分在num個桶中-----
這裡我們需要注意幾點我們需要確保reduce 的數量與表中的bucket 數量一致,為此有兩種做法
(1)讓hive強制分桶,自動按照分桶表的bucket 進行分桶。(推薦)
set hive.enforce.bucketing = true;
(2)手動指定reduce數量
set mapreduce.job.reduces = num; set mapreduce.reduce.tasks = num;
並在 SELECT 後增加CLUSTER BY 語句
七、許可權管理
1、開啟Hive許可權
hive> set hive.security.authorization.enabled=true;
2、對使用者或使用者組授予許可權
GRANT [CREATE|SELECT|...]
ON [DATABASE|TABLE] database_or_table_name
TO [USER|GROUP] user_or_group_name;
3、對使用者授予角色
CREATE ROLE rule_name; //建立角色
GRANT [SELECT|CREATE|...] ON TABLE table_name TO ROLE role_name; //賦予角色許可權
GRANT ROLE role_name TO [USER|GROUP] user_name; //賦予使用者角色
4、刪除授權
REVOKE [SELECT|CREATE|...]
ON [DATABASE|TABLE] database_or_table_name
FROM [USER|GROUP] user_or_group_name;
5、分割槽表的授權
預設情況下,分割槽表的授權將會跟隨表的授權,也可以給每一個分割槽建立一個授權機制,只需要設定表的屬性PARTITION_LEVEL_PRIVILEGE設定成TRUE
hive> ALTER TABLE auth_part
> SET TBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
Authorization failed:No privilege 'Alter' found for inputs
{database:default, table:auth_part}.
Use show grant to get more details.
6、自動授權
(1)表建立者的許可權
(2)其他使用者的許可權
7、常用授權關鍵字
名稱 | 描述 |
ALL | 所有許可權 |
ALTER | 更改表結構,建立分割槽 |
CREATE | 建立表 |
DROP | 刪除表,或分割槽 |
INDEX | 建立和刪除索引 |
LOCK | 鎖定表,保證併發 |
SELECT | 查詢表許可權 |
SHOW_DATABASE | 檢視資料庫許可權 |
UPDATE | 為表/分割槽插入或載入本地資料的許可權 |
SHOW FUNCTIONS;
DESCRIBE FUNCTION [EXTENDED] function_name;
#### 2、加入函式 ####
ADD JAR /root/... //路徑不要加入引號
CREATE TEMPORARY FUNCTION function_name AS '完全限定類名'
#### 3、自定義UDF ####
1. 繼承UDF
2. 重寫evaluate方法
#### 4、自定義UDAF ####
1. 繼承AbstractGenericUDAFResolver,實現getEvaluator方法(返回:繼承GenericUDAFEvaluator的自定義類)
2. 繼承GenericUDAFEvaluator的自定義類,實現init、getNewAddregationBuffer、iterate、terminatePartial、merge、terminate方法
相關推薦
hive程式設計指南學習筆記之二:hive資料庫及其中的表查詢
show databases; /*
hive程式設計指南學習筆記之一:建表語句以及分隔符定義
/*建立包括基本資料型別string\float,以及集合資料型別array、map 、struct的表,並指定表中的列、元素、map中鍵值之間的分隔符 很好的一個例子。 */ create table employees ( name string, &nbs
Hive程式設計指南-學習筆記(一) 資料型別和分隔符
一、Hive概述 Hive定義了類似SQL的查詢語言——HiveQL,使用者編寫HiveQL語句執行MapReduce任務,查詢儲存在Hadoop叢集中的資料。 HiveQL與MySQL最接近,但還是有顯著性差異的。Hive不支援行級插入、更新操作和刪除操作。Hive不支
Hive程式設計指南-學習筆記(二) 資料定義
一、資料庫 1、建立資料庫:CREATE DATABASE hive; 如果已經存在,會丟擲異常,下面的語句不丟擲異常:CREATE DATABASE IF NOT EXISTS hive; 資料庫的預設位置是hdfs上:/user/hive/warehouse,修改預
Hive程式設計指南-學習筆記(三) 資料操作
一、向管理表中裝載資料 Hive沒有行級別的資料插入、更新和刪除操作,往表中裝載資料的唯一途徑就是使用一種“大量”的資料裝載操作。 LOAD:向表中裝載資料 (1)把目錄‘/usr/local/data’下的資料檔案中的資料裝載進usr表,並覆蓋原有資料:LOAD DA
《Hive程式設計指南》筆記
準備工作 配置mysql資料庫為元資料庫 vi hive2.2/conf/hive-site.xml 初始化hive $HIVE_HOME/bin/schematool -dbType -initSchema 啟動hive HIVEHOME/bin/hi
《hive程式設計指南》閱讀筆記摘要(一)
第一二章 基礎知識、基礎操作 hive的缺點 1、hive不支援記錄級別的增刪改操作,但是使用者可以通過查詢生成新表或者將查詢結果匯入到檔案中。 2、Hive的查詢延時很嚴重,因為MapReduce job的啟動過程消耗很長時間,所以不能用在互動查詢系統中。 3、hive不
《hive程式設計指南》閱讀筆記摘要(九)
第10章 調優一個hive任務會包含有一個或多個階段stage,不同的stage間有依賴關係。 一、分析複雜的或者執行效率低的查詢時,可以使用explain語句,如 explain select .....; 二、explain extended可以產生更多的輸出資訊 ex
《Hive程式設計指南》讀書筆記 | 一文看懂Hive的資料型別和檔案格式
Hive支援關係型資料庫中的大多數基本資料型別,同時也支援關係型資料庫中很少出現的3種集合資料型別。和大多數資料庫相比,Hive具有一個獨特的功能,那就是其對於資料在檔案中的編碼方式具有非常大的靈活性。大多數資料庫對資料具有完全的控制,其包括對資料儲存到磁碟的過程的控制,也包括對資料生命週期的控制。而Hi
Hive Shell 命令之二(表中資料的操作,出自Hive程式設計指南)
一、 互動模式: show tables; #檢視所有表名 show tables 'ad*' #檢視以'ad'開頭的表名 set 命令 #設定變數與檢視變數; set -v #檢視所有的變數 set hive.stats.atomic #檢視hive.sta
C++高質量程式設計指南筆記(一)
FileName.h /* *Copyright (c) 2016,11,XXXX公司 *All rights reserved *檔名:FileName.h *摘要:簡要描述本檔案的內容 *當前版本: 1.1 *作者:XXX *完成日期:2007.1
Hive程式設計指南-JDBC連線、指令碼執行
摘要:本文主要講了如何通過java來連線Hive,以及如何執行hive指令碼一、Hive連線1.1、通過shell1、hive 命令列模式,直接輸入#/hive/bin/hive的執行程式,或者輸入#hive --service cli2、 hive web介面
Hive程式設計指南-Spark操作Hive
摘要:本文將要說明如何使用Spark來對Hive進行操作1、打jar包,提交Spark任務 通過提交spark任務的方式,如下面的scala程式碼。之後需要將成程式碼打包成一個jar包,然後提交到spark中去.一般情況下生產上建議使用這種方法,可
IOS View程式設計指南筆記
我們所看到的程式 對於一切IOS APP來說,我們看的的內容,都是UIView所呈現的。 UIView如場景,UIWindow如舞臺,UIView粉墨登場在UIWindow這個舞臺上,使我們看到豐富多彩的介面UI。UIWindow本身沒有任何內容,它只提供了一個場所來讓這些
Hive程式設計指南---動態分割槽插入
Hive如果需要建立非常多的分割槽,那麼使用者就需要寫很多的SQL,Hive提供了一個動態分割槽功能,其可以基於查詢引數推斷需要建立的分割槽名稱 INSERT OVERWRITE TABEL employee PARTITION(country,state) SELECT
《CUDA並行程式設計:GPU程式設計指南》筆記 Chaper 4 環境搭建
關於平臺:Windows、Linux、Mac OS都支援 Windows下環境搭建順序: (1) VS 2010 (必須先安裝VS!,然後再安裝其他) (2) CUDA ToolKit (在9.0版本中
《iOS高階記憶體管理程式設計指南》學習筆記
Object-C 一共有3種記憶體管理方式: 1. MRR (Manual Retain-Release)手動持有-釋放。採用了引用計數模型,由基礎類NSObject和執行時(Runtime Eviroment)共同提供。 2. ARC (Automa
OpenGL ES 3.0程式設計指南學習筆記 第6章 頂點屬性、頂點陣列和緩衝區物件
1)vec2等為float型,也就是著色語言預設為float操作。float,vec2,vec3,vec4 2)矩陣以列優先順序儲存,也就是說矩陣可以看做是由幾個列向量組成,例如;mat3 myMat3 = mat3(1.0, 0.0, 0.0,//First column
Linux Unix shell 程式設計指南學習筆記(第四部分)
第十六章 shell指令碼介紹 此章節內容較為簡單,跳過。 第十七章 條件測試 test命令 expr命令 test 格式 test condition 或者 [ condition ] (注意: condition兩側有空格) 檔案狀態測試:
【筆記】《WebGL程式設計指南》學習-第4章高階變換與動畫基礎(1-平移然後旋轉))
目標:實現三角形的 先旋轉再平移 結果: 本節要使用一個專為本書編寫的矩陣函式庫。有了矩陣函式庫,進行如“平移,然後旋轉”這種複合的變換就很簡單了。 矩陣變換庫:cuon-matrix.js 在 OpenGL 中,我們無需手動指定變換矩陣的每