不多說,直接上干貨!
可以先,從MySQL里的視圖概念理解入手
視圖是由從數據庫的基本表中選取出來的數據組成的邏輯窗口,與基本表不同,它是一個虛表。在數據庫中,存放的只是視圖的定義,而不存放視圖包含的數據項,這些項目仍然存放在原來的基本表結構中。
視圖可以被定義為多個表的連接,也可以被定義為只有部分列可見,也可為部分行可見。
視圖的作用有:
首先,可以簡化數據查詢語句
其次,可以使用用戶能從多角度看待同一數據
然后,通過引入視圖可以提高數據的安全性
最后,視圖提提供了一定程度的邏輯獨立性等。
引入視圖機制帶來的好處:
通過引入視圖機制,用戶可以將注意力集中在其關心的數據上(而非全部數據),這樣就大大提高了用戶效率與用戶滿意度,而且如果這些數據來源於多個基本表結構,或者數據不僅來自於基本表結構,還有一部分數據來源於其他視圖,並且搜索條件又比較復雜時,需要編寫的查詢語句就會比較煩瑣,此時定義視圖就可以使數據的查詢語句變得簡單可行。
定義視圖可以將表與表之間的復雜的操作連接和搜索條件對用戶不可見,用戶只需要簡單地對一個視圖進行查詢即可,故增加了數據的安全性,但不能提高查詢效率。
Hive視圖是一種無關底層存儲的邏輯對象。視圖中的數據是SELECT查詢返回的結果。在視圖選定后才會開始執行SELECT查詢。
需要注意的是,視圖是只讀的,不能向視圖中插入或是加載數據。
下面是一個創建並使用視圖的例子:
create view group_by_year_vw
as
select year,count(*) as video_ct from videos group by year;
select * from group_by_year_vw;
視圖通常被用作將數據發布給外部客戶端的抽象層。視圖可以使用穩定的公開的列名和數據類型來創建。
視圖可以允許在不影響下游數據消費者的情況下修改內部的表結構。
一定要理解,創建視圖,是基於表來創建得到視圖的。
步驟一:創建一個測試表
create table test(id int,name string);
desc test;
結果是
id int
name string
步驟二:基於表 test 創建一個 test_view 視圖
CREATE VIEW test_view(
id,
name_length
)
AS SELECT id,length(name) FROM test;
步驟三:查看 test_view 視圖屬性
DESC test_view;
步驟四:查看視圖結果
SELECT * FROM test_view;
建議,學習,Hive的視圖,與HBase里的視圖(包括HBase的概念視圖、HBase的物理視圖)對比學習。
HBase里的物理視圖
HBase里的概念視圖
同時,大家可以關注我的個人博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/
人生苦短,我願分享。本公眾號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和個人學習工作的精華干貨知識,一切來於互聯網,反饋回互聯網。
目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及平常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在群里,每天必須有收獲
以及對應本平台的QQ群:161156071(大數據躺過的坑)



