使用 hive sql 批量插入数百万条记录到 hive?
Posted
技术标签:
【中文标题】使用 hive sql 批量插入数百万条记录到 hive?【英文标题】:batch insert millions of records to hive using hive sql? 【发布时间】:2014-11-06 07:52:29 【问题描述】:我想准备样本数据以在配置单元表上进行测试以镶木地板格式存储。表格如下所示:
hive> CREATE TABLE exps (sn STRING, buildNum STRING, shortProdName
STRING, userIV STRING, cfs STRUCT<version : STRING, name : STRING,
objArray : ARRAY<STRUCT<id : STRING, properties : INT>> >) STORED AS PARQUET;
然后我写了一个sql文件说“sample.sql”,其中包含数百万行sql插入命令。
$ /opt/hive-0.13.1/bin/hive -f sample.sql
这会导致 hive 启动大量 map-reduce 作业并一个一个地执行,非常慢。
所以我的问题是:有没有更好的方法来做到这一点?
【问题讨论】:
sample.sql 包含什么? 很多行插入如:INSERT INTO TABLE EXPS select '"0017C5CAE03A"', '"4.0.3"','"TZ-205"', '"keu3zm4ctkzjweh8"', named_struct( 'Version','1','name','Default','objArray',array(named_struct('id','WLAN','properties',50973,'ZoneType',1,'SonicPointProfHandle',0) ,named_struct('id','WAN','properties',50973,'ZoneType',1,'SonicPointProfHandle',0))) 来自 dummy; 【参考方案1】:Hive 中没有虚拟表,因此 sample.sql 不起作用。
由于您需要使用 SQL 在 hive 中尝试 parquet 格式,我的建议是
-
将数据加载到 mysql 等关系型数据库中。
使用 Apache Sqoop 将数据从关系数据库导入 HDFS。
以 parquet 格式创建 Hive 表
将数据从 HDFS 加载到 Hive 表。
【讨论】:
【参考方案2】:我在 SQL 方面不是很专业,但我认为这是将数据插入数据库的唯一方法
INSERT INTO TABLE(c1,c2,...) VALUES(v1,v2,...);
【讨论】:
这是标准的插入命令,但是 OP 正在谈论批量插入,所以显然这对他们没有帮助......以上是关于使用 hive sql 批量插入数百万条记录到 hive?的主要内容,如果未能解决你的问题,请参考以下文章
Db2 for i - RUNSQLSTM - 插入包含数百万条记录的脚本