使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何更快地插入数百万条记录? [关闭]

Db2 for i - RUNSQLSTM - 插入包含数百万条记录的脚本

从固定宽度的平面文件获取数百万条记录到 SQL 2000

在没有并行提示和批量收集的情况下删除数百万条记录

如何使用 Talend Open Studio 处理数百万条 MongoDB 记录并将其插入 Postgres

千万条数据批量插入数据库表