`Ctrl`+`K`

# 7.3.35. `logical_select`

## 7.3.35.1. 概要

バージョン 5.0.5 で追加.

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

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

## 7.3.35.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]
                   [sort_keys=null]
                   [drilldown_sort_keys=null]
                   [match_columns=null]
                   [query=null]
                   [drilldown_filter=null]
                   [post_filter=null]
                   [load_table=null]
                   [load_columns=null]
                   [load_values=null]

いくつか名前付き引数としてしか使えない引数があります。これらの引数を「○番目の引数」として使うことはできません。必ず名前を指定する必要があります。

名前付き引数としてしか使えない引数は次の通りです。

> - `cache=no`

以下の名前付き引数で動的カラム機能を使うことができます。

> - `columns[${NAME}].stage=null`

> - `columns[${NAME}].flags=COLUMN_SCALAR`

> - `columns[${NAME}].type=null`

> - `columns[${NAME}].value=null`

> - `columns[${NAME}].window.sort_keys=null`

> - `columns[${NAME}].window.group_keys=null`

`${NAME}` には1つ以上のアルファベット、数字、 `_` を使うことができます。たとえば、 `column1` は有効な `${NAME}` です。これは通常のカラムと同じルールです。 name も見てください。

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

たとえば、以下の引数は1つの動的カラムを指定しています。

> - `--columns[name].stage initial`

> - `--columns[name].type UInt32`

> - `--columns[name].value 29`

以下の引数は2つの動的カラムを指定しています。

> - `--columns[name1].stage initial`

> - `--columns[name1].type UInt32`

> - `--columns[name1].value 29`

> - `--columns[name2].stage filtered`

> - `--columns[name2].type Float`

> - `--columns[name2].value '_score * 0.1'`

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

> - `drilldowns[${LABEL}].keys=null`

> - `drilldowns[${LABEL}].sort_keys=null`

> - `drilldowns[${LABEL}].output_columns="_key, _nsubrecs"`

> - `drilldowns[${LABEL}].offset=0`

> - `drilldowns[${LABEL}].limit=10`

> - `drilldowns[${LABEL}].calc_types=NONE`

> - `drilldowns[${LABEL}].calc_target=null`

> - `drilldowns[${LABEL}].filter=null`

> - `drilldowns[${LABEL}].columns[${NAME}].stage=null`

> - `drilldowns[${LABEL}].columns[${NAME}].flags=COLUMN_SCALAR`

> - `drilldowns[${LABEL}].columns[${NAME}].type=null`

> - `drilldowns[${LABEL}].columns[${NAME}].value=null`

> - `drilldowns[${LABEL}].columns[${NAME}].window.sort_keys=null`

> - `drilldowns[${LABEL}].columns[${NAME}].window.group_keys=null`

バージョン 6.1.4 で非推奨: `drilldown[...]` 構文は非推奨になりました。代わりに `drilldowns[...]` を使用してください。

バージョン 6.1.5 で非推奨: drilldowns[${LABEL}].sortby は非推奨になりました。代わりに drilldowns[${LABEL}].sort_keys を使ってください。

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

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

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

> - `--drilldowns[label].keys column`

> - `--drilldowns[label].sort_keys -_nsubrecs`

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

> - `--drilldowns[label1].keys column1`

> - `--drilldowns[label1].sort_keys -_nsubrecs`

> - `--drilldowns[label2].keys column2`

> - `--drilldowns[label2].sort_keys _key`

## 7.3.35.3. `select` との違い

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

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

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

> - 複数のシャードを使った場合の `sort_keys` はサポートしていません。（1つのシャードのみを使った場合はサポートしています。複数のシャードについては1つ例外があります。`shard_key` と `sort_keys` が同じ場合です。その場合はサポートしています。詳細は sort_keys を参照してください。）

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

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

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

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

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

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

## 7.3.35.4. 使い方

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

このコマンドは `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.35.4.1. 簡単な使い方

以下は必須のパラメータのみを指定した例です。

実行例:

    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"
    #       ]
    #     ]
    #   ]
    # ]

上記の例では、 `Entries_20150708` と `Entries_20150709` から検索されていることがわかります。

## 7.3.35.5. 引数

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

### 7.3.35.5.1. 必須引数

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

#### 7.3.35.5.1.1. `logical_table`

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

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

実行例:

    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::Sharding::LogicalSelectCommand::Executor.execute_search",
    #         "/home/horimoto/work/release/groonga/groonga.clean/plugins/sharding/logical_select.rb",
    #         560
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.1.2. `shard_key`

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

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

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

### 7.3.35.5.2. 省略可能引数

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

#### 7.3.35.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.35.5.2.2. `min_border`

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

値 | 説明
--- | ---
`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.35.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.35.5.2.4. `max_border`

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

