# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English

# 7.3.33. `logical_select`

## 7.3.33.1. 概要

バージョン 5.0.5 で追加.

`logical_select` は select のシャーディングバージョンです。 `logical_select` は複数のテーブルからレコードを検索し、マッチしたレコードを出力します。

`logical_select` は `sharding` プラグインに含まれているので、 `sharding` プラグインを plugin_register する必要があります。

## 7.3.33.2. 構文

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

必須の引数は `logical_table` と `shard_key` です。それ以外の引数は省略可能です:

    logical_select logical_table
                   shard_key
                   [min=null]
                   [min_border="include"]
                   [max=null]
                   [max_border="include"]
                   [filter=null]
                   [sortby=null]
                   [output_columns="_id, _key, *"]
                   [offset=0]
                   [limit=10]
                   [drilldown=null]
                   [drilldown_sortby=null]
                   [drilldown_output_columns="_key, _nsubrecs"]
                   [drilldown_offset=0]
                   [drilldown_limit=10]
                   [drilldown_calc_types=NONE]
                   [drilldown_calc_target=null]

`logical_select` には高度なドリルダウン機能のために以下の名前付き引数があります。

> - `drilldown[${LABEL}].keys=null`
> - `drilldown[${LABEL}].sortby=null`
> - `drilldown[${LABEL}].output_columns="_key, _nsubrecs"`
> - `drilldown[${LABEL}].offset=0`
> - `drilldown[${LABEL}].limit=10`
> - `drilldown[${LABEL}].calc_types=NONE`
> - `drilldown[${LABEL}].calc_target=null`

`${LABEL}` には1つ以上のアルファベット、数字、 `_` 、 `.` を使うことができます。たとえば、 `parent.sub1` は有効な `${LABEL}` です。

同じ `${LABEL}` も持つ引数は同じグループになります。

たとえば、以下の引数は1つのドリルダウンを指定しています。

> - `--drilldown[label].keys column`
> - `--drilldown[label].sortby -_nsubrecs`

以下の引数は2つのドリルダウンを指定しています。

> - `--drilldown[label1].keys column1`
> - `--drilldown[label1].sortby -_nsubrecs`
> - `--drilldown[label2].keys column2`
> - `--drilldown[label2].sortby _key`

## 7.3.33.3. `select` との違い

`logical_select` の多くの機能は select の機能と対応しています。たとえば、引数名は同じですし、出力フォーマットも同じです。

しかし、いくつか select と違うところもあります。

> - `table` 引数ではなく、 `logical_table` と `shard_key` 引数が必須です。

> - 複数のシャードを使った場合の `sortby` はサポートしていません。（1つのシャードのみを使った場合はサポートしています。）

> - 複数のシャードを使った場合、 `drilldown[${LABEL}].sortby` の中で `_value.${KEY_NAME}` を使えません。1つのシャードのみを使った場合は使えます。

> - `match_columns` と `query` はまだサポートしていません。

> - `cache` はまだサポートしていません。

> - `match_escalation_threshold` はまだサポートしていません。

> - `query_flags` はまだサポートしていません。

> - `query_expander` はまだサポートしていません。

> - `adjuster` はまだサポートしていません。

## 7.3.33.4. 使い方

例を使いながら `logical_select` の使い方を学びましょう。このセクションではよく使われる使い方を紹介します。

`logical_select` は `sharding` プラグインに含まれているので `sharding` プラグインを登録する必要があります。

実行例:

    plugin_register sharding
    # [[0, 1337566253.89858, 0.000355720520019531], true]

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

