好像我在加入后不知何故把钥匙取下来了。
上下文
我们的目标是从表2获取所有记录,这些记录只包含表1中不同的成员id。
作为一个新手,我很欣赏为实现这一目标而提供的最佳实践指南,以及关于为什么会出现“投影场”错误的任何评论。
我试过的
-- assume %default vals set for path_1 and path_2 to data
-- load the data
table_1 = LOAD '$path_1' as (day, member_id, country);
table_2 = LOAD '$path_2' as (day, member_id, country);
-- get distinct member_id's from table_1
table_1_ids = DISTINCT(FOREACH table_1 GENERATE member_id as member_id);
-- get all records from table_2 that only have table_1_ids
new_table_2 = JOIN table_1_ids BY member_id, table_2 BY member_id;
错误
字段投影无效。架构中不存在投影字段[member\u id]:表\u 1\u id::member\u id:bytearray,表\u 2::day:bytearray,表2::成员id:bytearray,表2::country:bytearray.
2条答案
按热度按时间eni9jsuy1#
首先,你没有在join之后提供脚本,但是我假设你有一些
generate
声明。联接后,所有列都重命名为<alias_name>::<field_name>
. 就像你在野外一样(member_id
)如果两个别名中的名称相同,那么join之后就不能用它的简单名称来引用它。你得用它的全名table_1_ids::member_id
或者table_2::member_id
(它们具有相同的值,但在联接结果中仍然是两个不同的字段)。希望这有帮助。gtlvzcf82#
感谢@piyus和@nazar的评论。获得所需结果的一种方法是i)唯一地标记要连接的键,以及ii)分离distinct语句: