2013-01-14 4 views
0

새 돼지 사용자. 나는 mysql 문을 돼지로 변환하고 아래의 문제에 대처했다. 나는 합치기 위해서 필요한 2 개의 테이블을 가지고 있으며 합쳐진 값은 계산이있다. 나는 그것이 단순한 문제 여야한다고 생각한다.돼지에서 결합 계산 수행

예를 들어, 내 테이블은 내가 계산에 참여하기 위해 Pig 설명서의 구문을 찾을 join.Could 기계 1machinemeans 있습니다. 어떤 제안?

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 

들으

업데이트 : 감사합니다, 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 Latin 문이 필요할 수 있습니다. 참조하는 계산은 SQL join에 정확하게 나와 있지 않습니다. 그것은 실제로 select 진술에 있고, select ... from ...은 SQL에서 기본적으로 돼지의 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

신경 쓰지 마라. 조인에서 :: 연산자를 사용하는 것을 잊었습니다. 지금은 잘 작동합니다. 감사. –