Hive 常用操作
hive> SELECT age,grade FROM student1;
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 中的資料可以按指定欄位排序。