天天看點

hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

文章目錄

  • 1 準備資料
  • 2 取出所有行和列
  • 3 限制傳回行數
  • 4 選取指定的列
  • 5 重命名列
  • 6 單行注釋
  • 7 distinct 去重
  • 8 group by 去重

select語句是最基本最常用的sql語句,也非常簡單。

1 準備資料

運作下面代碼,在test資料庫,建立一個test_zw表,并插入幾條測試資料。

drop table if exists test.test_zw;
CREATE TABLE if not exists test.test_zw(
  name string COMMENT '姓名',
  course string comment '課程',
  score double comment '成績'

)
COMMENT '測試表'
STORED as parquet TBLPROPERTIES('parquet.compression'='SNAPPY');
  
-- 插入資料 
insert into test.test_zw values
('小王','A',100),
('小李','A',90),
('小張','A',90),
('小李','B',80),
('小紅','A',80),
('小張','B',80),
('小紅','B',100);
           

2 取出所有行和列

使用星号可以選取所有的列,總共有7條資料,全部傳回。

select *
from test.test_zw
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

3 限制傳回行數

使用limit可以限制傳回的行數,當資料表有幾千萬甚至幾十億資料時,不限制傳回行數會出問題,甚至可能搞挂系統,好在大部分的查詢系統都有預設的行數限制。限制3行資料,因為沒有排序,傳回的資料可能不一樣。

select *
from  test.test_zw
limit 3
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

4 選取指定的列

使用星号傳回所有列,在寬表中傳回字段多,并不是最佳實踐,最佳實踐是隻傳回需要的列。有些公司可能禁止使用select * 奧。

select name,course,score
from  test.test_zw
limit 3
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

5 重命名列

英文字段名不太友好,可以進行重命名。使用as關鍵字進行重命名,as也可以省略。注意中文字段名要用反引号括起來,不然會出錯。反引号就是鍵盤左上角esc下面那個鍵,按shift可以出來。

select name as `姓名`
,course as `課程`
,score  `成績`
from  test.test_zw
limit 3
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

6 單行注釋

注釋後的代碼不執行,也可以用來進行代碼解釋,多寫注釋,生活簡單。

-- 讀取學生成績資料
select name,course,score
from  test.test_zw  
-- limit 3  -- 限制三行
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

7 distinct 去重

distinct關鍵字可以去重,傳回不重複的學生姓名。

select distinct name
from  test.test_zw
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

distinct是作用在整行,而不是一個字段,傳回不重複的姓名和課程

select distinct name,course
from  test.test_zw
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重

資料量大的話,使用distinct去重會很耗資源,很多公司限制使用distinct關鍵字。

8 group by 去重

groupby分組,剛好可以用來去重,當資料量大時,效率比distinct高很多,傳回不重複的姓名。

select name
from  test.test_zw
group by name
           
hive-sql簡單查詢之select語句1 準備資料2 取出所有行和列3 限制傳回行數4 選取指定的列5 重命名列6 單行注釋7 distinct 去重8 group by 去重