# Создание распределённой таблицы

Manticore позволяет создавать **распределённые таблицы**, которые работают как обычные plain или real-time таблицы, но на самом деле являются коллекцией дочерних таблиц, используемых для поиска. Когда запрос отправляется в распределённую таблицу, он распределяется по всем таблицам в коллекции. Затем сервер собирает и обрабатывает ответы для сортировки и при необходимости перерасчёта значений агрегатов.

С точки зрения клиента, создаётся впечатление, что он выполняет запрос к одной таблице.

<!-- example distributed-table-definition -->

Распределённые таблицы могут состоять из любых комбинаций таблиц, включая:

* Локальные таблицы хранения ([plain table](../../Creating_a_table/Local_tables/Plain_table.md) и [Real-Time](../../Creating_a_table/Local_tables/Real-time_table.md))
* [Удалённые таблицы](../../Creating_a_table/Creating_a_distributed_table/Remote_tables.md)
* Комбинация локальных и удалённых таблиц
* [Percolate таблицы](../../Creating_a_table/Local_tables/Percolate_table.md) (локальные, удалённые или комбинация)
* Одна локальная и несколько удалённых таблиц или любая другая комбинация

Смешивание percolate и шаблонных таблиц с plain и real-time таблицами не рекомендуется.

Распределенная таблица определяется как тип 'distributed' в файле конфигурации или через SQL-предложение `CREATE TABLE`.

<!-- intro -->
##### Конфиг:

<!-- request Config -->
```ini
table foo {
    type = distributed
    local = bar
    local = bar1, bar2
    agent = 127.0.0.1:9312:baz
    agent = host1|host2:tbl
    agent = host1:9301:tbl1|host2:tbl2 [ha_strategy=random retry_count=10]
    ...
}
```

<!-- intro -->
##### SQL:

<!-- request SQL -->
```sql
CREATE TABLE distributed_table type='distributed'
  local='local_table'
  agent='127.0.0.1:9312:remote_table';
```
<!-- end -->

## Дочерние таблицы

Суть распределённой таблицы заключается в списке дочерних таблиц, на которые она ссылается. Существует два типа дочерних таблиц в распределённой таблице:

1. [Локальные таблицы](../../Creating_a_table/Creating_a_distributed_table/Creating_a_local_distributed_table.md#Creating-a-local-distributed-table): Это таблицы, обслуживаемые на том же сервере, что и распределённая таблица. Для перечисления локальных таблиц используется синтаксис `local =`. Вы можете указать несколько локальных таблиц с помощью нескольких строк `local =` или объединить их в один список, разделённый запятыми.

2. [Удалённые таблицы](../../Creating_a_table/Creating_a_distributed_table/Remote_tables.md#agent): Это таблицы, обслуживаемые вне сервера. Для перечисления удалённых таблиц используется синтаксис `agent =`. Каждая строка представляет один endpoint или агент. Каждый агент может иметь несколько внешних локаций и опций того, как он должен работать. Подробнее [здесь](../../Creating_a_table/Creating_a_distributed_table/Remote_tables.md#agent). Важно отметить, что сервер не имеет информации о типе таблицы, с которой он работает. Это может привести к ошибкам, если, например, вы выполните `CALL PQ` для удалённой таблицы 'foo', которая не является percolate таблицей.

<!-- proofread -->