実行例:

    table_create Entries_20150708 TABLE_HASH_KEY ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150708 created_at COLUMN_SCALAR Time
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150708 content COLUMN_SCALAR Text
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150708 n_likes COLUMN_SCALAR UInt32
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150708 tag COLUMN_SCALAR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Entries_20150709 TABLE_HASH_KEY ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150709 created_at COLUMN_SCALAR Time
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150709 content COLUMN_SCALAR Text
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150709 n_likes COLUMN_SCALAR UInt32
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Entries_20150709 tag COLUMN_SCALAR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Terms TABLE_PAT_KEY ShortText \
      --default_tokenizer TokenBigram \
      --normalizer NormalizerAuto
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Terms entries_key_index_20150708 \
      COLUMN_INDEX|WITH_POSITION Entries_20150708 _key
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Terms entries_content_index_20150708 \
      COLUMN_INDEX|WITH_POSITION Entries_20150708 content
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Terms entries_key_index_20150709 \
      COLUMN_INDEX|WITH_POSITION Entries_20150709 _key
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Terms entries_content_index_20150709 \
      COLUMN_INDEX|WITH_POSITION Entries_20150709 content
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    load --table Entries_20150708
    [
    {"_key":       "The first post!",
     "created_at": "2015/07/08 00:00:00",
     "content":    "Welcome! This is my first post!",
     "n_likes":    5,
     "tag":        "Hello"},
    {"_key":       "Groonga",
     "created_at": "2015/07/08 01:00:00",
     "content":    "I started to use Groonga. It's very fast!",
     "n_likes":    10,
     "tag":        "Groonga"},
    {"_key":       "Mroonga",
     "created_at": "2015/07/08 02:00:00",
     "content":    "I also started to use Mroonga. It's also very fast! Really fast!",
     "n_likes":    15,
     "tag":        "Groonga"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 3]
    load --table Entries_20150709
    [
    {"_key":       "Good-bye Senna",
     "created_at": "2015/07/09 00:00:00",
     "content":    "I migrated all Senna system!",
     "n_likes":    3,
     "tag":        "Senna"},
    {"_key":       "Good-bye Tritonn",
     "created_at": "2015/07/09 01:00:00",
     "content":    "I also migrated all Tritonn system!",
     "n_likes":    3,
     "tag":        "Senna"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 2]

ブログエントリー用に `Entries_20150708` と `Entries_20150709` の2つのテーブルがあります。

注釈

テーブル名には `${論理テーブル名}_${YYYYMMDD}` という命名規則を使う必要があります。この例では、 `論理テーブル名` は `Entries` で `YYYYMMDD` は `20150708` または `20150709` です。

各エントリはタイトルと作成日時と内容と「いいね！」数、タグを持っています。タイトルは `Entries_YYYYMMDD` のキーとします。作成日時は `Entries_YYYYMMDD.created_at` カラムの値とします。内容は `Entries_YYYYMMDD.content` カラムの値とします。「いいね！」数は `Entries_YYYYMMDD.n_likes` カラムの値とします。タグは `Entries_YYYYMMDD.tag` カラムの値とします。

`Entries_YYYYMMDD._key` カラムと `Entries_YYYYMMDD.content` カラムには `TokenBigram` トークナイザーを使ったインデックスを作成します。そのため、 `Entries_YYYYMMDD._key` と `Entries_YYYYMMDD.content` は両方とも全文検索できます。

これで例を示すためのスキーマとデータの準備ができました。

### 7.3.33.4.1. 簡単な使い方

TODO

## 7.3.33.5. 引数

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

### 7.3.33.5.1. 必須引数

必須引数は二つあります。 `logical_table` と `shard_key` です。

#### 7.3.33.5.1.1. `logical_table`

論理テーブル名を指定します。これは `_YYYYMMDD` をテーブル名からのぞいたものです。実際のテーブルが `Entries_20150708` や `Entries_20150709` といったものなら、論理テーブル名は `Entries` です。

`logical_table` と `shard_key` 引数を指定すると10レコード表示できます。これらの引数は必須の引数です。

実行例:

    logical_select --logical_table Entries --shard_key created_at
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         2,
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ],
    #       [
    #         3,
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ],
    #       [
    #         1,
    #         "Good-bye Senna",
    #         "I migrated all Senna system!",
    #         1436367600.0,
    #         3,
    #         "Senna"
    #       ],
    #       [
    #         2,
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

存在しないテーブルを指定するとエラーが返ります。

実行例:

    logical_select --logical_table Nonexistent --shard_key created_at
    # [
    #   [
    #     -22,
    #     1337566253.89858,
    #     0.000355720520019531,
    #     "[logical_select] no shard exists: logical_table: <Nonexistent>: shard_key: <created_at>",
    #     [
    #       [
    #         "Groonga::Context.set_groonga_error",
    #         "lib/mrb/scripts/context.rb",
    #         27
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.1.2. `shard_key`

シャードキーとして使うカラム名を指定します。シャードキーは適切なシャードへレコードを分配するために使う値を保存しているカラムです。

今のところ、シャードキーは `Time` 型でなければいけません。

`shard_key` の指定方法は logical_table を見てください。

### 7.3.33.5.2. 省略可能引数

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

#### 7.3.33.5.2.1. `min`

`shard_key` カラムの最小値を指定します。シャードにマッチするレコードがない場合は、そのシャードは検索対象外になります。

