2013-01-14 62 views
0

新豬用戶。我將mysql語句轉換爲pig,並提出了以下問題。我有2個表,我需要加入和加入的值有一個計算。我認爲這一定是簡單的問題。在Pig中加入計算

例如,我的表是MACHINE1machinemeans我join.Could找不到語法Pig手工製作的計算中加入。有什麼建議麼?

select region, os, group, f.machine, f.machine_users, f.machine_tm, 
    f.machine_users - g.users_per_machine outliers, 
    f.machine_tm - g.tm_per_machine outlying_tm, 
    tm_per_machine/(f.machine_tm+1) factor 
    from machine1 f 
    inner join machinemeans g using(region, os, group) 
    order by 4, 1, 2, 3 

THX

更新:謝謝,WinnieNicklaus。 我試過你的建議,但我得到一個標量輸出錯誤超過1行。這是我的代碼。

machine1 = LOAD 'S1' AS (

    block:chararray, 
    region:chararray, 
    os:chararray, 
    group:int, 
    machine:int, 
    machine_users:int, 
    machine_tm:float 
); 

machinemeans = LOAD 'S2' AS (

    region:chararray, 
    os:chararray, 
    group:int, 
    tot_machines:int, 
    tot_users:int, 
    users_per_machine:float, 
    tm_per_machine:float, 
    tm_per_user:float, 
    cnt_per_block:float, 
    cnt_per_user:float 
); 


imbalance = FOREACH (JOIN machine1 by (region,os,group), 
machine2 by (region,os,group))  
GENERATE 
    region,os,group, 
    machine1.machine, 
    machine1.machine_users, 
    machine1.machine_tm, 
    machine1.machine_users - machinemeans.users_per_machine, 
    machine1.machine_tm - machinemeans.tm_per_machine; 

回答

0

單個SQL查詢可能需要多個Pig拉丁語句。您引用的計算不完全在SQL join中;它確實在select聲明中,並且SQL中的select ... from ...基本上對應於Pig的FOREACH ... GENERATE ...。對JOIN的結果做一個FOREACH。例如:

result = 
    FOREACH (
     JOIN table1 BY key1, table2 BY key2 
    ) GENERATE 
     table1.field1, 
     table1.field2, 
     table2.field3, 
     table1.field4 - table2.field5; 

如果你需要做一個計算,以獲得聯接鍵,但稍後並沒有在意這些,你甚至可以做上述

JOIN table1 BY (field1+field4), table2 BY myUDF(field3); 
+0

編輯。特定錯誤消息:「標量在輸出中有多行。」 –

+0

沒關係。忘記在連接中使用::運算符。現在它工作正常。謝謝。 –