hive查看一张表的分区字段_Hive表分区与索引
hive表分區
表分區是指將數據按照物理分層的方式進行區分開,加快查詢的速度,同時也起到數據快照的作用!
創建分區表的關鍵字:partitioned by ,可以指定單個字段也可以指定多個字段;
partitioned by (dt String,country string);
create table pt_test(ts bigint,line string)
partitioned by (dt String,country string);
往分區表插入數據:
load data local inpath '/root/hive/partitions/file1' into table pt_test partition (dt='2001-01-01',country='GB’);
動態分區不能使用load加載數據,需要使用insert into
hive靜態分區和動態分區
hive支持兩種類型的分區:靜態分區和動態分區
靜態分區與動態分區的主要區別在于靜態分區是手動指定,而動態分區是通過數據來進行判斷。詳細來說,靜態分區的列實在編譯時期,通過用戶傳遞來決定的;動態分區只有在 SQL 執行時才能決定
默認創建的分區是靜態分區,如果要指定動態分區可以通過以下配置:
查看表分區:
show partitions tbl;
如果要配置動態分區修改以下兩個配置:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
hive分桶
當單個分區或者表中的數據量越來越大,當分區不能更細粒的劃分數據時,采用分桶技術將數據更細粒度的劃分和管理。
分桶關鍵字:BUCKET
指定分桶的字段:clustered by (uid)
創建一個分桶表:
create table if not exists bucket(
uid int,
uname string,
uage int
)
clustered by (uid) into 4 buckets
row format delimited
fields terminated by ‘,’
加載數據:
load data local inpath '/usr/local/hive/test/3.txt' into table buc1 ;
分桶查詢測試:
select * from buc1 cluster by (uid) ;
分桶表的查詢:
查詢全部
select * from buc3;
select * from buc3 tablesample(bucket 1 out of 1)
查詢第幾個桶數據
select * from buc3 tablesample(bucket 1 out of 4 on uid); //除4余0
select * from buc3 tablesample(bucket 1 out of 2 on uid);
tablesample(bucket x out of y on uid)
x:代表從第幾桶開始查詢
y:查詢的總桶數,y可以是總的桶數的倍數或者因子;x不能大于y
分區與分桶:
1、分區使用的是表外字段,分桶使用的是表內字段
2、分桶是更細粒度的劃分、管理數據,更多用來做數據抽樣、JOIN操作
3、分區是粗粒度的將數據隔離,分桶是更加細粒度的將數據隔離
hive視圖
1、視圖是一個虛表,一個邏輯概念,可以概括出多張數據表
表是物理概念,數據放在表中,視圖是虛表,操作視圖和操作表是一樣的,只不過視圖下面不存儲具體的數據
視圖在創建時候,只是保存了一份元數據,當查詢視圖的時候,才開始執行視圖對應的 那些子查詢
2、視圖是建立在已有表的基礎上,視圖賴以建立的這些表稱為基表
3、視圖可以簡化復雜的查詢
4、視圖只能查詢,不能 Load/Insert/Update/Delete 數據;
create view 視圖表名 as select 基表1.字段1,基表1.字段2,基表2.字段1 ...... from 庫名1.表名 庫名2.表名 where 基表1.字段=基表2.字段
在mysql或者oracle中,視圖是具體的存儲數據的,一般稱之為物化,物化之后對于一些復雜的查詢查詢可以提升效率
視圖是只讀的,只允許修改元數據中的tblproperties屬性信息
hive視圖的一些查詢語句:
show views;
desc view_cdt;
查詢視圖
select * from view ;
刪除視圖:
drop view view_cdt;
hive索引
Hive從0.7.0版本開始加入了索引,目的是提高Hive表指定列的查詢速度。沒有索引的時候,Hive在執行查詢時需要加載整個表或者整個分區,然后處理所有的數據,但當在指定列上存在索引,再通過指定列查詢時,那么只會加載和處理部分文件
索引是一種以空間換取時間的方式
hive索引的原理:
Hive的索引其實是一張索引表(Hive的物理表),在表里面存儲索引列的值,該值對應的HDFS的文件路徑,該值在數據文件中的偏移量。
當Hive通過索引列執行查詢時,首先通過一個MR Job去查詢索引表,根據索引列的過濾條件,查詢出該索引列值對應的HDFS文件目錄及偏移量,并且把這些數據輸出到HDFS的一個文件中,然后再根據這個文件中去篩選原文件,作為查詢Job的輸入。
hive索引的好處:
可以避免全表掃描和資源浪費
可以加快含有group by的語句的查詢速度
hive索引的語法
創建索引,未加載數據
create index test_index on table test(id)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
in table test;
生成索引數據
alter index test_index on test rebuild;
hive索引的一些缺點:
使用過程繁瑣
需要額外的Job去掃描表,時間較長
數據更新,索引不會自動更新,需要手動進行更新
希望本文對你有幫助!
感謝關注“碼農星球”。本文版權屬于“碼農星球”。我們提供咨詢和培訓服務,關于本文有任何困惑,請關注并聯系我們。
總結
以上是生活随笔為你收集整理的hive查看一张表的分区字段_Hive表分区与索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html语言无序下拉菜单,(4条消息)H
- 下一篇: PHP独立ip统计,通过nginx日志统