値 | 説明
--- | ---
`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.35.5.3. 検索関係の引数

このコマンドは select 互換の検索関連パラメーターをサポートしています。

#### 7.3.35.5.3.1. `match_columns`

バージョン 7.0.1 で追加.

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

以下は `content` カラムに `"fast"` というテキストを含むレコードを検索する例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --match_columns content \
      --query "fast"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_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"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.3.2. `query`

バージョン 7.0.1 で追加.

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

以下は `content` カラムに `"fast"` というテキストを含むレコードを検索する例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --query "content:@fast"
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_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"
    #       ]
    #     ]
    #   ]
    # ]

match_columns も参照してください。

#### 7.3.35.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.35.5.3.4. `post_filter`

バージョン 8.0.1 で追加.

`filtered` ステージの動的カラムが生成されてから実行するフィルターを指定します。 `post_filter` を使うと `filtered` ステージの動的カラムを使って絞り込むことができます。他は filter と同じです。

以下は人気のあるタグのエントリーだけを表示する例です。対象となるすべてのエントリーには `system` または `use` という単語が含まれています。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[n_likes_sum_per_tag].stage filtered \
      --columns[n_likes_sum_per_tag].type UInt32 \
      --columns[n_likes_sum_per_tag].value 'window_sum(n_likes)' \
      --columns[n_likes_sum_per_tag].window.group_keys 'tag' \
      --filter 'content @ "system" || content @ "use"' \
      --post_filter 'n_likes_sum_per_tag > 10' \
      --output_columns _key,n_likes,n_likes_sum_per_tag
    # [
    #   [
    #     0,
    #     1519030779.410312,
    #     0.04758048057556152
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "n_likes_sum_per_tag",
    #           "UInt32"
    #         ]
    #       ]
    #       [
    #         "Groonga",
    #         10,
    #         25
    #       ],
    #       [
    #         "Mroonga",
    #         15,
    #         25
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.3.5. `load_table`

バージョン 8.1.1 で追加.

`--load_table` 、 `--load_columns` 、 `--load_values` を使って、`logical_select` の結果を指定したテーブルに格納できます。 `--load_table` は、`logical_select` の結果を格納するテーブルの名前を指定します。

既に存在するテーブルを指定する必要があります。

この引数は、 load_columns と load_values と一緒に使う必要があります。

以下は、 `--load_table` で指定したLogsテーブルに `logical_select` の結果である `_id` と `timestamp` を格納する例です。

実行例:

    table_create Logs_20150203 TABLE_HASH_KEY ShortText
    column_create Logs_20150203 timestamp COLUMN_SCALAR Time
    table_create Logs_20150204 TABLE_HASH_KEY ShortText
    column_create Logs_20150204 timestamp COLUMN_SCALAR Time

    table_create Logs TABLE_HASH_KEY ShortText
    column_create Logs original_id COLUMN_SCALAR UInt32
    column_create Logs timestamp_text COLUMN_SCALAR ShortText

    load --table Logs_20150203
    [
    {
      "_key": "2015-02-03:1",
      "timestamp": "2015-02-03 10:49:00"
    },
    {
      "_key": "2015-02-03:2",
      "timestamp": "2015-02-03 12:49:00"
    }
    ]
    load --table Logs_20150204
    [
    {
      "_key": "2015-02-04:1",
      "timestamp": "2015-02-04 00:00:00"
    }
    ]
    logical_select \
      --logical_table Logs \
      --shard_key timestamp \
      --load_table Logs \
      --load_columns "original_id, timestamp_text" \
      --load_values "_id, timestamp"
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "timestamp",
    #           "Time"
    #         ]
    #       ],
    #       [
    #         1,
    #         "2015-02-03:1",
    #         1422928140.0
    #       ],
    #       [
    #         2,
    #         "2015-02-03:2",
    #         1422935340.0
    #       ],
    #       [
    #         1,
    #         "2015-02-04:1",
    #         1422975600.0
    #       ]
    #     ]
    #   ]
    # ]
    select --table Logs
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "original_id",
    #           "UInt32"
    #         ],
    #         [
    #           "timestamp_text",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         "2015-02-03:1",
    #         1,
    #         "1422928140000000"
    #       ],
    #       [
    #         2,
    #         "2015-02-03:2",
    #         2,
    #         "1422935340000000"
    #       ],
    #       [
    #         3,
    #         "2015-02-04:1",
    #         1,
    #         "1422975600000000"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.3.6. `load_columns`

バージョン 8.1.1 で追加.

`--load_table` で指定したテーブルのカラムを指定します。load_values で指定したカラムの値をこの引数で指定したカラムに格納します。既に存在するカラムを指定する必要があります。

この引数は、 load_table と load_values と一緒に使う必要があります。

この引数の使い方は、 `--load_table` の例を参照してください。

#### 7.3.35.5.3.7. `load_values`

バージョン 8.1.1 で追加.

`logical_select` の結果のカラムを指定します。 load_columns で指定したカラムに値を格納するカラムを指定します。既に存在するカラムを指定する必要があります。

この引数は、 load_table と load_columns と一緒に使う必要があります。

この引数の使い方は、 `--load_table` の例を参照してください。

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

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

#### 7.3.35.5.4.1. `match_escalation_threshold`

未実装です。

#### 7.3.35.5.4.2. `query_flags`

未実装です。

#### 7.3.35.5.4.3. `query_expander`

未実装です。

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

#### 7.3.35.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.35.5.5.2. `sortby`

バージョン 6.1.5 で非推奨: 代わりに sort_keys を使ってください。

#### 7.3.35.5.5.3. `sort_keys`

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

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

注釈

複数のシャードに関して例外があります。`shard_key` と `sort_keys` に同じ値が指定された場合です。その場合はサポートしています。このコマンドはシャードを昇順で順番に処理します。そのため、`shard_key` の大小関係は保たれるので、正しくソートできます。

以下は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" \
      --sort_keys _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.35.5.5.4. `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.35.5.5.5. `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.35.5.5.6. `scorer`

未実装です。

### 7.3.35.5.6. 動的カラム関連の引数

バージョン 7.0.1 で追加.

select のすべての動的カラム関連パラメーターをサポートしています。詳細は 動的カラム関連の引数 を見てください。

#### 7.3.35.5.6.1. `columns[${NAME}].stage`

バージョン 7.0.1 で追加.

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

必須の引数です。

以下は `initial` ステージで `is_popular` カラムを作る例です。作成した `is_popular` カラムは `filter` や `output_columns` を含むすべてのパラメーターで使えます。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[is_popular].stage initial \
      --columns[is_popular].type Bool \
      --columns[is_popular].value 'n_likes >= 10' \
      --filter is_popular \
      --output_columns _id,is_popular,n_likes
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "is_popular",
    #           "Bool"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         2,
    #         true,
    #         10
    #       ],
    #       [
    #         3,
    #         true,
    #         15
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.6.2. `columns[${NAME}].flags`

バージョン 7.0.1 で追加.

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

デフォルト値は `COLUMN_SCALAR` です。

以下は `COLUMN_VECTOR` フラグを指定してベクターカラムを作る例です。 `plugin_register functions/vector` は vector_new 関数を使うために実行しています。:

実行例:

    plugin_register functions/vector
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[vector].stage initial \
      --columns[vector].flags COLUMN_VECTOR \
      --columns[vector].type UInt32 \
      --columns[vector].value 'vector_new(1, 2, 3)' \
      --output_columns _id,vector
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "vector",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         1,
    #         [
    #           1,
    #           2,
    #           3
    #         ]
    #       ],
    #       [
    #         2,
    #         [
    #           1,
    #           2,
    #           3
    #         ]
    #       ],
    #       [
    #         3,
    #         [
    #           1,
    #           2,
    #           3
    #         ]
    #       ],
    #       [
    #         1,
    #         [
    #           1,
    #           2,
    #           3
    #         ]
    #       ],
    #       [
    #         2,
    #         [
    #           1,
    #           2,
    #           3
    #         ]
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.6.3. `columns[${NAME}].type`

バージョン 7.0.1 で追加.

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

必須の引数です。

以下は `ShortText` 型のカラムを作る例です。保存された値は自動的に `ShortText` にキャストされます。この例では数値が `ShortText` にキャストされています。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[n_likes_string].stage initial \
      --columns[n_likes_string].type ShortText \
      --columns[n_likes_string].value n_likes \
      --output_columns _id,n_likes,n_likes_string
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "n_likes_string",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         5,
    #         "5"
    #       ],
    #       [
    #         2,
    #         10,
    #         "10"
    #       ],
    #       [
    #         3,
    #         15,
    #         "15"
    #       ],
    #       [
    #         1,
    #         3,
    #         "3"
    #       ],
    #       [
    #         2,
    #         3,
    #         "3"
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.6.4. `columns[${NAME}].value`

バージョン 7.0.1 で追加.

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

ウィンドウ関数を使う場合は、 `value` の値に ウィンドウ関数 を指定し、さらに他のウィンドウ関数関連のパラメーターも指定する必要があります。詳細は ウィンドウ関数関連の引数 を見てください。

必須の引数です。

以下は内容の文字数を格納するための動的カラムを1つ作る例です。この例では文字数を数えるために `functions/string` プラグイン内の string_length 関数を使っています。 `functions/string` プラグインを登録するために plugin_register を使っています。

実行例:

    plugin_register functions/string
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[content_length].stage initial \
      --columns[content_length].type UInt32 \
      --columns[content_length].value 'string_length(content)' \
      --output_columns _id,content,content_length
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "content",
    #           "Text"
    #         ],
    #         [
    #           "content_length",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         1,
    #         "Welcome! This is my first post!",
    #         31
    #       ],
    #       [
    #         2,
    #         "I started to use Groonga. It's very fast!",
    #         41
    #       ],
    #       [
    #         3,
    #         "I also started to use Mroonga. It's also very fast! Really fast!",
    #         64
    #       ],
    #       [
    #         1,
    #         "I migrated all Senna system!",
    #         28
    #       ],
    #       [
    #         2,
    #         "I also migrated all Tritonn system!",
    #         35
    #       ]
    #     ]
    #   ]
    # ]

### 7.3.35.5.7. ウィンドウ関数関連の引数

バージョン 7.0.1 で追加.

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

注釈

バージョン9.0.1以前では、複数のテーブルをまたがったウィンドウ関数はサポートしていません。バージョン9.0.2以降ではサポートしていますが、先頭のグループキーまたは、ソートキーがシャードキーと同じ順序で並んでいる必要があります。

例えば、以下のようなケースでは、複数のテーブルをまたいでウインドウ関数を適用できます。以下の例では、先頭のグループキーがシャードキーと同じ順序で並んでいるからです。

以下の例では、先頭のグループキーは `price` でシャードキーは `timestamp` です。 `price` と `timestamp` は同じ順序で並んでいるため、複数のテーブルをまたいでウインドウ関数を適用できます。

実行例:

    plugin_register sharding

    table_create Logs_20170415 TABLE_NO_KEY
    column_create Logs_20170415 timestamp COLUMN_SCALAR Time
    column_create Logs_20170415 price COLUMN_SCALAR UInt32
    column_create Logs_20170415 n_likes COLUMN_SCALAR UInt32

    table_create Logs_20170416 TABLE_NO_KEY
    column_create Logs_20170416 timestamp COLUMN_SCALAR Time
    column_create Logs_20170416 price COLUMN_SCALAR UInt32
    column_create Logs_20170416 n_likes COLUMN_SCALAR UInt32

    load --table Logs_20170415
    [
    {"timestamp": "2017/04/15 00:00:00", "n_likes": 2, "price": 100},
    {"timestamp": "2017/04/15 01:00:00", "n_likes": 1, "price": 100},
    {"timestamp": "2017/04/15 01:00:00", "n_likes": 2, "price": 200}
    ]

    load --table Logs_20170416
    [
    {"timestamp": "2017/04/16 10:00:00", "n_likes": 1, "price": 200},
    {"timestamp": "2017/04/16 11:00:00", "n_likes": 2, "price": 300},
    {"timestamp": "2017/04/16 11:00:00", "n_likes": 1, "price": 300}
    ]

    logical_select Logs \
      --shard_key timestamp \
      --columns[count].stage initial \
      --columns[count].type UInt32 \
      --columns[count].flags COLUMN_SCALAR \
      --columns[count].value 'window_count()' \
      --columns[count].window.group_keys price \
      --output_columns price,count
    # [
    #   [
    #     0,
    #     0.0,
    #     0.0
    #   ],
    #   [
    #     [
    #       [
    #         6
    #       ],
    #       [
    #         [
    #           "price",
    #           "UInt32"
    #         ],
    #         [
    #           "count",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         100,
    #         2
    #       ],
    #       [
    #         100,
    #         2
    #       ],
    #       [
    #         200,
    #         2
    #       ],
    #       [
    #         200,
    #         2
    #       ],
    #       [
    #         300,
    #         2
    #       ],
    #       [
    #         300,
    #         2
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.7.1. `columns[${NAME}].window.sort_keys`

バージョン 7.0.1 で追加.

select の columns[${NAME}].window.sort_keys に対応しています。詳細は columns[${NAME}].window.sort_keys を見てください。

ウィンドウ関数を使うには columns[${NAME}].window.sort_keys または columns[${NAME}].window.group_keys を指定しなければいけません。

以下は `Entries.tag` 毎に累積和を計算する例です。各グループ内のレコードは `Entries._key` でソートします。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[n_likes_cumulative_sum_per_tag].stage initial \
      --columns[n_likes_cumulative_sum_per_tag].type UInt32 \
      --columns[n_likes_cumulative_sum_per_tag].value 'window_sum(n_likes)' \
      --columns[n_likes_cumulative_sum_per_tag].window.sort_keys _key \
      --columns[n_likes_cumulative_sum_per_tag].window.group_keys tag \
      --sort_keys _key \
      --output_columns tag,_key,n_likes,n_likes_cumulative_sum_per_tag
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "tag",
    #           "ShortText"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "n_likes_cumulative_sum_per_tag",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         "Groonga",
    #         "Groonga",
    #         10,
    #         10
    #       ],
    #       [
    #         "Groonga",
    #         "Mroonga",
    #         15,
    #         25
    #       ],
    #       [
    #         "Hello",
    #         "The first post!",
    #         5,
    #         5
    #       ],
    #       [
    #         "Senna",
    #         "Good-bye Senna",
    #         3,
    #         3
    #       ],
    #       [
    #         "Senna",
    #         "Good-bye Tritonn",
    #         3,
    #         6
    #       ]
    #     ]
    #   ]
    # ]

#### 7.3.35.5.7.2. `columns[${NAME}].window.group_keys`

バージョン 7.0.1 で追加.

select の columns[${NAME}].window.group_keys に対応しています。詳細は columns[${NAME}].window.group_keys を見てください。

ウィンドウ関数を使うには columns[${NAME}].window.sort_keys または columns[${NAME}].window.group_keys を指定しなければいけません。

以下は `Entries.tag` 毎に合計を計算する例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --columns[n_likes_sum_per_tag].stage initial \
      --columns[n_likes_sum_per_tag].type UInt32 \
      --columns[n_likes_sum_per_tag].value 'window_sum(n_likes)' \
      --columns[n_likes_sum_per_tag].window.group_keys tag \
      --sort_keys _key \
      --output_columns tag,_key,n_likes,n_likes_sum_per_tag
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "tag",
    #           "ShortText"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "n_likes",
    #           "UInt32"
    #         ],
    #         [
    #           "n_likes_sum_per_tag",
    #           "UInt32"
    #         ]
    #       ],
    #       [
    #         "Groonga",
    #         "Groonga",
    #         10,
    #         25
    #       ],
    #       [
    #         "Groonga",
    #         "Mroonga",
    #         15,
    #         25
    #       ],
    #       [
    #         "Hello",
    #         "The first post!",
    #         5,
    #         5
    #       ],
    #       [
    #         "Senna",
    #         "Good-bye Senna",
    #         3,
    #         6
    #       ],
    #       [
    #         "Senna",
    #         "Good-bye Tritonn",
    #         3,
    #         6
    #       ]
    #     ]
    #   ]
    # ]

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

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

#### 7.3.35.5.8.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.35.5.8.2. `drilldown_sortby`

バージョン 6.1.5 で非推奨: drilldown_sort_keys を代わりに使ってください

#### 7.3.35.5.8.3. `drilldown_sort_keys`

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

以下は例です。

実行例:

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

#### 7.3.35.5.8.4. `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.35.5.8.5. `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.35.5.8.6. `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.35.5.8.7. `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.35.5.8.8. `drilldown_calc_target`

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

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

#### 7.3.35.5.8.9. `drilldown_filter`

バージョン 7.0.1 で追加.

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

以下は1度しか出現していないタグをドリルダウン結果から除く例です。

実行例:

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

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

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

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

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

#### 7.3.35.5.9.1. `drilldowns[${LABEL}].keys`

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

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag.n_likes].keys tag,n_likes \
      --drilldowns[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.35.5.9.2. `drilldowns[${LABEL}].output_columns`

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

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

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

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[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.35.5.9.3. `drilldowns[${LABEL}].sortby`

バージョン 6.1.5 で非推奨: drilldowns[${LABEL}].sort_keys を代わりに使ってください

#### 7.3.35.5.9.4. `drilldowns[${LABEL}].sort_keys`

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

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

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

以下は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 \
      --drilldowns[tag.n_likes].keys tag,n_likes \
      --drilldowns[tag.n_likes].output_columns _nsubrecs,_value.n_likes,_value.tag \
      --drilldowns[tag.n_likes].sort_keys -_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.35.5.9.5. `drilldowns[${LABEL}].offset`

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

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag.n_likes].keys tag \
      --drilldowns[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.35.5.9.6. `drilldowns[${LABEL}].limit`

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

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag.n_likes].keys tag \
      --drilldowns[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.35.5.9.7. `drilldowns[${LABEL}].calc_types`

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

以下は例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].calc_types MAX,MIN,SUM,AVG \
      --drilldowns[tag].calc_target n_likes \
      --drilldowns[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.35.5.9.8. `drilldowns[${LABEL}].calc_target`

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

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

#### 7.3.35.5.9.9. `drilldowns[${LABEL}].filter`

バージョン 7.0.1 で追加.

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

以下は1度しか出現していないタグをドリルダウン結果から除く例です。

実行例:

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

#### 7.3.35.5.9.10. `drilldowns[${LABEL}].columns[${NAME}].stage`

バージョン 7.0.1 で追加.

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

以下は `initial` ステージで動的カラムを作る例です。この例ではドリルダウンした各タグが1回だけ出現したかどうかを保存する動的カラムを1つ作っています。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].columns[is_popular].stage initial \
      --drilldowns[tag].columns[is_popular].type Bool \
      --drilldowns[tag].columns[is_popular].value '_nsubrecs > 1' \
      --drilldowns[tag].output_columns _key,_nsubrecs,is_popular
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ],
    #           [
    #             "is_popular",
    #             "Bool"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1,
    #           false
    #         ],
    #         [
    #           "Groonga",
    #           2,
    #           true
    #         ],
    #         [
    #           "Senna",
    #           2,
    #           true
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.35.5.9.11. `drilldowns[${LABEL}].columns[${NAME}].flags`

バージョン 7.0.1 で追加.

メインの検索の columns[${NAME}].flags に対応しています。

デフォルト値は `COLUMN_SCALAR` です。

以下は `COLUMN_VECTOR` フラグを指定してベクターカラムを作る例です。 `plugin_register functions/vector` は vector_new 関数を使うために実行しています。:

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].columns[vector].stage initial \
      --drilldowns[tag].columns[vector].flags COLUMN_VECTOR \
      --drilldowns[tag].columns[vector].type ShortText \
      --drilldowns[tag].columns[vector].value 'vector_new("a", "b", "c")' \
      --drilldowns[tag].output_columns _key,vector
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "vector",
    #             "ShortText"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           [
    #             "a",
    #             "b",
    #             "c"
    #           ]
    #         ],
    #         [
    #           "Groonga",
    #           [
    #             "a",
    #             "b",
    #             "c"
    #           ]
    #         ],
    #         [
    #           "Senna",
    #           [
    #             "a",
    #             "b",
    #             "c"
    #           ]
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.35.5.9.12. `drilldowns[${LABEL}].columns[${NAME}].type`

バージョン 7.0.1 で追加.

メインの検索の columns[${NAME}].type に対応しています。

必須の引数です。

以下は `ShortText` 型のカラムを作る例です。保存された値は自動的に `ShortText` にキャストされます。この例では数値が `ShortText` にキャストされています。

実行例:

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

#### 7.3.35.5.9.13. `drilldowns[${LABEL}].columns[${NAME}].value`

バージョン 7.0.1 で追加.

メインの検索の columns[${NAME}].value に対応しています。

必須の引数です。

以下は内容の文字数を格納するための動的カラムを1つ作る例です。この例では文字数を数えるために `functions/string` プラグイン内の string_length 関数を使っています。 `functions/string` プラグインを登録するために plugin_register を使っています。

実行例:

    plugin_register functions/string \
    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].columns[tag_length].stage initial \
      --drilldowns[tag].columns[tag_length].type UInt32 \
      --drilldowns[tag].columns[tag_length].value 'string_length(_key)' \
      --drilldowns[tag].output_columns _key,tag_length
    # [[0, 1337566253.89858, 0.000355720520019531], true]

#### 7.3.35.5.9.14. `drilldowns[${LABEL}].columns[${NAME}].window.sort_keys`

バージョン 7.0.1 で追加.

メインの検索の columns[${NAME}].window.sort_keys に対応しています。

ウィンドウ関数を使うには drilldowns[${LABEL}].columns[${NAME}].window.sort_keys または drilldowns[${LABEL}].columns[${NAME}].window.group_keys を指定しなければいけません。

以下はサブレコード数順で何番目のレコードかを計算する例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].columns[record_number].stage initial \
      --drilldowns[tag].columns[record_number].type UInt32 \
      --drilldowns[tag].columns[record_number].value 'window_record_number()' \
      --drilldowns[tag].columns[record_number].window.sort_keys _nsubrecs,_key \
      --drilldowns[tag].sort_keys record_number \
      --drilldowns[tag].output_columns _key,_nsubrecs,record_number
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ],
    #           [
    #             "record_number",
    #             "UInt32"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1,
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           2,
    #           2
    #         ],
    #         [
    #           "Senna",
    #           2,
    #           3
    #         ]
    #       ]
    #     }
    #   ]
    # ]

#### 7.3.35.5.9.15. `drilldowns[${LABEL}].columns[${NAME}].window.group_keys`

バージョン 7.0.1 で追加.

メインの検索の columns[${NAME}].window.group_keys に対応しています。

ウィンドウ関数を使うには drilldowns[${LABEL}].columns[${NAME}].window.sort_keys または drilldowns[${LABEL}].columns[${NAME}].window.group_keys を指定しなければいけません。

以下はサブレコード数が同じグループ毎にタグ名順で何番目のレコードかを計算する例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --limit 0 \
      --output_columns _id \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].columns[record_number].stage initial \
      --drilldowns[tag].columns[record_number].type UInt32 \
      --drilldowns[tag].columns[record_number].value 'window_record_number()' \
      --drilldowns[tag].columns[record_number].window.sort_keys _key \
      --drilldowns[tag].columns[record_number].window.group_keys _nsubrecs \
      --drilldowns[tag].sort_keys _nsubrecs,record_number \
      --drilldowns[tag].output_columns _key,_nsubrecs,record_number
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ]
    #       ]
    #     ],
    #     {
    #       "tag": [
    #         [
    #           3
    #         ],
    #         [
    #           [
    #             "_key",
    #             "ShortText"
    #           ],
    #           [
    #             "_nsubrecs",
    #             "Int32"
    #           ],
    #           [
    #             "record_number",
    #             "UInt32"
    #           ]
    #         ],
    #         [
    #           "Hello",
    #           1,
    #           1
    #         ],
    #         [
    #           "Groonga",
    #           2,
    #           1
    #         ],
    #         [
    #           "Senna",
    #           2,
    #           2
    #         ]
    #       ]
    #     }
    #   ]
    # ]

### 7.3.35.5.10. キャッシュ関連の引数

#### 7.3.35.5.10.1. `cache`

このクエリーの結果をキャッシュするかどうかを指定します。

このクエリーの結果がキャッシュしてあると、次に同じクエリーを実行するときはキャッシュを使って高速にレスポンスを返すことができます。

これは既存のキャッシュされた結果を使うかどうかを指定するものではありません。

指定可能な値は以下の通りです。

値 | 説明
--- | ---
`no` | このクエリーの出力をキャッシュしない。
`yes` | このクエリーの出力をキャッシュする。デフォルト値。

このクエリーの結果をキャッシュしないようにする例です。

実行例:

    logical_select \
      --logical_table Entries \
      --shard_key created_at \
      --cache no
    # [
    #   [
    #     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"
    #       ]
    #     ]
    #   ]
    # ]

デフォルト値は `yes` です。

## 7.3.35.6. 戻り値

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