次のような行があります。
evnt=redeem&lid=1030023&upt=1679&pid=000000000001076056,000000000001072654,000000000001067925&ppt=996,246,366&qty=1,2,3
蓋、pid、ppt、および数量を行から抽出し、pid、ppt、および数量のすべてのエントリのタプルを作成することに興味があります。ルールは次のとおりです。
- ふた以外はすべて複数の値を持つことができます。値にカンマがある場合、複数の値があります
- pid は複数の値を持つことができ、これらの値は他の値と同じ順序で関連付けられます。たとえば、 ifとthen 、およびifとthenを
lid=4&pid=1,2&qty=2,3&ppt=123,232
意味します。lid=4
pid=1
qty=2
ppt=123
lid=4
pid=2
qty=3
ppt=232
- ppt は、pid に相関するという点で qty と同じ規則に従います。
これらのフィールドの蓋とpidに対して、次のようにしてこれを達成できました。
logs = foreach logs generate
REGEX_EXTRACT(original_path, 'lid=([^&]+)', 1) as login_id,
FLATTEN(TOKENIZE(REPLACE(REGEX_EXTRACT(original_path, '.*pid=([^&]+)', 1), ',', ' '))) as pid;
これは私に与えます:
1030023 000000000001076056
1030023 000000000001072654
1030023 000000000001067925
ただし、他の 2 つのフィールドに対してもこれを行いたい (3 つのタプルのままにしておく) ため、同じ foreach ステートメントで複数のフラット化を行っても、必要なものが得られません。
1030023 000000000001076056 996 1
1030023 000000000001072654 246 2
1030023 000000000001067925 366 3
これにはUDFが必要になると思いますが、Pigで提供されている関数のみを使用して別の方法があるかどうかを知りたい.