【发布时间】:2014-06-20 11:53:31
【问题描述】:
在我的猪脚本中,我从超过 5 个数据源(Hive 表)中读取数据,其中一个是主要源数据,其余是维度数据表。我正在尝试过滤主要数据源关系(或别名)w.r.t 在一个维度关系中的某个值。
例如
-- 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:无法打开别名过滤数据 1 的迭代器。 后端错误:标量在输出中有不止一行。第一个:(.....)第二个:(......) 日志文件中的详细信息:/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
【问题讨论】:
-
这是不可能的。你必须做一个
JOIN。 -
是的 WinnieNicklaus,目前正在使用 JOIN,用于 20 多个代码块。寻找替代方法;如果可以通过 FILTER 本身获得....
-
对于在寻找ERROR 1066: Unable to open iterator for alias 时发现此帖子的人,这里是generic solution。
标签: hadoop apache-pig