中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive視圖和索引簡單介紹

發布時間:2021-09-15 21:47:07 來源:億速云 閱讀:112 作者:chen 欄目:大數據

本篇內容主要講解“Hive視圖和索引簡單介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hive視圖和索引簡單介紹”吧!

一、Hive視圖

1.1 簡介

         Hive 中的視圖和 RDBMS 中視圖的概念一致,都是一組數據的邏輯表示,本質上就是一條 SELECT 語句的結果集。視圖是純粹的邏輯對象,沒有關聯的存儲 (Hive 3.0.0 引入的物化視圖除外),當查詢引用視圖時,Hive 可以將視圖的定義與查詢結合起來,例如將查詢中的過濾器推送到視圖中。

1.2 特點

  1. 不支持物化視圖

  2. 只查詢,不能做加載數據操作

  3. 視圖的創建,只是保存一份元數據,查詢視圖才執行對應的子查詢

  4. view定義中若包含了ORDER BY/LIMIT語句,當查詢視圖時也進行了ORDER BY/LIMIT語句操作,view當中定義的優先級更高 ;

  5. Hive視圖支持迭代視圖

1.3 創建視圖

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name   -- 視圖名稱
  [(column_name [COMMENT column_comment], ...) ]    --列名
  [COMMENT view_comment]  --視圖注釋
  [TBLPROPERTIES (property_name = property_value, ...)]  --額外信息
  AS SELECT ...;

創建視圖注意事項

  • CREATE VIEW創建具有給定名稱的視圖。如果已經存在具有相同名稱的表或視圖,則會引發錯誤。您可以使用IF NOT EXISTS跳過該錯誤。

  • 刪除基表并不會刪除視圖,需要手動刪除視圖;

  • 視圖是只讀的,不能用作LOAD / INSERT / ALTER的目標

  • 創建視圖時,如果未提供列名,則將從 SELECT 語句中自動派生列名;

  • 一個視圖可能包含ORDER BY和LIMIT子句。如果參照查詢還包含這些條款,查詢級別子句進行評估視圖條款(和之后在查詢的任何其它操作)。例如,如果視圖指定LIMIT 5,并且引用查詢執行為(從v LIMIT 10中選擇*),那么最多將返回5行。

準備數據

-- 創建測試表create  table default.user(
   id string , -- 主鍵
   sex string, -- 性別
   name string -- 名稱);-- 導入數據insert into default.user (id, sex, name)values ("1","男","張三"),("2","女","小花"),("3","男","趙柳"),("4","男","李嘿嘿");

創建一個測試視圖

hive (default)> create view if not exists  default.user_view as select * from default.user;OK
id      sex     nameTime taken: 0.181 seconds

1.4 查詢視圖

-- 查詢視圖內容呢select * from default.user_view;-- 查詢視圖結構desc default.user_view;-- 查詢視圖詳細信息desc formatted default.user_view;-- 查詢視圖 沒有指定的方式跟查詢所有表一樣show tables;

1.5 刪除視圖

-- 模板DROP VIEW [IF EXISTS] [db_name.]view_name;-- 刪除視圖 DROP  VIEW IF EXISTS user_view;

1.6 修改視圖屬性

語法:

ALTER VIEW [db_name.]view_name SET TBLPROPERTIES table_properties; table_properties:
  : (property_name = property_value, property_name = property_value, ...)

示例

alter  view  default.user_view set tblproperties ('name'='DSJLG','GZH'='DSJLG')

通過 desc formatted default.user_view;詳情信息

Hive視圖和索引簡單介紹

二、索引

2.1 簡介

         Hive 在 0.7.0 引入了索引的功能,索引的設計目標是提高表某些列的查詢速度。如果沒有索引,帶有謂詞的查詢(如’WHERE table1.column = 10’)會加載整個表或分區并處理所有行。但是如果 column 存在索引,則只需要加載和處理文件的一部分

2.2 創建索引模板

CREATE INDEX index_name     --索引名稱
  ON TABLE base_table_name (col_name, ...)  --建立索引的列
  AS index_type    --索引類型
  [WITH DEFERRED REBUILD]    --重建索引
  [IDXPROPERTIES (property_name=property_value, ...)]  --索引額外屬性
  [IN TABLE index_table_name]    --索引表的名字
  [ [ ROW FORMAT ...] STORED AS ...  
     | STORED BY ...
  ]   --索引表行分隔符 、 存儲格式
  [LOCATION hdfs_path]  --索引表存儲位置
  [TBLPROPERTIES (...)]   --索引表表屬性
  [COMMENT "index comment"];  --索引注釋

