Pig - 使用位置表示法时如何在 JOIN 后引用 FOREACH 中的列?
Posted
技术标签:
【中文标题】Pig - 使用位置表示法时如何在 JOIN 后引用 FOREACH 中的列?【英文标题】:Pig - How to reference columns in a FOREACH after a JOIN when using positional notation? 【发布时间】:2016-06-19 19:54:26 【问题描述】:我有 2 个表 orders 和 order_items
orders 表包含 (order_id, order_date,order_customer_id, order_status, order_month) order_items 包含(order_item_id、order_item_order_id、order_item_product_id、order_item_quantity、order_item_subtotal、order_item_product_price)
这些表由 orders.order_id 和 order_items.order_item_order_id 连接 未提供数据类型,因此使用位置表示法。
orders = LOAD '/user/horton/orders' USING PigStorage(',');
order_items = LOAD '/user/horton/orders' USING PigStorage(',');
ordersjoin = JOIN orders BY $0, order_items BY $1 ;
orderrevenuebydate = FOREACH ordersjoin GENERATE orders::$1, order_items::$4;
尝试为 orderrevenuebydate 生成 FOREACH 时出现以下错误
意外字符 '$' 2016-06-19 19:17:22,757 [main] 错误 org.apache.pig.tools.grunt.Grunt - 错误 1200:意外字符“$”日志文件中的详细信息: /home/6301dd50e3fac19f7c90fbf9898496/pig_1466356957630.log
【问题讨论】:
【参考方案1】:您必须直接从关系中引用位置符号。
例如,如果您想从 ordersjoin 关系中生成 order_date 和 order_item_subtotal 字段,请使用以下语句。
orderrevenuebydate = FOREACH ordersjoin GENERATE $1, $9;
请注意,在连接操作之后,ordersjoin 关系将包含来自两个关系的所有属性。
【讨论】:
以上是关于Pig - 使用位置表示法时如何在 JOIN 后引用 FOREACH 中的列?的主要内容,如果未能解决你的问题,请参考以下文章
Pig Join - 如何连接具有多个字段的两个表,其中键中的一个字段是可选的?