使用Hive SQL批量插入数百万条记录?

3

我想为Hive表准备样例数据,该表以parquet格式存储。表格如下:

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;

然后我编写了一个名为“sample.sql”的SQL文件,其中包含数百万行的SQL插入命令。

$ /opt/hive-0.13.1/bin/hive -f sample.sql

这将导致Hive启动大量的MapReduce作业并逐个执行,速度非常慢。

因此,我的问题是:是否有更好的方法来处理这个问题?


sample.sql包含什么内容? - Vijay Innamuri
许多插入行,例如: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))) from dummy; - Jacky
2个回答

1

Hive中没有虚拟表,因此sample.sql无法使用。

由于您需要在Hive中使用SQL尝试parquet格式,我的建议是:

  1. 将数据加载到关系型数据库(如mysql)中。
  2. 使用Apache Sqoop从关系型数据库导入数据到HDFS。
  3. 创建一个parquet格式的Hive表。
  4. 从HDFS加载数据到Hive表中。

-3

我在SQL方面不是很专业,但我认为这是将数据插入到数据库的唯一方法。

INSERT INTO TABLE(c1,c2,...) VALUES(v1,v2,...);

这是标准的插入命令,但OP正在谈论批量插入,所以显然这不会帮助他们... - benomatis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接