2016-06-18 162 views
0

我是新来的hadoop 蜂巢,我迷惑约蜂巢的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

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

插入

查询结果可以通过使用插入件子句被插入到表中。

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

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

您的解决方案

每一个单列您执行给定的HQL所以每次映射减少运行。

如果你想在单个映射精简执行查询,然后

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

创建一个查询并执行它。如果你在这种情况下有更多的记录,你可以把它做成一批。

+0

感谢您的建议。 – tinyproxy

-2

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