7.3.31. logical_count
¶
7.3.31.1. 概要¶
バージョン 5.0.0 で追加.
logical_count
は別のテーブルに保存されているレコードであっても、マッチするレコードをカウントするためのコマンドです。テーブルの最大レコード数の 制限事項 を気にしなくてすむようになります。
この機能はまだこなれていないので、いくつか制限があります。
名前の末尾は "_YYYYMMDD" をつけてテーブルを作成します。これは決め打ちになっていて、日ごとにテーブルを作成しないといけない
自分で個々のテーブルへ適切なデータをロードしないといけない
7.3.31.2. 構文¶
このコマンドにはたくさんの引数があります。
必須引数は2つあります。 logical_table
と shard_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_table
と shard_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
を指定します。