HIve学习:Hive分区修改
文章目錄
- 什么是Hive的分區(qū)
- 分區(qū)意義
- 分區(qū)技術(shù)
- 分區(qū)方法和本質(zhì)
- 創(chuàng)建一級(jí)分區(qū)表
- 創(chuàng)建二級(jí)分區(qū)表
- 如何修改Hive的分區(qū)
- 查看分區(qū)
- 添加分區(qū)
- 分區(qū)名稱(chēng)修改
- 修改分區(qū)路徑
- 刪除分區(qū)
- 分區(qū)類(lèi)別
- hive的嚴(yán)格模式
- 笛卡爾積
- 分區(qū)表沒(méi)有分區(qū)字段過(guò)濾
- order by不帶limit查詢
- bigint和string比較
- bigint和double比較
- hive讀寫(xiě)模式:
什么是Hive的分區(qū)
分區(qū)意義
hive分區(qū)的意義是避免全表掃描,從而提高查詢效率。默認(rèn)使用全表掃描。
分區(qū)技術(shù)
[PARTITIONED BY (COLUMNNAME COLUMNTYPE [COMMENT 'COLUMN COMMENT'],...)]1、hive的分區(qū)名區(qū)分大小寫(xiě)
2、hive的分區(qū)字段是一個(gè)偽字段,但是可以用來(lái)進(jìn)行操作
3、一張表可以有一個(gè)或者多個(gè)分區(qū),并且分區(qū)下面也可以有一個(gè)或者多個(gè)分區(qū)。
4、分區(qū)字段使用表外字段
分區(qū)方法和本質(zhì)
分區(qū)的方式:使用日期、地域等方式將數(shù)據(jù)分散開(kāi)
分區(qū)的本質(zhì):在表的目錄或者是分區(qū)的目錄下再創(chuàng)建目錄,分區(qū)的目錄名為指定字段=值(比如:dt=2019-09-09)
創(chuàng)建一級(jí)分區(qū)表
create table if not exists part1( id int, name string ) partitioned by (dt string) row format delimited fields terminated by ' ';加載數(shù)據(jù)
load data local inpath '/home/hivedata/t1' overwrite into table part1 partition(dt='2019-09-09'); load data local inpath '/hivedata/user.txt' into table part1 partition(dt='2018-03-20');查詢語(yǔ)句
select * from part1 where dt='2018-03-20'創(chuàng)建二級(jí)分區(qū)表
create table if not exists part2( id int, name string ) partitioned by (year int,month int) row format delimited fields terminated by ' ';加載數(shù)據(jù)
load data local inpath '/home/hivedata/t1' overwrite into table part2 partition(year=2019,month=9); load data local inpath '/home/hivedata/t' overwrite into table part2 partition(year=2019,month=10);查詢語(yǔ)句
select * from part2 where year=2019 and month=10;如何修改Hive的分區(qū)
查看分區(qū)
show partitions 表名;添加分區(qū)
alter table part1 add partition(dt='2019-09-10'); alter table part1 add partition(dt='2019-09-13') partition(dt='2019-09-12'); alter table part1 add partition(dt='2019-09-11') location '/user/hive/warehouse/qf1704.db/part1/dt=2019-09-10';分區(qū)名稱(chēng)修改
alter table part1 partition(dt='2019-09-10') rename to partition(dt='2019-09-14');修改分區(qū)路徑
--錯(cuò)誤使用 alter table part1 partition(dt='2019-09-14') set location '/user/hive/warehouse/qf24.db/part1/dt=2019-09-09'; --正確使用,決對(duì)路徑 alter table part1 partition(dt='2019-09-14') set location 'hdfs://hadoo01:9000/user/hive/warehouse/qf24.db/part1/dt=2019-09-09';刪除分區(qū)
alter table part1 drop partition(dt='2019-09-14'); alter table part1 drop partition(dt='2019-09-12'),partition(dt='2019-09-13');分區(qū)類(lèi)別
靜態(tài)分區(qū):加載數(shù)據(jù)到指定分區(qū)的值。
動(dòng)態(tài)分區(qū):數(shù)據(jù)未知,根據(jù)分區(qū)的值來(lái)確定需要?jiǎng)?chuàng)建的分區(qū)。
混合分區(qū):靜態(tài)和動(dòng)態(tài)都有。
strict:嚴(yán)格模式必須至少一個(gè)靜態(tài)分區(qū)
nostrict:可以所有的都為動(dòng)態(tài)分區(qū),但是建議盡量評(píng)估動(dòng)態(tài)分區(qū)的數(shù)量。
使用案例:
create table dy_part1( id int, name string ) partitioned by (dt string) row format delimited fields terminated by ' ' ;load data local inpath '/home/hivedata/t1' overwrite into table dy_part1 partition(dt='2019-09-09');set hive.exec.mode.local.auto=true; insert into table dy_part1 partition(dt) select id, name, dt from part1 ;混合分區(qū): create table if not exists dy_part2( id int, name string ) partitioned by (year int,month int) row format delimited fields terminated by ' ' ;set hive.exec.mode.local.auto=true; set hive.exec.dynamic.partition.mode=strict; insert into table dy_part2 partition(year=2019,month) select id, name, month from part2 where year=2019 ;hive的嚴(yán)格模式
<property><name>hive.mapred.mode</name><value>nonstrict</value><description>The mode in which the Hive operations are being performed.In strict mode, some risky queries are not allowed to run. They include:Cartesian Product.No partition being picked up for a query.Comparing bigints and strings.Comparing bigints and doubles.Orderby without limit.</description></property>笛卡爾積
set hive.mapred.mode=strict; select * from dy_part1 d1 join dy_part2 d2 ;分區(qū)表沒(méi)有分區(qū)字段過(guò)濾
set hive.mapred.mode=strict; select * from dy_part1 d1 where d1.dt='2019-09-09' ;不行 select * from dy_part1 d1 where d1.id > 2 ;select * from dy_part2 d2 where d2.year >= 2019 ;order by不帶limit查詢
select * from log3 order by id desc ;bigint和string比較
(bigint和string比較)Comparing bigints and strings.bigint和double比較
(bigint和double比較)Comparing bigints and doubles.hive讀寫(xiě)模式:
Hive是一個(gè)嚴(yán)格的讀時(shí)模式。 寫(xiě)數(shù)據(jù)不管數(shù)據(jù)正確性,讀的時(shí)候,不對(duì)則用NULL替代。
mysql是一個(gè)的寫(xiě)時(shí)模式。 寫(xiě)的時(shí)候檢查語(yǔ)法,不okay就會(huì)報(bào)錯(cuò)。
總結(jié)
以上是生活随笔為你收集整理的HIve学习:Hive分区修改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Kafka笔记:kafka原理简介以及架
- 下一篇: 2020年终总结一下吧