たとえば、 `min` が `"2015/07/09 00:00:00"` なら、 `Entry_20150708` は検索対象外です。なぜなら、 `Entry_20150708` は `"2015/07/08"` のレコードしかないからです。

以下の例は `Entry_20150709` テーブルだけを使う例です。 `Entry_20150708` は使われません。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --min "2015/07/09 00:00:00"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "Good-bye Senna",
    #         "I migrated all Senna system!",
    #         1436367600.0,
    #         3,
    #         "Senna"
    #       ],
    #       [
    #         2,
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.2.2. `min_border`

最小値を含めるかどうかを指定します。指定可能な値は次の通りです。

Value | 説明
--- | ---
`include` | `min` の値を含みます。これがデフォルト値です。
`exclude` | `min` の値を含みません。

次の例は `exclude` の使用例です。結果には `"Good-bye Senna"` レコードは含まれません。このレコードの `created_at` の値が `"2015/07/09 00:00:00"` だからです。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --min "2015/07/09 00:00:00" \
      --min_border "exclude"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         2,
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.2.3. `max`

`shard_key` カラムの最大値を指定します。シャードにマッチするレコードがない場合、そのシャードは検索対象外になります。

たとえば、 `max` が `"2015/07/08 23:59:59"` なら `Entry_20150709` は検索対象外です。なぜなら `Entry_20150709` には `""2015/07/09"` のレコードしかないからです。

以下の例は `Entry_20150708` テーブルだけを使います。 `Entry_20150709` は使いません。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --max "2015/07/08 23:59:59"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         2,
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ],
    #       [
    #         3,
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.2.4. `max_border`

最大値を含めるかどうかを指定します。指定可能な値は次の通りです。

Value | 説明
--- | ---
`include` | `max` の値を含みます。これがデフォルト値です。
`exclude` | `max` の値を含みません。

次の例は `exclude` の使用例です。結果には `"Good-bye Senna"` レコードは含まれません。このレコードの `created_at` の値が `"2015/07/09 00:00:00"` だからです。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --max "2015/07/09 00:00:00" \
      --max_border "exclude"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         2,
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ],
    #       [
    #         3,
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ]
    #     ]
    #   ]
    # ]

### 7.3.33.5.3. 検索関係の引数

`logical_select` は select 互換の検索関連パラメーターをサポートしています。

`match_columns` と `query` はまだサポートしていません。今のところ、 `filter` だけサポートしています。

#### 7.3.33.5.3.1. `match_columns`

未実装です。

#### 7.3.33.5.3.2. `query`

未実装です。

#### 7.3.33.5.3.3. `filter`

select の filter に対応しています。詳細は filter を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --filter "n_likes <= 5"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         1,
    #         "Good-bye Senna",
    #         "I migrated all Senna system!",
    #         1436367600.0,
    #         3,
    #         "Senna"
    #       ],
    #       [
    #         2,
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

### 7.3.33.5.4. 高度な検索のための引数

`logical_select` は高度な検索パラメーターをまだ実装していません。

#### 7.3.33.5.4.1. `match_escalation_threshold`

未実装です。

#### 7.3.33.5.4.2. `query_flags`

未実装です。

#### 7.3.33.5.4.3. `query_expander`

未実装です。

### 7.3.33.5.5. 出力関連の引数

#### 7.3.33.5.5.1. `output_columns`

select の output_columns に対応しています。詳細は output_columns を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --output_columns '_key, *'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ],
    #       [
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ],
    #       [
    #         "Good-bye Senna",
    #         "I migrated all Senna system!",
    #         1436367600.0,
    #         3,
    #         "Senna"
    #       ],
    #       [
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.5.2. `sortby`

select の sortby に対応しています。詳細は sortby を見てください。

`sortby` には制限があります。検索対象のシャードが1つの場合のみ動作します。もし、検索対象のシャードが複数ある場合、 `sortby` は正常な動作をしません。

以下は1つのシャードのみを使っている例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --min "2015/07/08 00:00:00" \
      --min_border "include" \
      --max "2015/07/09 00:00:00" \
      --max_border "exclude" \
      --sortby _key
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         2,
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ],
    #       [
    #         3,
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.5.3. `offset`

select の offset に対応しています。詳細は offset を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --offset 2
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         3,
    #         "Mroonga",
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         1436288400.0,
    #         15,
    #         "Groonga"
    #       ],
    #       [
    #         1,
    #         "Good-bye Senna",
    #         "I migrated all Senna system!",
    #         1436367600.0,
    #         3,
    #         "Senna"
    #       ],
    #       [
    #         2,
    #         "Good-bye Tritonn",
    #         "I also migrated all Tritonn system!",
    #         1436371200.0,
    #         3,
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.5.4. `limit`

