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

Pocket

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

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

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

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

<br />
a = FOREACH data GENERATE STRSPLIT(name,'\\u003B');<br />

もしくは FOREACH のネストを使う方法もいけるらしい・・・
<br />
a = FOREACH data {<br />
          splitdata = STRSPLIT(name,';');<br />
          GENERATE splitdata;<br />
}<br />

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

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

コメントを残す