hive分区表插入/导入数据

博客介绍了Hive数据库分区相关内容。数据库分区有水平和垂直两种形式,常用水平分区。详细说明了Hive建立分区表、向分区表插入数据的三种方式(静态、动静混合、动态),还提及动态分区相关参数设置,以及四种数据导入方式,同时对比了INSERT INTO和INSERT OVERWRITE的区别。

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

数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区。水平分区是对表进行行分区。而垂直分区是对列进行分区,一般是通过对表的垂直划分来减少目标表的宽度,常用的是水平分区.

1. hive建立分区表

create external table if not exists tablename(
a string,
b string)
partitioned by (year string,month string)
row format delimited fields terminated by ','
stored as orc

2. 向分区表插入数据

2.1. 静态插入数据

要求插入数据时指定与建表时相同的分区字段

INSERT OVERWRITE TABLE tablename partition(year='2017', month='03')
SELECT a, b
FROM tablename2

2.2 动静混合分区插入

要求指定部分分区字段的值

INSERT OVERWRITE TABLE tablename partition(year='2017', month)
SELECT a, b
FROM tablename2;

2.3. 动态分区插入

只指定分区字段,不用指定值

INSERT OVERWRITE TABLE tablename partition(year, month)
SELECT a, b
FROM tablename2;

3. hive动态分区相关参数设置

使用动态分区表必须配置的参数:

--(默认false),表示开启动态分区功能
set hive.exec.dynamic.partition =true;
 
--(默认strict),表示允许所有分区都是动态的,strict/nonstrict,strict 要求至少包含一个静态分区列,nonstrict则无此要求
set hive.exec.dynamic.partition.mode = nonstrict; 

动态分区相关的调优参数:

--(默认100,一般可以设置大一点,比如1000).表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions.pernode=100 
 --默认1000,表示一个动态分区语句可以创建的最大动态分区个数,超出报错
set hive.exec.max.dynamic.partitions =1000
--默认10000,全局可以创建的最大文件个数,超出报错。
set hive.exec.max.created.files =10000 

4. hive导入方式

hive包括以下四种数据导入方式:

  • 从本地文件系统中导入数据到Hive表;
  • 从HDFS上导入数据到Hive表;
  • 在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中;
  • 从别的表中查询出相应的数据并导入到Hive表中。

INSERT INTO 与 INSERT OVERWRITE 都可以向hive表中插入数据,但是INSERT INTO直接追加到表中数据的尾部,而INSERT OVERWRITE会重写数据,即先进行删除,再写入。如果存在分区的情况,INSERT OVERWRITE会只重写当前分区数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

香山上的麻雀1008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值