0

新しい豚のユーザー。mysqlステートメントをpigに変換し、以下の問題に直面しました。結合する必要のあるテーブルが2つあり、結合された値には計算があります。これは単純な問題であるに違いないと思います。

たとえば、私のテーブルは、結合するmachine1machinemeansPigです。結合で計算を行うための構文がマニュアルに見つかりませんでした。助言がありますか?

    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。私はあなたの提案を試しましたが、出力エラーでスカラーに複数の行があります。これが私のコードです。

 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;
4

1 に答える 1

0

1つのSQLクエリで、複数のPigLatinステートメントが必要になる場合があります。参照する計算は正確にはSQLに含まれていませんjoin。これは実際にはselectステートメントに含まれておりselect ... from ...、SQLでは基本的にPigに対応していますFOREACH ... GENERATE ...。したがってFOREACH、の結果に対してを実行しJOINます。例えば:

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);
于 2013-01-14T14:04:39.307 に答える