插入和加载数据之间的hive差异

时间:2016-06-18 14:25:11

标签: hadoop hive

我是 hadoop hive 的新手,我对hive的insert intoload data声明感到困惑。

当我执行INSERT INTO TABLE_NAME (field1, field2) VALUES(value1, value2);时,hiveserver将执行mapReduce任务。

当我执行LOAD DATA LOCAL INPATH PATH_TO_MY_DATA INTO TABLE TABLE_NAME;时,它只从文件加载数据而不执行任何其他操作。

我用python编写程序,这是我的问题,如果我使用pyhs2并使用insert语句来保存数据记录,每条记录都会执行mapReduce任务,而且速度非常慢。 我应该先将数据保存到某个地方,然后使用load data语句加载它吗?

2 个答案:

答案 0 :(得分:3)

<强>加载 在将数据加载到表中时,Hive不会进行任何转换。加载操作当前是纯复制/移动操作,可将数据文件移动到与Hive表对应的位置。

插入

可以使用insert子句将查询结果插入表中。

INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;

在加载文件中复制到表中的所有数据时,在插入中你可以根据某些条件放入数据。

您的解决方案

对于你执行给定hql的每一行,所以每次map reduce run。

如果您想在单个mapreduce中执行查询,那么

INSERT INTO TABLE students
  VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);

创建一个查询并执行它。如果您在这种情况下有更多记录,则可以批量生产。

答案 1 :(得分:-2)

INSERT OVERWRITE将覆盖表或分区中的所有现有数据 和INSERT INTO将附加到保持现有的表或分区 数据(ref at apache.org)。