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

Hadoop 在一个FILTER语句中使用两个数据源,hadoop,apache-pig,Hadoop,Apache Pig,在我的pig脚本中,我从5个以上的数据源(配置单元表)读取数据,其中一个是主要的源数据,其余的是维度数据表。我正在尝试筛选主数据源关系(或别名)w.r.t其中一个维度关系中的某个值 例如 在我的pig脚本中,至少有20个实例需要在多个数据源之间匹配一些值,并生成一个新的关系。但是我也犯了一些错误 错误org.apache.pig.tools.grunt.grunt-错误1066:无法打开别名筛选的\u数据1的迭代器。 后端错误:标量在输出中有多行。第一:(…)第二:(…) 日志文件中的详细信息:

在我的pig脚本中,我从5个以上的数据源(配置单元表)读取数据,其中一个是主要的源数据,其余的是维度数据表。我正在尝试筛选主数据源关系(或别名)w.r.t其中一个维度关系中的某个值

例如

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

错误org.apache.pig.tools.grunt.grunt-错误1066:无法打开别名筛选的\u数据1的迭代器。 后端错误:标量在输出中有多行。第一:(…)第二:(…) 日志文件中的详细信息:/root/pig1403263965493.log

我也尝试使用“relation::field”方法,但没有用。或者,我连接这两个关系(数据源)以获得过滤数据,但我觉得,这会减慢执行过程,并转储不必要的大量数据

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

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

如果要通过单个ID匹配不同表中的记录,则必须使用连接,如下所示:

Where A::deptID = B::departmentID And A::sectionID = C::sectionID And A::cityID = D::cityID
如果您只想保留所有其他表中出现的记录,那么您可能需要执行一个
INTERSECT
,然后执行一个

FILTER BY someID IN someIDList

这是不可能的。你必须做一个
JOIN
。是的,WinnieNicklaus,我目前正在使用JOIN,用于20多个代码块。寻找替代方法;如果可以通过过滤器本身…对于那些在这里搜索时发现此帖子的人来说是一个很好的选择。
FILTER BY someID IN someIDList