1

同じフィールドの値でデータのサブセットを選択したいとします。今、私はこのようなことをしなければなりません

TestLocationsResults = FILTER SalesData by (StoreId =='17'
or StoreId =='85'
or StoreId =='12'
or StoreId =='45'
or StoreId =='26'
or StoreId =='75'
or StoreId =='13'
) 

SQL では、次のように簡単に実行できます。

SELECT * FROM SalesData where StoreID IN (17, 12, 85, 45, 26, 75, 13)

私が見逃しているPigに同様のショートカットはありますか?

4

5 に答える 5

3

Pig 0.12 でINoperatorが追加されたようです。

だからあなたはすることができます

FILTER SalesData BY StoreID IN (17, 12, 85, 45, 26, 75, 13);
于 2014-11-17T19:08:31.117 に答える
1

あなたが現在行っている方法は、Pig で行うための最良の方法です。あなたが今やっていることに代わるものはすべて、ハック、遅い、またはその両方です。Pig が将来のバージョンで "in" クエリを追加することを願っていますが、現時点では最善の方法で実行しています。

于 2013-05-16T17:31:31.710 に答える
1

回避策の 1 つは、組み込み関数「INDEXOF」を使用することです。例:

TestLocationsResults = FILTER SalesData by INDEXOF(',17,12,85,45,26,75,13,', CONCAT(CONCAT(',', StoreId), ',')) > -1;

コメントを考慮して修正し、StoreId の前後に「,」記号を導入して、部分的ではなく完全に一致するようにしました。

于 2013-05-16T14:55:46.670 に答える