1. 程式人生 > >《Hive程式設計指南》筆記

《Hive程式設計指南》筆記

準備工作

  1. 配置mysql資料庫為元資料庫
    vi hive2.2/conf/hive-site.xml
  2. 初始化hive
    $HIVE_HOME/bin/schematool -dbType -initSchema
  3. 啟動hive
    HIVEHOME/bin/hiveHIVE_HOME/bin/hive 或者HIVE_HOME/bin/hive –e ‘your sql’

一、Hive命令列引數

./hive [option]

  1. -d key=value 定義一個變數。
  2. -e “sql” 以命令列方式執行sql。
  3. -f filename.hql 執行filename.hql裡面的sql語句。
    ——>在hive命令中的方式為:hive>source filename.hql
  4. -S 不輸出,以靜默的方式執行
  5. -i /path…/.hiverc 啟動時先執行.hiverc中的查詢語句(如果未指定,則查詢$HOME/.hiverc)
  6. 在hive命令中執行shell命令(在命令前面加!):hive>!ls -l / ;
  7. 在hive中執行hdfs命令:去除 hdfs關鍵字即可
  8. 在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 位元組陣列
## 2、集合資料型別 ##
資料型別 描述 例子
STRUCT JAVA中的enum STRUCT{ "JOHN", "TOM" }
MAP 鍵值對型別 map{"first":"John","last":"Tom"}
ARRAY 陣列型別 array{1,2,3,4,5,6,7,8}
## 3、資料型別建表示例 ## CREATE TABLE empoyees( name STRING, salary FLOUT, subordinates ARRAY, deductions MAP
  1. 以下用如圖兩個表演示結果內容:

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;

五、檢視與索引

(一)檢視

  1. CREATE VIEW myview AS SELECT * FROM mytable; 建立檢視語法
  2. CREATE OR REPLACE VIEW myview AS SELECT * FROM mytable; 建立/更新檢視
  3. DROP VIEW [IF EXISTS] myview; 刪除檢視
  4. ALTER VIEW myview SET TBLPROPERTIES(key=value); 只能更改檢視元資料,而不能更改其他東西;

(二)索引

  1. 建立索引:
    CREATE INDEX myindex
     ON TABLE mytable(columnName)
     AS '索引處理器的全限定類名'
     WITH DEFERRED REBUILD		//如果使用者指定此選項,則新索引呈現空白狀態
     IN TABLE myindextable		//指定建立索引後的表名
     PARTITION(key=value);	//對此分割槽進行索引建立
    myindex:索引名稱
    columnName:建立索引的列的名稱
    myindextable:建立索引後的表名
  2. ALTER INDEX myindex ON TABLE mytable PARTITION(key=value) REBUILD; 修改索引
  3. SHOW FORMATTED INDEX ON mytable; 顯示索引
  4. DROP INDEX [IF EXISTS] myindex ON mytable; 刪除索引

六、模式設計

  1. 關係型資料庫中按照天數建立表,在Hive中改成按照天數建立分割槽。

  2. 分桶:
    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 為表/分割槽插入或載入本地資料的許可權
具體檢視轉載的部落格 [https://blog.csdn.net/yancychas/article/details/84202400](https://blog.csdn.net/yancychas/article/details/84202400) # 八、UDF/UDAF # #### 1、顯示函式/描述函式 ####
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 中,我們無需手動指定變換矩陣的每