Navigation Menu

Skip to content

Commit

Permalink
blog ja: add more topic
Browse files Browse the repository at this point in the history
  • Loading branch information
kenhys committed Apr 29, 2017
1 parent 8d449e2 commit 83394f2
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions ja/_posts/2017-04-29-groonga-7.0.2.md
Expand Up @@ -111,6 +111,57 @@ serverやlocationディレティブごとに指定することもできます。

#### [in_records] 既存のテーブルを条件のパターンとして指定できるようになりました

今回のリリースでは、既存のテーブルを条件のパターンとして指定するための ``in_records`` をサポートしました。
``in_records`` を使うと複数のクエリーを1つのクエリーへとまとめることができるかもしれません。
これは、既存のテーブル内の各レコードがそれぞれ条件のパターンになる(複数の条件を指定できる)からです。

例えば、ログから特定のパターンのレコードを抽出することを考えてみましょう。
ログには、ユーザーとそれに紐づくタグ、時刻が記録されているとします。
サンプルとなるスキーマとデータは以下を使うことにします。

table_create Users TABLE_HASH_KEY ShortText
table_create Tags TABLE_HASH_KEY ShortText

table_create Reports TABLE_NO_KEY
column_create Reports user COLUMN_SCALAR Users
column_create Reports tag COLUMN_SCALAR Tags
column_create Reports day COLUMN_SCALAR Time

table_create Logs TABLE_NO_KEY
column_create Logs user COLUMN_SCALAR Users
column_create Logs tag COLUMN_SCALAR Tags
column_create Logs time COLUMN_SCALAR Time

load --table Reports
[
{"user": "alice", "tag": "tag1", "day": "2017-04-18 00:00:00"},
{"user": "alice", "tag": "tag1", "day": "2017-04-19 00:00:00"},
{"user": "david", "tag": "tag2", "day": "2017-04-20 00:00:00"},
{"user": "david", "tag": "tag3", "day": "2017-04-21 00:00:00"}
]

load --table Logs
[
{"user": "alice", "tag": "tag1", "time": "2017-04-18 11:22:33"},
{"user": "alice", "tag": "tag1", "time": "2017-04-20 11:22:33"},
{"user": "bob", "tag": "tag1", "time": "2017-04-19 11:22:33"},
{"user": "david", "tag": "tag1", "time": "2017-04-19 11:22:33"},
{"user": "david", "tag": "tag2", "time": "2017-04-20 11:22:33"}
]

``Logs`` がログを記録しているテーブルです。特定のログに ``tag`` がつけられています。
特定のユーザーとタグがつけられているある日のログのみを抽出したい、というのを実現しようとすると、クエリはどんどん複雑になっていきます。
けれども今回追加された ``in_records`` を使うと条件のパターンを既存のテーブルへとまとめることができるのでクエリーを1つにすることができます。

select Logs \
--filter 'in_records(Reports, \
user, "==", "user", \
tag, "==", "tag", \
time_classify_day(time), "==", "day")'

上記の例では条件のパターンを ``Reports`` に保存された4つのレコードで表現しています。
サンプルでは ``Reports`` テーブルしか使っていませんが、ここに指定しているテーブルを替えるだけで、条件のパターンのバリエーションを簡単に切り替えることもできます。

### さいごに

7.0.1からの詳細な変更点は[7.0.2リリース 2017-04-29](/ja/docs/news.html#release-7-0-2)を確認してください。
Expand Down

0 comments on commit 83394f2

Please sign in to comment.