注釈
このコマンドは実験的な機能です。
バージョン 5.0.0 で追加.
logical_count は別のテーブルに保存されているレコードであっても、マッチするレコードをカウントするためのコマンドです。テーブルの最大レコード数の 制限事項 を気にしなくてすむようになります。
この機能はまだこなれていないので、いくつか制限があります。
名前の末尾は "_YYYYMMDD" をつけてテーブルを作成します。これは決め打ちになっていて、日ごとにテーブルを作成しないといけない
自分で個々のテーブルへ適切なデータをロードしないといけない
logical_count コマンドは7つの引数があります。
必須引数は二つあります。 logical_table と shard_key です。
logical_count logical_table
shard_key
[min]
[min_border]
[max]
[max_border]
[filter]
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つあります。
対応するテーブルへとデータを投入します。
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" を名前の末尾に含むテーブルをそれぞれの作らなければなりません。
このセクションでは logical_count の引数について説明します。
必須引数は二つあります。 logical_table と shard_key です。
論理テーブル名を指定します。これは "_YYYYMMDD" をテーブル名から除いたものです。実際のテーブルが "Logs_20150203" や "Logs_20150203" といったものなら、論理テーブル名は "Logs" です。
個々のテーブルで共通のキーとして扱うカラム名を指定します。
いくつか省略可能な引数があります。
shard_key の最小値を指定します。
最小値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。
shard_key の最大値を指定します。
最大値を境界値として含めるのか否かを指定します。 include もしくは exclude を指定します。
[HEADER, LOGICAL_COUNT]