本文操作基于 弹性 MapReduce(EMR)。
Hive指定表的存储路径: hive可以在创建表的时候通过location指定表的存储路径,若不指定localtion则文件默认存储在hive-site.xml配置文件中hive.metastore.warehouse.dir配置项指向的路径。 此外,Hive的分区表还可以指定分区的存储路径。通过如下语句可以给分区指定:
1. 添加分区并指定location。例如:
alter table test add partition (b=1) location 'path_to_dir';
2. 修改已有分区的location。例如:
alter table test partition (b=1) set location 'path_to_dir';
分区表可以是外表也可以是内表。实际业务场景中常常将时间列作为分区的依据,时间久远的历史数据是冷数据,而新数据是热数据。可能有以下几个原因希望将部分数据存储到cos上:
1. hive建表
create table test (a int) partitioned by (b int);
2. 添加分区
alter table test add partition (b=1) location 'cosn://qiushan-1314/hive/test/b=1'
3. 插入数据
insert into test partition (b=1) values (1);
insert into test partition (b=1) values (2);
insert into test partition (b=1) values (3);
发现此处插入的数据仍存储在hdfs上
“Moving data to directory hdfs://HDFS3758/hive/test/b=1/.hive-staging_hive_2019-08-28_15-11-56_214_8585498400588849067-1/-ext-10000
Loading data to table default.test partition (b=1)”
4. 修改分区地址
alter table test partition (b=1) set LOCATION 'cosn://qiushan-1314/hive/test/b=1'
5. 迁移分区数据
hadoop distcp /usr/hive/warehouse/test/b=1 cosn://qiushan-1314/hive/tes
6. 删除hdfs上分区数据
hadoop fs -rm -r /usr/hive/warehouse/test/b=1
7. 查询分区数据
select * from test where b = 1;
Failed with exception Wrong FS: cosn://qiushan-1314/hive/test/b=1, expected: hdfs://10.10.10.10:4007
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
邀请人:岳涛,社区ID:7348459
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。