[groonga-dev,03396] Re: groonga-clientとgroongaのログメッセージについて

Back to archive index

Hiroyuki Sato hiroy****@gmail*****
2015年 8月 10日 (月) 09:15:48 JST


須藤様

佐藤です。
ご対応ありがとうございます。

うぅ、JSONだったとは、恥ずかしい。
それはエラーになりますね。失礼しました。


2015年8月8日 17:06 Kouhei Sutou <kou****@clear*****>:
> 須藤です。
>
> In <CA+Tq-RqLQGKXj2iqqXvO_iL6t2GQe1NZqO4Jr3KuLn931_DoGw****@mail*****>
>   "[groonga-dev,03394] Re: groonga-clientとgroongaのログメッセージについて" on Fri, 7 Aug 2015 10:19:14 +0900,
>   Hiroyuki Sato <hiroy****@gmail*****> wrote:
>
>> 個人的には、次のように思います。
>>
>> ・カラム名が間違えていて所定のカラムだけデータが入らなかった。
>>  => 成功でも良い。
>>
>> ・カラムの一部に不正な値が入っていて該当のレコードだけ、所定のカラムに
>>  値が入らなかった。例: 数値のカラムに文字列が入っていた。
>>  => エラーとして取り扱いたい。
>>
>> つまり中途半端にデータが入るぐらいなら、エラーとして失敗してくれた方が良いです。
>
> 実は、Groongaはわりと入力に寛容で、数値のカラムに文字列を指
> 定しても自動でキャストして適切な方に変換しようとするんです。
> なので、"1"(文字列)と指定しても1(数値)が入ります。さすが
> に"abc"(文字列)と指定するとエラー扱いにはなります。ただ、
> ログをみないとわからないです。loadの返り値だけではわかりませ
> ん。
>

なるほど、世のカラムナーなバルクロードも似たような感じなんでしょうか?
ちょっと調べてみたいと思います。


> あと、Groongaはレコードベースではなくカラムベースのデータモ
> デルなので、特定のカラムのロードが失敗したからといってレコー
> ド全体での失敗にはしていないんです。レコードの追加(= 主キー
> の挿入)ができたらload 1件という扱いになっています。

了解しました。

>
>> ちょっと質問の仕方が悪かったかもしれないのでテストコードを作りました。
>> https://github.com/hiroyuki-sato/groonga-log_test
>> エラーとして表示されるんだけど、実際にはデータがインサートされています。
>> 私のGroonga::Clientの使い方が間違えているのでしょうか?
>
> 実は、使い方を間違えています。
>
>   ret = client.load({:table => 'Data',
>                      :values => [data]})
>
> なんですが、:valuesにはJSON形式の文字列を指定する必要があり
> ます。

JSONだったとは、、、失礼しました。
データが入っていたのでこれで良いと思っていました。

>
> ただ、JSON形式の文字列ではなくRubyのオブジェクトを渡したい気
> 持ちはわかるので、↑でも動くようにしておきました。(内部で勝
> 手にJSON形式の文字列に変換する。)
>
> なので、groonga-clientをアップグレードすると動くようになって
> います。
>

ありがとうございます。

>
> ちなみに、↓がどうしてでるのかというと
>
>>>   2015-08-05 21:12:20.668028|n| thread start (0/1)
>>>   2015-08-05 21:12:20.668492|e| ignored invalid char('=') at
>>>   2015-08-05 21:12:20.668514|e| [{"field"=
>>>   2015-08-05 21:12:20.668524|e|            ^
>>>   2015-08-05 21:12:20.668532|e| ignored invalid char('>') at
>>>   2015-08-05 21:12:20.668539|e| [{"field"=>
>>>   2015-08-05 21:12:20.668547|e|             ^
>>>   2015-08-05 21:12:20.668555|e| ignored invalid char('=') at
>>>   2015-08-05 21:12:20.668563|e| [{"field"=>"文字列", "field2"=
>>>   2015-08-05 21:12:20.668570|e|                                           ^
>
> [{"field" => "value"}].to_sの結果である
>
>   [{"field"=>"value"}]
>
> をJSONとしてパースしているからです。JSONなら
>
>   [{"field":"value"}]
>
> というように「=>」ではなく「:」とならないといけないので↑の
> エラーメッセージがでています。が、Groongaは入力に寛容なので、
> 「=」も「>」も無視して、それっぽくパースした結果、データが入っ
> ています。

それはエラーになりますね。納得です。
ありがとうございます。


> --
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/>
>
> Groongaベースの全文検索システムを総合サポート:
>   http://groonga.org/ja/support/
> パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
>   http://www.clear-code.com/recruitment/
> コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
>   http://www.clear-code.com/services/code-reader/
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



-- 
Hiroyuki Sato



groonga-dev メーリングリストの案内
Back to archive index