1. 程式人生 > >Hive 常用操作

Hive 常用操作

hive> SELECT age,grade FROM student1;

OK

22 大三

23 大二

22

大三

24

大四

23

大三


Time taken: 0.072 seconds, Fetched: 5 row(s)

hive> SELECT DISTINCT age,grade FROM student1;

OK

22 大三

23 大三

23 大二

24 大四

Time taken: 127.397 seconds, Fetched: 4 row(s)

hive> SELECT DISTINCT age FROM student1;

OK 22 23 24

Time taken: 106.21 seconds, Fetched: 3 row(s)

(5)limit限制查詢

hive> SELECT * FROM student1 LIMIT 4; 

OK

 201501001 張三 22 男北京大三 

201501003 李四 23 男上海大二 

201501004 王娟 22 女廣州大三 

201501010 周王 24 男深圳大四 

Time taken: 0.253 seconds, Fetched: 4 row(s)

(6) GROUP BY 分組查詢

group by 分組查詢在資料統計時比較常用,接下來講解 group by 的使用。

1) 建立一個表 group_test,表的內容如下。

hive> create table group_test(uid STRING,gender STRING,ip STRING) row format delimited fields terminat

group_test 表中匯入資料。

hive> LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/user.txt' INTO TABLE group_test;

2) 計算表的行數命令如下。

hive> select count(*) from group_test;

3) 根據性別計算去重使用者數。

首先建立一個表 group_gender_sum

hive> create table group_gender_sum(gender STRING,sum INT);

將表 group_test 去重後的資料匯入表 group_gender_sum。

hive> insert overwrite table group_gender_sum select group_test.gender,count(distinct group_test.uid)

同時可以做多個聚合操作,但是不能有兩個聚合操作有不同的 distinct 列。下面正確合法的聚合操作語句。

首先建立一個表 group_gender_agg

hive> create table group_gender_agg(gender STRING,sum1 INT,sum2 INT,sum3 INT);

將表 group_test 聚合後的資料插入表 group_gender_agg。

hive> insert overwrite table group_gender_agg select group_test.gender,count(distinct group_test.uid),

但是,不允許在同一個查詢內有多個 distinct 表示式。下面的查詢是不允許的。

hive> insert overwrite table group_gender_agg select group_test.gender,count(distinct group_test.uid),

這條查詢語句是不合法的,因為 distinct group_test.uid 和 distinct group_test.ip 操作了

uid 和 ip 兩個不同的列。

(7) ORDER BY 排序查詢

ORDER BY 會對輸入做全域性排序,因此只有一個 Reduce(多個 Reduce 無法保證全域性有序)會導致當輸入規模較大時,需要較長的計算時間。使用 ORDER BY 查詢的時候,為了優

化查詢的速度,使用 hive.mapred.mode 屬性。

hive.mapred.mode = nonstrict;(default value/預設值) hive.mapred.mode=strict;

與資料庫中 ORDER BY 的區別在於,在 hive.mapred.mode=strict 模式下必須指定limit 

否則執行會報錯。

hive> set hive.mapred.mode=strict;

hive> select * from group_test order by uid limit 5; Total jobs = 1

.............

Total MapReduce CPU Time Spent: 4 seconds 340 msec

OK

01

male

192.168.1.2

01

male

192.168.1.32

01

male

192.168.1.26

01

male

192.168.1.22

02

female

192.168.1.3


Time taken: 58.04 seconds, Fetched: 5 row(s)

(8) SORT BY 查詢

sort by 不受 hive.mapred.mode 的值是否為 strict 和 nostrict 的影響。sort by 的資料只

能保證在同一個 Reduce 中的資料可以按指定欄位排序。