LoginSignup
3

More than 5 years have passed since last update.

groongaで特定のカラムを更新するには

Last updated at Posted at 2013-03-07

groongaやmroongaを実際に使っていて、記事を書いてもいいよ、という人を募集しています。
すでに数名の方からご応募いただいていますが、まだまだ募集中です。
詳細はgroonga普及のための協力のお願いを参照してください。

はじめに

オープンソースのカラムストア機能付き全文検索エンジンgroongaを公開しています。
この記事を書いた時の最新のバージョンは2013年2月28日にリリースした3.0.1です。

groongaの話題を扱うメーリングリストはコミュニティのページで紹介していますが、以下の2つがあります。

groonga-devは日本語でやりとりするためのメーリングリストで、groonga-talkは英語でやりとりするためのメーリングリストです。

最近、groonga-talkに、どうやってカラムの値を更新したら良いのか?という質問がありました。

リレーショナルデータベースとカラムストアとではちょっと使い勝手が異なる点に戸惑いがあったようです。
(質問があった時点では英語のドキュメントが準備できていなかったというのもあるかも知れません。)

そこで、実際にどのようにカラムの値を更新すれば良いかというのを紹介します。

loadコマンドについて

groongaでは、カラムの値を追加、更新するのにいずれもloadコマンドを使います。

実際の使用例はチュートリアルのデータのロードという項目で紹介していますが、簡単に紹介します。

サンプルのスキーマとデータ

以下はサンプルとして使うテーブルのスキーマです。

table_remove Books
table_remove Bools

table_create Bools TABLE_HASH_KEY Bool

table_create Books TABLE_HASH_KEY UInt32
column_create Books title COLUMN_SCALAR ShortText
column_create Books price COLUMN_SCALAR Int32
column_create Books purchased COLUMN_SCALAR Bools

本のテーブルには、書名と価格、購入済みかどうかのフラグを保持するようになっています。

データの登録と更新

では実際にデータを登録してみましょう。
データの登録には、以下のようにloadコマンドを使います。

load --table Books
[
{"_key":1, "title":"Head First Groonga", "price": 3400},
{"_key":2, "title":"Head First Mroonga", "price": 2800}
]

きちんと登録できたかをクエリを投げて確認してみます。
--output_columns _key,title,price,purchased というのは表示するカラムの指定です。

select Books --output_columns _key,title,price,purchased

実行結果を抜粋すると以下のようになります。(実行結果については見易いように適宜整形しています。)

[
  [
    [2],
    [["_key","UInt32"],["title","ShortText"],["price","Int32"],["purchased","Bools"]],
    [1,"Head First Groonga",3400,false],
    [2,"Head First Mroonga",2800,false]
  ]
]

では、次にカラムを更新してみましょう。
更新するのは書名が"Head First Groonga"で、価格を3,000、購入済みフラグ(true)にします。

更新するときには、対象となるカラムの _key を明示的に指定するのがポイントです。

load --table Books
[
{"_key":1,"price": 3000,"purchased":true}
]

今度は、更新したカラムを --query _key:1 で抽出します。

select Books --query _key:1 --output_columns _key,title,price,purchased

以下のように、価格(price)と購入済フラグ(purchased)が更新できていることがわかります。

[
  [
    [1],
    [["_key","UInt32"],["title","ShortText"],["price","Int32"],["purchased","Bools"]],
    [1,"Head First Groonga",3000,true]
  ]
]

テーブルの購入済フラグに使っているのは参照型というものです。
3.0.1からは参照型カラムでBoolを使っていても、カラムを更新できるようになりました。

まとめ

groongaを使い始めた当初に、アレっと思うかも知れないカラムの更新について簡単に紹介しました。

groongaに興味を持ったなら、まずはインストールして試してみてください。

チュートリアルも用意しています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3