Pig - 如何在使用位置表示法时在JOIN之后引用FOREACH中的列?

时间:2016-06-19 19:54:27

标签: hadoop apache-pig hortonworks-data-platform

我有2个表订单和order_items

订单表包含(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] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200:日志文件中出现意外字符“$”的详细信息:   /home/6301dd50e3fac19f7c90fbf9898496/pig_1466356957630.log

1 个答案:

答案 0 :(得分:0)

您必须直接引用关系中的位置表示法。

例如,如果要从 ordersjoin 关系生成 order_date order_item_subtotal 字段,请使用以下语句。

orderrevenuebydate = FOREACH ordersjoin GENERATE $1, $9;

请注意,在连接操作之后, ordersjoin 关系将包含两个关系中的所有属性。