[Groonga-commit] groonga/groonga.org at 83394f2 [gh-pages] blog ja: add more topic

Back to archive index

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����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index