Pig Latin在一个FILTER语句中使用两个数据源

时间:2014-06-20 11:53:31

标签: hadoop apache-pig

在我的猪脚本中,我正在读取来自5个以上数据源(Hive表)的数据,其中一个是主要的源数据,其余是维度数据表。我试图在维度关系之一中过滤主数据源关系(或别名)w.r.t中的某些值。

E.g。

 -- main_data is main data source and dept_data is department data
 filtered_data1 = FILTER main_data BY deptID == dept_data.departmentID;

 filtered_data2 = FOREACH filtered_data1 GENERATE $0, $1, $3, $7; 

在我的猪脚本中,至少有20个实例,我需要匹配多个数据源之间的某些值并产生新的关系。但是我得到了一些错误

错误org.apache.pig.tools.grunt.Grunt - 错误1066:无法打开别名filtered_data1的迭代器。 后端错误:标量在输出中有多行。 1 :( .....)第2名:( ....) 日志文件的详细信息:/root/pig_1403263965493.log

我尝试使用" relation :: field"方法也没用。或者,我加入这两个关系(数据源)来获取过滤数据,但我觉得,这将减慢执行过程,并且不必要的大数据将被转储。

请指导我如何在一个FILTER语句中使用两个或多个数据源,就像在SQL中一样,这样我就可以避免使用JOIN语句并从FILTER语句本身完成它。

Where A.deptID = B.departmentID And A.sectionID = C.sectionID And A.cityID = D.cityID

1 个答案:

答案 0 :(得分:0)

如果您想通过单个ID匹配来自不同表的记录,您几乎必须使用连接,如下所示:

/admin/

如果您只想保留所有其他表格中的记录,您可能会选择Where A::deptID = B::departmentID And A::sectionID = C::sectionID And A::cityID = D::cityID 然后

INTERSECT