Kouhei Sutou
kou****@clear*****
2015年 5月 21日 (木) 22:54:48 JST
須藤です。 In <CA+Tq-RqPPTwOZQgqq6tCp-TkhRfS6oybXwgAkokiVh=oQa03****@mail*****> "[groonga-dev,03254] Embulk-output-groongaの紹介と質問" on Wed, 20 May 2015 22:31:15 +0900, Hiroyuki Sato <hiroy****@gmail*****> wrote: > embulk-command-outputというのを作成中です。紹介と質問です。 > https://github.com/hiroyuki-sato/embulk-output-groonga すごい! いやぁ、あるといいかなぁと思っていたんですよねぇ。 > Embulkとは > > Embulk(エンバルク)はプラガブルなバルクローダです。 > CSVファイルをMySQLやPostgreSQLなどに簡単にインポートできるツールです > > これの出力先としてGroongaに出力できたらいいねと思い作ったのがこちらのプラグインです > > Embulkについてはこちらを参照ください。 > http://www.embulk.org/docs/ > http://qiita.com/hiroysato/items/397f36c4838a0a93e352 > > embulk-output-groongaの利用例 > > まだ作りかけですが、簡単なデータの投入はできるようになっています。 > (まだ文字列しかテストをしておりません) > > 例 > https://gist.github.com/hiroyuki-sato/d62b42a8c48299b3f9d3 > > 次のようにコマンドを実行するとCSVファイルからデータを読み込んで > Groongaの指定したテーブルにデータを投入します。 > > embulk run config.yml おぉ、動いていますねぇ。 https://github.com/hiroyuki-sato/embulk-output-groonga/blob/master/lib/embulk/output/groonga.rb#L84 はexist?のtypoかしら。 > 質問 > groonga-clientなどのソースをみてぼちぼち書いておりますが > 次のような情報があるとよいと思ったので質問をいたします。 > > (1) 利用例について > groonga-clientのテーブルの作成や、カラムの作成などの例が載った > ソースはどこかにありますでしょうか? > 例えばgroonga-clientを使ったアプリケーションなど fluent-plugin-groongaというのがあって、それのoutputの方が参 考になると思います。 https://github.com/groonga/fluent-plugin-groonga/blob/master/lib/fluent/plugin/out_groonga.rb NetworkClient周辺を見るといいと思います。 もし、テーブル・カラムの自動作成までサポートするならSchema・ TableDefinition・TableCreater周辺をみるといいと思います。 > (2) コマンドそのまま実行 > > groonga-clientで、下記のような文字列を渡したら > コマンドをそのまま実行することは可能でしょうか? > > table_create --name Site2 --flags TABLE_HASH_KEY --key_type ShortText > column_create --table Site2 --name title --type ShortText はい、実行できます。 bin/groonga-clientがあるんですが、そいつに流しこむと実行でき ます。実装は https://github.com/ranguba/groonga-client/blob/master/lib/groonga/client/command-line/groonga-client.rb にあります。 > (3) エラーハンドリング > > 返ってくるエラー処理の例などどこかにありますでしょうか? fluent-plugin-groongaが参考になると思います。 基本的にGroonga::Client::Errorでrescueすればいいです。 > 課題 > > * groonga-command-parserのjruby対応(現在専用パッチを適用) > * JSONのパースに、yaj-rubyの代わりにjson-streamを使ったがjson-streamは遅い。 > * 代替案としてjavaクライアントを利用する(誰かが作成していれば) masterではffi-yajlを使うようにしたので試してみてください。 ffi-yajlだとJRubyでも動くとのことです。 groonga-command-parserの用途(JSON全体を一気にパースではなく、 大きなJSONをストリームとして少しずつパース)では、yajl-ruby よりも高速になっているはずです。 手元でるりまサーチ(*)のダンプデータをパースして速度を見なが ら作っていたんですが、それだとyajl-ruby版で33秒、ffi-yajl版 で5秒くらいでした。 (*) http://docs.ruby-lang.org/ja/search/ -- 須藤功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ プログラミングが好きな学生のための勉強会: http://www.seplus.jp/sezemi/