2.3 創建索引

我們在使用之前上面創建好的user表對id字段創建名字為user_index,索引存儲在user_index_table索引表中

create index user_index on table user(id) as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'with deferred rebuild  in table user_index_table;

此時索引表中是沒有數據的,需要重建索引才會有索引的數據。

2.4 重建索引

hive (default)> ALTER index user_index on user rebuild ;Query ID = root_20201015081313_879ce697-a6a4-4c38-a1a9-0e72a52feb6b
Total jobs = 1Launching Job 1 out of 1Number of reduce tasks not specified. Estimated from input data size: 1In order to change the average load for a reducer (in bytes):  set hive.exec.reducers.bytes.per.reducer=<number>In order to limit the maximum number of reducers:  set hive.exec.reducers.max=<number>In order to set a constant number of reducers:  set mapreduce.job.reduces=<number>Starting Job = job_1602711568359_0002, Tracking URL = http://node01:8088/proxy/application_1602711568359_0002/Kill Command = /export/servers/hadoop-2.6.0-cdh6.14.0/bin/hadoop job  -kill job_1602711568359_0002
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 12020-10-15 08:13:47,425 Stage-1 map = 0%,  reduce = 0%2020-10-15 08:13:48,546 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.66 sec2020-10-15 08:13:49,576 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 2.5 sec
MapReduce Total cumulative CPU time: 2 seconds 500 msec
Ended Job = job_1602711568359_0002
Loading data to table default.user_index_tableTable default.user_index_table stats: [numFiles=1, numRows=4, totalSize=231, rawDataSize=227]MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 2.5 sec   HDFS Read: 12945 HDFS Write: 581944 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 500 msec
OKTime taken: 12.85 seconds

         Hive 會啟動 MapReduce 作業去建立索引,建立好后查看索引表數據如下。三個表字段分別代表:索引列的值該值對應的 HDFS 文件路徑該值在文件中的偏移量

hive (default)> select * from user_index_table; OK
user_index_table.id     user_index_table._bucketname    user_index_table._offsets1       hdfs://node01:8020/user/hive/warehouse/user/000000_0 [0]2       hdfs://node01:8020/user/hive/warehouse/user/000000_0 [13]3       hdfs://node01:8020/user/hive/warehouse/user/000000_0 [26]4       hdfs://node01:8020/user/hive/warehouse/user/000000_0 [39]Time taken: 0.047 seconds, Fetched: 4 row(s)

2.5 自動使用索引

         默認情況下,雖然建立了索引,但是 Hive 在查詢時候是不會自動去使用索引的,需要開啟相關配置。開啟配置后,涉及到索引列的查詢就會使用索引功能去優化查詢

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;SET hive.optimize.index.filter=true;SET hive.optimize.index.filter.compact.minsize=0;

2.6 查看索引

show index on user;
Hive視圖和索引簡單介紹

2.7 刪除索引

刪除索引會刪除對應的索引表。

DROP INDEX [IF EXISTS] index_name ON table_name;

如果存在索引的表被刪除了,其對應的索引和索引表都會被刪除。如果被索引表的某個分區被刪除了,那么分區對應的分區索引也會被刪除。

2.8 索引的原理

         在指定列上建立索引,會產生一張索引表(Hive的一張物理表),里面字段包括:索引列的值該值對應的 HDFS 文件路徑該值在文件中的偏移量
         在執行索引字段查詢時候,首先額外生成一個MapReduce job,根據對索引列的過濾條件,從索引表中過濾出索引列的值對應的hdfs文件路徑及偏移量輸出到hdfs上的一個文件中,然后根據這些文件中的hdfs路徑和偏移量,篩選原始input文件,生成新的split,作為整個job的split,這樣就達到不用全表掃描的目的。

到此,相信大家對“Hive視圖和索引簡單介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北碚区| 郎溪县| 荥经县| 修武县| 普兰店市| 竹山县| 上林县| 民丰县| 抚松县| 漳州市| 夏津县| 杭锦后旗| 金坛市| 于田县| 屏边| 萍乡市| 都兰县| 镶黄旗| 湘阴县| 且末县| 淮安市| 郁南县| 广汉市| 连江县| 庆云县| 勃利县| 五常市| 杨浦区| 徐州市| 九台市| 精河县| 小金县| 谷城县| 岳阳市| 林口县| 区。| 安塞县| 高青县| 石河子市| 定南县| 海阳市|