7.3.31. logical_count

7.3.31.1. 概要

バージョン 5.0.0 で追加.

logical_count は別のテーブルに保存されているレコードであっても、マッチするレコードをカウントするためのコマンドです。テーブルの最大レコード数の 制限事項 を気にしなくてすむようになります。

この機能はまだこなれていないので、いくつか制限があります。

  • 名前の末尾は "_YYYYMMDD" をつけてテーブルを作成します。これは決め打ちになっていて、日ごとにテーブルを作成しないといけない

  • 自分で個々のテーブルへ適切なデータをロードしないといけない

7.3.31.2. 構文

このコマンドにはたくさんの引数があります。

必須引数は2つあります。 logical_tableshard_key です。

logical_count logical_table
              shard_key
              [min]
              [min_border]
              [max]
              [max_border]
              [filter]

7.3.31.3. 使い方

logical_count コマンドを使うには事前に sharding プラグインを登録します。

logical_count コマンドは実験的なプラグインです。このコマンドは将来的に変更されるかもしれません。

この機能を使う簡単な例を示します。複数のテーブルに保存されている特定のログをカウントしてみましょう。

スキーマ定義とサンプルデータは以下の通りです。

実行例:

table_create Logs_20150203 TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150203 timestamp COLUMN_SCALAR Time
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150203 message COLUMN_SCALAR Text
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Logs_20150204 TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150204 timestamp COLUMN_SCALAR Time
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150204 message COLUMN_SCALAR Text
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Logs_20150205 TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150205 timestamp COLUMN_SCALAR Time
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Logs_20150205 message COLUMN_SCALAR Text
# [[0, 1337566253.89858, 0.000355720520019531], true]

実行例:

load --table Logs_20150203
[
{"timestamp": "2015-02-03 23:59:58", "message": "Start"},
{"timestamp": "2015-02-03 23:59:58", "message": "Shutdown"},
{"timestamp": "2015-02-03 23:59:59", "message": "Start"},
{"timestamp": "2015-02-03 23:59:59", "message": "Shutdown"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 4]
load --table Logs_20150204
[
{"timestamp": "2015-02-04 00:00:00", "message": "Start"},
{"timestamp": "2015-02-04 00:00:00", "message": "Shutdown"},
{"timestamp": "2015-02-04 00:00:01", "message": "Start"},
{"timestamp": "2015-02-04 00:00:01", "message": "Shutdown"},
{"timestamp": "2015-02-04 23:59:59", "message": "Start"},
{"timestamp": "2015-02-04 23:59:59", "message": "Shutdown"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 6]
load --table Logs_20150205
[
{"timestamp": "2015-02-05 00:00:00", "message": "Start"},
{"timestamp": "2015-02-05 00:00:00", "message": "Shutdown"},
{"timestamp": "2015-02-05 00:00:01", "message": "Start"},
{"timestamp": "2015-02-05 00:00:01", "message": "Shutdown"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 4]

2015年の2月3日から5日までに対応したテーブルが3つあります。

  • Logs_20150203
  • Logs_20150204
  • Logs_20150205

対応するテーブルへとデータを投入します。

message カラムに "Shutdown" が含まれていて、 timestamp カラムの値が "2015-02-04 00:00:00" 以降であるログをカウントしましょう。

上記目的を達成するためのクエリがこちらです。

実行例:

logical_count Logs timestamp --filter 'message == "Shutdown"' --min "2015-02-04 00:00:00" --min_border "include"
# [[0, 1337566253.89858, 0.000355720520019531], 5]

レコード数には既知の制限があります。制限はテーブルごとなので、シャーディング機能によってその制限を乗り越えることができます。

注釈

SQLの PARTITIONING BY のような便利なクエリはありません。つまり、 table_create で "_YYYYMMDD" を名前の末尾に含むテーブルをそれぞれの作らなければなりません。

7.3.31.4. 引数

このセクションでは logical_count の引数について説明します。

7.3.31.4.1. 必須引数

必須引数は二つあります。 logical_tableshard_key です。

7.3.31.4.1.1. logical_table

論理テーブル名を指定します。これは "_YYYYMMDD" をテーブル名から除いたものです。実際のテーブルが "Logs_20150203" や "Logs_20150203" といったものなら、論理テーブル名は "Logs" です。

7.3.31.4.1.2. shard_key

個々のテーブルで共通のキーとして扱うカラム名を指定します。

7.3.31.4.2. 省略可能引数

いくつか省略可能な引数があります。

7.3.31.4.2.1. min

shard_key の最小値を指定します。

7.3.31.4.2.2. min_border

最小値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

7.3.31.4.2.3. max

shard_key の最大値を指定します。

7.3.31.4.2.4. max_border

最大値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。

7.3.31.4.2.5. filter

7.3.31.5. 戻り値

TODO

[HEADER, LOGICAL_COUNT]