Kentaro Hayashi
null+****@clear*****
Sat Apr 29 14:19:24 JST 2017
Kentaro Hayashi 2017-04-29 14:19:24 +0900 (Sat, 29 Apr 2017) New Revision: 83394f2da7abd4f532d641d760546e4aa6230e65 https://github.com/groonga/groonga.org/commit/83394f2da7abd4f532d641d760546e4aa6230e65 Message: blog ja: add more topic Modified files: ja/_posts/2017-04-29-groonga-7.0.2.md Modified: ja/_posts/2017-04-29-groonga-7.0.2.md (+51 -0) =================================================================== --- ja/_posts/2017-04-29-groonga-7.0.2.md 2017-04-29 13:07:49 +0900 (138be16) +++ ja/_posts/2017-04-29-groonga-7.0.2.md 2017-04-29 14:19:24 +0900 (e98db98) @@ -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)を確認してください。 -------------- next part -------------- HTML����������������������������...Descargar