赞
踩
问题描述
现有几千条数据,需要插入到对应的Hive/Impala表中。安排给了一个同事做,但是等了好久,反馈还没有插入完成……看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际执行起来,速度很慢,每条数据都要耗时1s左右。比在MySQL中批量插入数据慢多了,因而抱怨Impala不太好用
问题分析
首先,必须明确的是,把每条数据处理成insert语句的方式,肯定是最低效的,不管是在MySQL中,还是在分布式组件Hive、Impala中。
这种方式的资源消耗,更多的花在了连接、SQL语句的解析、执行计划生成上,实际插入数据的开销还是相对较少的。
所以,要提高批量数据的插入,关键是减少无谓的资源开销,提高一条SQL的吞吐率,即通过尽量少的SQL条数,插入更多的数据。
解决方案
测试数据:
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
测试表:
create table if not exists test.test_batch_insert(
f1 string
) comment 'test for batch insert'
row format delimited fields terminated by '\t' lines terminated by '\n'
sto
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。