Pigで直接データを記述する裏技
どうも、豚さんと戯れるようになってから早いもので半年近く経ちました。
Pigを使い始めて最初に思ったこと。
「データって直接記述できないの?」
そんな疑問に半年ぐらいたった自分からお答えしましょう。実は裏技があるんです!
サンプル
次のようなデータを記述しようと思います。
1 hoge
2 fuga
3 piyo
まずは何を記述してもいいので1行だけのファイルを作成します
$ echo dummy >dummy
サンプルコードは次のようになります。
make_data.pig
A = LOAD 'dummy';
B = UNION
(FOREACH A GENERATE 1 AS id, 'hoge' AS name),
(FOREACH A GENERATE 2, 'fuga'),
(FOREACH A GENERATE 3, 'piyo');
STORE B INTO 'sample';
実行
$ pig -x local make_data.pig
$ cat sample/*
2 fuga
3 piyo
1 hoge
ちゃんとデータが作成されていますね!
※1行に対して1mapタスクが実行されるのでレコードの順番はランダムです
ポイントとしては、UNIONでくっつける時に最初のデータのフィールドにだけ名前をつける(ASを使う)ということです。
UNIONは型さえ一緒であればフィールド名なんてお構いなしに最初のエイリアスのフィールド名を採用するんで、Pigのバグなんじゃないかと思いますが2つ目以降にもASを使うと意味不明なエラーになります。
Pigではデータを直接記述できないと何人かに言ってしまったことがありましたが知識不足でした!
この場を借りてお詫び申し上げます!!