select の limit に対応しています。詳細は limit を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 2
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "created_at",
    #           "Time"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "The first post!",
    #         "Welcome! This is my first post!",
    #         1436281200.0,
    #         5,
    #         "Hello"
    #       ],
    #       [
    #         2,
    #         "Groonga",
    #         "I started to use Groonga. It's very fast!",
    #         1436284800.0,
    #         10,
    #         "Groonga"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.5.5. `scorer`

未実装です。

### 7.3.33.5.6. ドリルダウン関連の引数

select のすべてのドリルダウン関連パラメーターをサポートしています。詳細は ドリルダウン関連の引数 を見てください。

#### 7.3.33.5.6.1. `drilldown`

select の drilldown に対応しています。詳細は drilldown を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --output_columns _key,tag \
      --drilldown tag
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "tag",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         "The first post!",
    #         "Hello"
    #       ],
    #       [
    #         "Groonga",
    #         "Groonga"
    #       ],
    #       [
    #         "Mroonga",
    #         "Groonga"
    #       ],
    #       [
    #         "Good-bye Senna",
    #         "Senna"
    #       ],
    #       [
    #         "Good-bye Tritonn",
    #         "Senna"
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_nsubrecs",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Hello",
    #         1
    #       ],
    #       [
    #         "Groonga",
    #         2
    #       ],
    #       [
    #         "Senna",
    #         2
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.2. `drilldown_sortby`

select の drilldown_sortby に対応しています。詳細は drilldown_sortby を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown tag \
      --drilldown_sortby -_nsubrecs,_key
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_nsubrecs",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Groonga",
    #         2
    #       ],
    #       [
    #         "Senna",
    #         2
    #       ],
    #       [
    #         "Hello",
    #         1
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.3. `drilldown_output_columns`

select の drilldown_output_columns に対応しています。詳細は drilldown_output_columns を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown tag \
      --drilldown_output_columns _key
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         "Hello"
    #       ],
    #       [
    #         "Groonga"
    #       ],
    #       [
    #         "Senna"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.4. `drilldown_offset`

select の drilldown_offset に対応しています。詳細は drilldown_offset を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown tag \
      --drilldown_offset 1
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_nsubrecs",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Groonga",
    #         2
    #       ],
    #       [
    #         "Senna",
    #         2
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.5. `drilldown_limit`

select の drilldown_limit に対応しています。詳細は drilldown_limit を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown tag \
      --drilldown_limit 2
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_nsubrecs",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Hello",
    #         1
    #       ],
    #       [
    #         "Groonga",
    #         2
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.6. `drilldown_calc_types`

select の drilldown_calc_types に対応しています。詳細は drilldown_calc_types を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit -1 \
      --output_columns tag,n_likes \
      --drilldown tag \
      --drilldown_calc_types MAX,MIN,SUM,AVG \
      --drilldown_calc_target n_likes \
      --drilldown_output_columns _key,_nsubrecs,_max,_min,_sum,_avg
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "tag",
    #           "ShortText"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         "Hello",
    #         5
    #       ],
    #       [
    #         "Groonga",
    #         10
    #       ],
    #       [
    #         "Groonga",
    #         15
    #       ],
    #       [
    #         "Senna",
    #         3
    #       ],
    #       [
    #         "Senna",
    #         3
    #       ]
    #     ],
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_nsubrecs",
    #           "Int32"
    #         ],
    #         [
    #           "_max",
    #           "Int64"
    #         ],
    #         [
    #           "_min",
    #           "Int64"
    #         ],
    #         [
    #           "_sum",
    #           "Int64"
    #         ],
    #         [
    #           "_avg",
    #           "Float"
    #         ]
    #       ],
    #       [
    #         "Hello",
    #         1,
    #         5,
    #         5,
    #         5,
    #         5.0
    #       ],
    #       [
    #         "Groonga",
    #         2,
    #         15,
    #         10,
    #         25,
    #         12.5
    #       ],
    #       [
    #         "Senna",
    #         2,
    #         3,
    #         3,
    #         6,
    #         3.0
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.33.5.6.7. `drilldown_calc_target`

select の drilldown_calc_target に対応しています。詳細は drilldown_calc_target を見てください。

具体例は drilldown_calc_types を見てください。

### 7.3.33.5.7. 高度なドリルダウン関連のパラメーター

