Pig とセミコロン。ついでにクエスチョンマーク

Pocket

Pig で関数にセミコロン使いたい時にエラーになる場合ありますよね。

REGEX_EXTRACT_ALL() や STRSPLIT() 使うときに。
私も相当悩みました・・・。

下記の URL が参考になります。
piglatin – Pig problem with split string(STRSPLIT)

簡単に言うと、
STRSPLIT() を使う場合、ユニコード表記の \u003B を使えばいける!。

a = FOREACH data GENERATE STRSPLIT(name,'\\u003B');

もしくは FOREACH のネストを使う方法もいけるらしい・・・

a = FOREACH data {
          splitdata = STRSPLIT(name,';');
          GENERATE splitdata;
}

実は、REGEX_EXTRACT() で ? をエスケープしたい時に見たので、自分ではやったことありません(^^
ちなみに、? のエスケープは下記のような感じ

r = LOAD 'accesslog.tsv' AS ( uri:chararray);
dump r;
(/example.html?hoge=fuga)
(/a/b/?uid=hogehoge)
(/admin/)
a = FILTER r BY INDEXOF(uri,'?',0) > 0;
b = FOREACH data GENERATE REGEX_EXTRACT(uri,'(.*)\\?(.*)',2);
dump b;
(hoge=fuga)
(uid=hogehoge)

コメントを残す