Hive---外部分区表的创建

本文介绍如何在Hive中创建外部表并添加分区,通过具体的SQL命令演示了整个过程,包括创建表结构、定义字段分隔符、指定HDFS存储位置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive> create external table tv2(id int,name string,sex string)  partitioned by(day int)
    > row format delimited                                                             
    > fields terminated by '\t'                                                        
    > location 'hdfs://hadoop11:9000/dir2';
OK
Time taken: 0.08 seconds
但是此时表中数据并没有显示,如下:
hive> select * from tv2;
OK
Time taken: 0.06 seconds
原因:没有加入分区
接下来我们加入分区.
hive> alter table tv2 add  partition(day=22) location 'hdfs://hadoop11:9000/dir2';
OK
Time taken: 0.216 seconds
在此查看数据:
hive> select * from tv2;
OK
1       zhang   man     22
2       ming    woman   22
3       yang    man     22
4       li      man     22
5       si      woman   22
6       youyou  man     22
7       liyou   man     22
8       haha    woman   22
1       zhang   man     22
2       ming    woman   22
3       yang    man     22
4       li      man     22
5       si      woman   22
6       youyou  man     22
7       liyou   man     22
8       haha    woman   22
Time taken: 0.176 seconds

后续我是这样操作的:

hive> create external table t4(id int,city string,name string,sex string) 
    > partitioned by(day int)
    > row format delimited
    > fields terminated by '\t';


hadoop fs -put word.txt  hdfs://ns1/user/dd_edw/zmy_test.db/t2;

指定partition:
alter table t4 add partition(day=10) location 'hdfs://ns1/user/dd_edw/zmy_test.db/t4';
### Hive 外部分区表的使用教程 #### 创建外部分区表 创建外部分区表的第一步是定义表结构并指定分区字段Hive允许用户通过`PARTITIONED BY`关键字来声明分区列[^2]。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS external_partitioned_table ( id INT, name STRING, value DOUBLE ) PARTITIONED BY (year INT, month INT) -- 定义分区字段 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/hive/external/partitioned/table'; -- 数据存储路径 ``` 上述语句中,`EXTERNAL`关键字表明这是一个外部表,而`LOCATION`指定了数据的实际存储路径[^5]。 #### 加载数据到外部分区表 加载数据时需要显式地为每个分区提供对应的参数。可以使用`LOAD DATA INPATH`命令或者手动将文件放置到对应分区目录下[^3]。 ```bash hdfs dfs -mkdir /user/hive/external/partitioned/table/year=2023/month=10 hdfs dfs -put /local/path/to/datafile.tsv /user/hive/external/partitioned/table/year=2023/month=10/ ``` 如果希望直接通过SQL操作完成,则可执行如下命令: ```sql ALTER TABLE external_partitioned_table ADD PARTITION (year=2023, month=10); LOAD DATA INPATH '/tmp/datafile.tsv' INTO TABLE external_partitioned_table PARTITION(year=2023, month=10); ``` 需要注意的是,对于外部分区表来说,即使删除表本身也不会影响底层的数据文件。 #### 查询性能优化 当查询涉及特定条件时(如过滤某个时间段内的记录),应充分利用分区特性减少扫描范围。例如: ```sql SELECT * FROM external_partitioned_table WHERE year = 2023 AND month >= 9; ``` 此查询仅访问满足条件的分区,从而显著提升效率。 #### Spark写入Hive外部分区表常见问题 在Spark框架向已存在的Hive外部分区表插入新数据过程中可能会遇到一些挑战。比如,默认情况下可能无法正常更新已有分区的内容[^4]。一种解决方案是在保存前动态设置目标路径以及覆盖模式: ```scala val df = spark.read.format("csv").option("header", "true").load("/input/csv/") df.write.mode("overwrite") // 或者 append 模式视需求而定 .format("orc") .partitionBy("year", "month") // 对齐hive表中的分区键名 .saveAsTable("default.external_partitioned_table"); ``` 注意这里假设了DataFrame Schema与目标表完全一致,并且启用了相应的配置项支持跨平台交互。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒得睁眼的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值