select のすべての高度なドリルダウン関連のパラメーターをサポートしています。詳細は 高度なドリルダウン関連のパラメーター を見てください。

いくつか制限があります。

> - 複数のシャードを使った場合、 `drilldown[${LABEL}].sortby` の中で `_value.${KEY_NAME}` を使えません。1つのシャードのみを使った場合は使えます。

#### 7.3.33.5.7.1. `drilldown[${LABEL}].keys`

select の drilldown[${LABEL}].keys に対応しています。詳細は drilldown[${LABEL}].keys を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag.n_likes].keys tag,n_likes \
      --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes,_nsubrecs
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag.n_likes": [
    #         [
    #           4
    #         ],
    #         [
    #           [
    #             "tag",
    #             "ShortText"
    #           ],
    #           [
    #             "n_likes",
    #             "UInt32"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           5,
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           10,
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           15,
    #           1
    #         ],
    #         [
    #           "Senna",
    #           3,
    #           2
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.2. `drilldown[${LABEL}].output_columns`

select の drilldown[${LABEL}].output_columns に対応しています。詳細は drilldown[${LABEL}].output_columns を見てください。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag].keys tag \
      --drilldown[tag].output_columns _key,_nsubrecs
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           2
    #         ],
    #         [
    #           "Senna",
    #           2
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.3. `drilldown[${LABEL}].sortby`

ラベルなしドリルダウンの drilldown_sortby に対応しています。

`drilldown[${LABEL}].sortby` には制限があります。

複数のシャードを使った場合、 `drilldown[${LABEL}].sortby` の中で `_value.${KEY_NAME}` を使えません。1つのシャードのみを使った場合は使えます。

以下は1つのシャードに対して `_value.${KEY_NAME}` を使う例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --min "2015/07/08 00:00:00" \
      --min_border "include" \
      --max "2015/07/09 00:00:00" \
      --max_border "exclude" \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag.n_likes].keys tag,n_likes \
      --drilldown[tag.n_likes].output_columns _nsubrecs,_value.n_likes,_value.tag \
      --drilldown[tag.n_likes].sortby -_nsubrecs,_value.n_likes,_value.tag
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag.n_likes": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ],
    #           [
    #             "n_likes",
    #             "UInt32"
    #           ],
    #           [
    #             "tag",
    #             "ShortText"
    #           ]
    #         ],
    #         [
    #           1,
    #           5,
    #           "Hello"
    #         ],
    #         [
    #           1,
    #           10,
    #           "Groonga"
    #         ],
    #         [
    #           1,
    #           15,
    #           "Groonga"
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.4. `drilldown[${LABEL}].offset`

ラベルなしドリルダウンの drilldown_offset に対応しています。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag.n_likes].keys tag \
      --drilldown[tag.n_likes].offset 1
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag.n_likes": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ]
    #         ],
    #         [
    #           "Groonga",
    #           2
    #         ],
    #         [
    #           "Senna",
    #           2
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.5. `drilldown[${LABEL}].limit`

ラベルなしドリルダウンの drilldown_limit に対応しています。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag.n_likes].keys tag \
      --drilldown[tag.n_likes].limit 2
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag.n_likes": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           2
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.6. `drilldown[${LABEL}].calc_types`

ラベルなしドリルダウンの drilldown_calc_types に対応しています。

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldown[tag].keys tag \
      --drilldown[tag].calc_types MAX,MIN,SUM,AVG \
      --drilldown[tag].calc_target n_likes \
      --drilldown[tag].output_columns _key,_nsubrecs,_max,_min,_sum,_avg
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ],
    #           [
    #             "_max",
    #             "Int64"
    #           ],
    #           [
    #             "_min",
    #             "Int64"
    #           ],
    #           [
    #             "_sum",
    #             "Int64"
    #           ],
    #           [
    #             "_avg",
    #             "Float"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1,
    #           5,
    #           5,
    #           5,
    #           5.0
    #         ],
    #         [
    #           "Groonga",
    #           2,
    #           15,
    #           10,
    #           25,
    #           12.5
    #         ],
    #         [
    #           "Senna",
    #           2,
    #           3,
    #           3,
    #           6,
    #           3.0
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.33.5.7.7. `drilldown[${LABEL}].calc_target`

ラベルなしドリルダウンの drilldown_calc_target に対応しています。

例は drilldown[${LABEL}].calc_types を参照してください。

## 7.3.33.6. 戻り値

`logical_select` の戻り値のフォーマットは select と同じです。詳細は 戻り値 を見てください。