以前impalaのudfについて調べていて、何か書いてみたいなと思っていた。最近、mysqlでmrubyを動かしている例があると知り、ちょうどmrubyも触ってみたいと思っていたので、今回はimpala udfとmrubyをテーマに、impalaのudfでmrubyが実行できるimpala-udf-mrb_evalを書いてみた。
c++、mruby、どちらも経験が浅いのでコードは稚拙ですが、一応こんな感じで動作します。大規模なデータセットで試してはないですが大きなデータセットで試すと現状だと十分なパフォーマンスがでない。。ですが、表現が広がっていい感じです。
1 2 3 4 5 6 7 8 9 |
> create function mrb_eval(string) returns string location '/path/to/libmrb_eval.so' symbol='MRBEval'; > select mrb_eval('(1..3).reduce(&:+)'); Query: select mrb_eval('(1..3).reduce(&:+)') +----------------------------------------+ | default.mrb_eval('(1..3).reduce(&:+)') | +----------------------------------------+ | 6 | +----------------------------------------+ Fetched 1 row(s) in 0.02s |
参考リンク
- User-Defined Functions (UDFs)
- MySQLでmrubyを動かす – Kentaro Kuribayashi’s blog
- Big Sky :: やったーmrubyの動くMySQLできたよー/5
- MySQL のトリガで mruby を実行する | harasou.github.io
コメント