Будьте аккуратны с этой функциональностью, поскольку сервер ClickHouse не отслеживает внешние изменения данных. Если в файл будет производиться запись одновременно со стороны сервера ClickHouse и с внешней стороны, то результат непредсказуем.
diff --git a/docs/ru/table_engines/graphitemergetree.md b/docs/ru/operations/table_engines/graphitemergetree.md
similarity index 95%
rename from docs/ru/table_engines/graphitemergetree.md
rename to docs/ru/operations/table_engines/graphitemergetree.md
index f3dad938c34..3617fe40829 100644
--- a/docs/ru/table_engines/graphitemergetree.md
+++ b/docs/ru/operations/table_engines/graphitemergetree.md
@@ -14,7 +14,7 @@ Graphite хранит в ClickHouse полные данные, а получат
Используется движок `GraphiteMergeTree`.
-Движок наследует свойства MergeTree. Настройки прореживания данных задаются параметром [graphite_rollup](../operations/server_settings/settings.md#server_settings-graphite_rollup) в конфигурации сервера .
+Движок наследует свойства MergeTree. Настройки прореживания данных задаются параметром [graphite_rollup](../server_settings/settings.md#server_settings-graphite_rollup) в конфигурации сервера .
## Использование движка
diff --git a/docs/ru/table_engines/index.md b/docs/ru/operations/table_engines/index.md
similarity index 100%
rename from docs/ru/table_engines/index.md
rename to docs/ru/operations/table_engines/index.md
diff --git a/docs/ru/table_engines/join.md b/docs/ru/operations/table_engines/join.md
similarity index 100%
rename from docs/ru/table_engines/join.md
rename to docs/ru/operations/table_engines/join.md
diff --git a/docs/ru/table_engines/kafka.md b/docs/ru/operations/table_engines/kafka.md
similarity index 94%
rename from docs/ru/table_engines/kafka.md
rename to docs/ru/operations/table_engines/kafka.md
index 8225192e337..f368fae3860 100644
--- a/docs/ru/table_engines/kafka.md
+++ b/docs/ru/operations/table_engines/kafka.md
@@ -67,7 +67,7 @@ Kafka(broker_list, topic_list, group_name, format[, schema, num_consumers])
SELECT level, sum(total) FROM daily GROUP BY level;
```
-Для улучшения производительности полученные сообщения группируются в блоки размера [max_insert_block_size](../operations/settings/settings.md#settings-settings-max_insert_block_size). Если блок не удалось сформировать за [stream_flush_interval_ms](../operations/settings/settings.md#settings-settings_stream_flush_interval_ms) миллисекунд, то данные будут сброшены в таблицу независимо от полноты блока.
+Для улучшения производительности полученные сообщения группируются в блоки размера [max_insert_block_size](../settings/settings.md#settings-settings-max_insert_block_size). Если блок не удалось сформировать за [stream_flush_interval_ms](../settings/settings.md#settings-settings_stream_flush_interval_ms) миллисекунд, то данные будут сброшены в таблицу независимо от полноты блока.
Чтобы остановить получение данных топика или изменить логику преобразования, отсоедините материализованное представление:
@@ -97,4 +97,4 @@ Kafka(broker_list, topic_list, group_name, format[, schema, num_consumers])
```
-В документе [librdkafka configuration reference](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md) можно увидеть список возможных опций конфигурации. Используйте подчёркивания (`_`) вместо точек в конфигурации ClickHouse, например, `check.crcs=true` будет соответствовать `
true`.
\ No newline at end of file
+В документе [librdkafka configuration reference](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md) можно увидеть список возможных опций конфигурации. Используйте подчёркивания (`_`) вместо точек в конфигурации ClickHouse, например, `check.crcs=true` будет соответствовать `
true`.
diff --git a/docs/ru/table_engines/log.md b/docs/ru/operations/table_engines/log.md
similarity index 100%
rename from docs/ru/table_engines/log.md
rename to docs/ru/operations/table_engines/log.md
diff --git a/docs/ru/operations/table_engines/materializedview.md b/docs/ru/operations/table_engines/materializedview.md
new file mode 100644
index 00000000000..8c44eb40c01
--- /dev/null
+++ b/docs/ru/operations/table_engines/materializedview.md
@@ -0,0 +1,3 @@
+# MaterializedView
+
+Используется для реализации материализованных представлений (подробнее см. запрос [CREATE TABLE](../../query_language/create.md#query_language-queries-create_table)). Для хранения данных, использует другой движок, который был указан при создании представления. При чтении из таблицы, просто использует этот движок.
diff --git a/docs/ru/table_engines/memory.md b/docs/ru/operations/table_engines/memory.md
similarity index 100%
rename from docs/ru/table_engines/memory.md
rename to docs/ru/operations/table_engines/memory.md
diff --git a/docs/ru/table_engines/merge.md b/docs/ru/operations/table_engines/merge.md
similarity index 100%
rename from docs/ru/table_engines/merge.md
rename to docs/ru/operations/table_engines/merge.md
diff --git a/docs/ru/table_engines/mergetree.md b/docs/ru/operations/table_engines/mergetree.md
similarity index 98%
rename from docs/ru/table_engines/mergetree.md
rename to docs/ru/operations/table_engines/mergetree.md
index b11e00f83d1..62ea3dc2e2f 100644
--- a/docs/ru/table_engines/mergetree.md
+++ b/docs/ru/operations/table_engines/mergetree.md
@@ -56,7 +56,7 @@ SELECT count() FROM table WHERE ((EventDate >= toDate('2014-01-01') AND EventDat
SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%'
```
-Чтобы проверить, сможет ли ClickHouse использовать индекс при выполнении запроса, используйте настройки [force_index_by_date](../operations/settings/settings.md#settings-settings-force_index_by_date) и [force_primary_key](../operations/settings/settings.md#settings-settings-force_primary_key).
+Чтобы проверить, сможет ли ClickHouse использовать индекс при выполнении запроса, используйте настройки [force_index_by_date](../settings/settings.md#settings-settings-force_index_by_date) и [force_primary_key](../settings/settings.md#settings-settings-force_primary_key).
Индекс по дате обеспечивает чтение только кусков, содержащих даты из нужного диапазона. При этом кусок данных может содержать данные за многие даты (до целого месяца), а в пределах одного куска данные лежат упорядоченными по первичному ключу, который может не содержать дату в качестве первого столбца. В связи с этим, при использовании запроса с указанием условия только на дату, но не на префикс первичного ключа, будет читаться данных больше, чем за одну дату.
diff --git a/docs/ru/table_engines/mysql.md b/docs/ru/operations/table_engines/mysql.md
similarity index 100%
rename from docs/ru/table_engines/mysql.md
rename to docs/ru/operations/table_engines/mysql.md
diff --git a/docs/ru/table_engines/null.md b/docs/ru/operations/table_engines/null.md
similarity index 100%
rename from docs/ru/table_engines/null.md
rename to docs/ru/operations/table_engines/null.md
diff --git a/docs/ru/table_engines/replacingmergetree.md b/docs/ru/operations/table_engines/replacingmergetree.md
similarity index 100%
rename from docs/ru/table_engines/replacingmergetree.md
rename to docs/ru/operations/table_engines/replacingmergetree.md
diff --git a/docs/ru/table_engines/replication.md b/docs/ru/operations/table_engines/replication.md
similarity index 98%
rename from docs/ru/table_engines/replication.md
rename to docs/ru/operations/table_engines/replication.md
index 22eab99739f..40d23b2b9ea 100644
--- a/docs/ru/table_engines/replication.md
+++ b/docs/ru/operations/table_engines/replication.md
@@ -15,7 +15,7 @@
Репликация не зависит от шардирования. На каждом шарде репликация работает независимо.
-Реплицируются сжатые данные запросов `INSERT`, `ALTER` (см. подробности в описании запроса [ALTER](../query_language/queries.md#query_language_queries_alter)).
+Реплицируются сжатые данные запросов `INSERT`, `ALTER` (см. подробности в описании запроса [ALTER](../../query_language/alter.md#query_language_queries_alter)).
Запросы `CREATE`, `DROP`, `ATTACH`, `DETACH`, `RENAME` выполняются на одном сервере и не реплицируются:
@@ -48,7 +48,7 @@
Если в конфигурационном файле не настроен ZooKeeper, то вы не сможете создать реплицируемые таблицы, а уже имеющиеся реплицируемые таблицы будут доступны в режиме только на чтение.
-При запросах `SELECT`, ZooKeeper не используется, т.е. репликация не влияет на производительность `SELECT` и запросы работают так же быстро, как и для нереплицируемых таблиц. При запросах к распределенным реплицированным таблицам поведение ClickHouse регулируется настройками [max_replica_delay_for_distributed_queries](../operations/settings/settings.md#settings_settings_max_replica_delay_for_distributed_queries) и [fallback_to_stale_replicas_for_distributed_queries](../operations/settings/settings.md#settings-settings-fallback_to_stale_replicas_for_distributed_queries).
+При запросах `SELECT`, ZooKeeper не используется, т.е. репликация не влияет на производительность `SELECT` и запросы работают так же быстро, как и для нереплицируемых таблиц. При запросах к распределенным реплицированным таблицам поведение ClickHouse регулируется настройками [max_replica_delay_for_distributed_queries](../settings/settings.md#settings_settings_max_replica_delay_for_distributed_queries) и [fallback_to_stale_replicas_for_distributed_queries](../settings/settings.md#settings-settings-fallback_to_stale_replicas_for_distributed_queries).
При каждом запросе `INSERT` (точнее, на каждый вставляемый блок данных; запрос INSERT содержит один блок, или по блоку на каждые `max_insert_block_size = 1048576` строк), делается около десятка записей в ZooKeeper в рамках нескольких транзакций. Это приводит к некоторому увеличению задержек при `INSERT`, по сравнению с нереплицируемыми таблицами. Но если придерживаться обычных рекомендаций - вставлять данные пачками не более одного `INSERT` в секунду, то это не составляет проблем. На всём кластере ClickHouse, использующим для координации один кластер ZooKeeper, может быть в совокупности несколько сотен `INSERT` в секунду. Пропускная способность при вставке данных (количество строчек в секунду) такая же высокая, как для нереплицируемых таблиц.
@@ -60,7 +60,7 @@
Каждый блок данных записывается атомарно. Запрос INSERT разбивается на блоки данных размером до `max_insert_block_size = 1048576` строк. То есть, если в запросе `INSERT` менее 1048576 строк, то он делается атомарно.
-Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос `INSERT`. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. То есть, обеспечивается идемпотентность `INSERT`. Параметры дедупликации регулируются настройками сервера [merge_tree](../operations/server_settings/settings.md#server_settings-merge_tree).
+Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков данных одинакового размера, содержащих одни и те же строчки в одном и том же порядке), блок будет записан только один раз. Это сделано для того, чтобы в случае сбоя в сети, когда клиентское приложение не может понять, были ли данные записаны в БД, можно было просто повторить запрос `INSERT`. При этом не имеет значения, на какую реплику будут отправлены INSERT-ы с одинаковыми данными. То есть, обеспечивается идемпотентность `INSERT`. Параметры дедупликации регулируются настройками сервера [merge_tree](../server_settings/settings.md#server_settings-merge_tree).
При репликации, по сети передаются только исходные вставляемые данные. Дальнейшие преобразования данных (слияния) координируются и делаются на всех репликах одинаковым образом. За счёт этого минимизируется использование сети, и благодаря этому, репликация хорошо работает при расположении реплик в разных датацентрах. (Стоит заметить, что дублирование данных в разных датацентрах, по сути, является основной задачей репликации).
diff --git a/docs/ru/table_engines/set.md b/docs/ru/operations/table_engines/set.md
similarity index 100%
rename from docs/ru/table_engines/set.md
rename to docs/ru/operations/table_engines/set.md
diff --git a/docs/ru/table_engines/summingmergetree.md b/docs/ru/operations/table_engines/summingmergetree.md
similarity index 100%
rename from docs/ru/table_engines/summingmergetree.md
rename to docs/ru/operations/table_engines/summingmergetree.md
diff --git a/docs/ru/table_engines/tinylog.md b/docs/ru/operations/table_engines/tinylog.md
similarity index 100%
rename from docs/ru/table_engines/tinylog.md
rename to docs/ru/operations/table_engines/tinylog.md
diff --git a/docs/ru/table_engines/view.md b/docs/ru/operations/table_engines/view.md
similarity index 100%
rename from docs/ru/table_engines/view.md
rename to docs/ru/operations/table_engines/view.md
diff --git a/docs/ru/utils/clickhouse-copier.md b/docs/ru/operations/utils/clickhouse-copier.md
similarity index 100%
rename from docs/ru/utils/clickhouse-copier.md
rename to docs/ru/operations/utils/clickhouse-copier.md
diff --git a/docs/ru/utils/clickhouse-local.md b/docs/ru/operations/utils/clickhouse-local.md
similarity index 98%
rename from docs/ru/utils/clickhouse-local.md
rename to docs/ru/operations/utils/clickhouse-local.md
index 64aec03ab76..06053e15a2f 100644
--- a/docs/ru/utils/clickhouse-local.md
+++ b/docs/ru/operations/utils/clickhouse-local.md
@@ -2,7 +2,7 @@
# clickhouse-local
-Принимает на вход данные, которые можно представить в табличном виде и выполняет над ними операции, заданные на [языке запросов](../query_language/queries.md#queries) ClickHouse.
+Принимает на вход данные, которые можно представить в табличном виде и выполняет над ними операции, заданные на [языке запросов](../../query_language/index.md#queries) ClickHouse.
`clickhouse-local` использует движок сервера ClickHouse, т.е. поддерживает все форматы данных и движки таблиц, с которыми работает ClickHouse, при этом для выполнения операций не требуется запущенный сервер.
diff --git a/docs/ru/utils/index.md b/docs/ru/operations/utils/index.md
similarity index 100%
rename from docs/ru/utils/index.md
rename to docs/ru/operations/utils/index.md
diff --git a/docs/ru/agg_functions/combinators.md b/docs/ru/query_language/agg_functions/combinators.md
similarity index 100%
rename from docs/ru/agg_functions/combinators.md
rename to docs/ru/query_language/agg_functions/combinators.md
diff --git a/docs/ru/agg_functions/index.md b/docs/ru/query_language/agg_functions/index.md
similarity index 100%
rename from docs/ru/agg_functions/index.md
rename to docs/ru/query_language/agg_functions/index.md
diff --git a/docs/ru/agg_functions/parametric_functions.md b/docs/ru/query_language/agg_functions/parametric_functions.md
similarity index 100%
rename from docs/ru/agg_functions/parametric_functions.md
rename to docs/ru/query_language/agg_functions/parametric_functions.md
diff --git a/docs/ru/agg_functions/reference.md b/docs/ru/query_language/agg_functions/reference.md
similarity index 98%
rename from docs/ru/agg_functions/reference.md
rename to docs/ru/query_language/agg_functions/reference.md
index 6b30d771dd9..35f79533003 100644
--- a/docs/ru/agg_functions/reference.md
+++ b/docs/ru/query_language/agg_functions/reference.md
@@ -35,7 +35,7 @@ anyHeavy(column)
**Пример**
-Возьмем набор данных [OnTime](../getting_started/example_datasets/ontime.md#example_datasets-ontime) и выберем произвольное часто встречающееся значение в столбце `AirlineID`.
+Возьмем набор данных [OnTime](../../getting_started/example_datasets/ontime.md#example_datasets-ontime) и выберем произвольное часто встречающееся значение в столбце `AirlineID`.
```sql
SELECT anyHeavy(AirlineID) AS res
@@ -336,7 +336,7 @@ topK(N)(column)
**Пример**
-Возьмем набор данных [OnTime](../getting_started/example_datasets/ontime.md#example_datasets-ontime) и выберем 3 наиболее часто встречающихся значения в столбце `AirlineID`.
+Возьмем набор данных [OnTime](../../getting_started/example_datasets/ontime.md#example_datasets-ontime) и выберем 3 наиболее часто встречающихся значения в столбце `AirlineID`.
```sql
SELECT topK(3)(AirlineID) AS res
diff --git a/docs/ru/query_language/alter.md b/docs/ru/query_language/alter.md
new file mode 100644
index 00000000000..b26a3ba9e32
--- /dev/null
+++ b/docs/ru/query_language/alter.md
@@ -0,0 +1,265 @@
+
+
+## ALTER
+Запрос `ALTER` поддерживается только для таблиц типа `*MergeTree`, а также `Merge` и `Distributed`. Запрос имеет несколько вариантов.
+
+### Манипуляции со столбцами
+
+Изменение структуры таблицы.
+
+```sql
+ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
+```
+
+В запросе указывается список из одного или более действий через запятую.
+Каждое действие - операция над столбцом.
+
+Существуют следующие действия:
+
+```sql
+ADD COLUMN name [type] [default_expr] [AFTER name_after]
+```
+
+Добавляет в таблицу новый столбец с именем name, типом type и выражением для умолчания `default_expr` (смотрите раздел "Значения по умолчанию"). Если указано `AFTER name_after` (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Иначе, столбец добавляется в конец таблицы. Внимательный читатель может заметить, что отсутствует возможность добавить столбец в начало таблицы. Для цепочки действий, name_after может быть именем столбца, который добавляется в одном из предыдущих действий.
+
+Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree).
+
+Такая схема позволяет добиться мгновенной работы запроса ALTER и отсутствия необходимости увеличивать объём старых данных.
+
+```sql
+DROP COLUMN name
+```
+
+Удаляет столбец с именем name.
+Удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно.
+
+```sql
+MODIFY COLUMN name [type] [default_expr]
+```
+
+Изменяет тип столбца name на type и/или выражение для умолчания на default_expr. При изменении типа, значения преобразуются так, как если бы к ним была применена функция toType.
+
+Если изменяется только выражение для умолчания, то запрос не делает никакой сложной работы и выполняется мгновенно.
+
+Изменение типа столбца - это единственное действие, которое выполняет сложную работу - меняет содержимое файлов с данными. Для больших таблиц, выполнение может занять длительное время.
+
+Выполнение производится в несколько стадий:
+- подготовка временных (новых) файлов с изменёнными данными;
+- переименование старых файлов;
+- переименование временных (новых) файлов в старые;
+- удаление старых файлов.
+
+Из них, длительной является только первая стадия. Если на этой стадии возникнет сбой, то данные не поменяются.
+Если на одной из следующих стадий возникнет сбой, то данные будет можно восстановить вручную. За исключением случаев, когда старые файлы удалены из файловой системы, а данные для новых файлов не доехали на диск и потеряны.
+
+Не поддерживается изменение типа столбца у массивов и вложенных структур данных.
+
+Запрос `ALTER` позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида `name.nested_name` и типом `Array(T)` - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки.
+
+Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение `ENGINE`). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с `DateTime` на `UInt32`).
+
+Если возможностей запроса `ALTER` не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса `INSERT SELECT`, затем поменять таблицы местами с помощью запроса `RENAME`, и удалить старую таблицу.
+
+Запрос `ALTER` блокирует все чтения и записи для таблицы. То есть, если на момент запроса `ALTER`, выполнялся долгий `SELECT`, то запрос `ALTER` сначала дождётся его выполнения. И в это время, все новые запросы к той же таблице, будут ждать, пока завершится этот `ALTER`.
+
+Для таблиц, которые не хранят данные самостоятельно (типа `Merge` и `Distributed`), `ALTER` всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа `Distributed`, вам также потребуется выполнить запрос `ALTER` для таблиц на всех удалённых серверах.
+
+Запрос `ALTER` на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы `ALTER` выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно.
+
+### Манипуляции с партициями и кусками
+
+Работает только для таблиц семейства `MergeTree`. Существуют следующие виды операций:
+
+- `DETACH PARTITION` - перенести партицию в директорию detached и забыть про неё.
+- `DROP PARTITION` - удалить партицию.
+- `ATTACH PART|PARTITION` - добавить в таблицу новый кусок или партицию из директории `detached`.
+- `FREEZE PARTITION` - создать бэкап партиции.
+- `FETCH PARTITION` - скачать партицию с другого сервера.
+
+Ниже будет рассмотрен каждый вид запроса по-отдельности.
+
+Партицией (partition) в таблице называются данные за один календарный месяц. Это определяется значениями ключа-даты, указанной в параметрах движка таблицы. Данные за каждый месяц хранятся отдельно, чтобы упростить всевозможные манипуляции с этими данными.
+
+Куском (part) в таблице называется часть данных одной партиции, отсортированная по первичному ключу.
+
+Чтобы посмотреть набор кусков и партиций таблицы, можно воспользоваться системной таблицей `system.parts`:
+
+```sql
+SELECT * FROM system.parts WHERE active
+```
+
+`active` - учитывать только активные куски. Неактивными являются, например, исходные куски оставшиеся после слияния в более крупный кусок - такие куски удаляются приблизительно через 10 минут после слияния.
+
+Другой способ посмотреть набор кусков и партиций - зайти в директорию с данными таблицы.
+Директория с данными - `/var/lib/clickhouse/data/database/table/`,
+где `/var/lib/clickhouse/` - путь к данным ClickHouse, database - имя базы данных, table - имя таблицы. Пример:
+
+```bash
+$ ls -l /var/lib/clickhouse/data/test/visits/
+total 48
+drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
+drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
+drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
+-rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
+```
+
+Здесь `20140317_20140323_2_2_0`, `20140317_20140323_4_4_0` - директории кусков.
+
+Рассмотрим по порядку имя первого куска: `20140317_20140323_2_2_0`.
+
+- `20140317` - минимальная дата данных куска
+- `20140323` - максимальная дата данных куска
+- `2` - минимальный номер блока данных
+- `2` - максимальный номер блока данных
+- `0` - уровень куска - глубина дерева слияний, которыми он образован
+
+Каждый кусок относится к одной партиции и содержит данные только за один месяц.
+`201403` - имя партиции. Партиция представляет собой набор кусков за один месяц.
+
+При работающем сервере, нельзя вручную изменять набор кусков или их данные на файловой системе, так как сервер не будет об этом знать.
+Для нереплицируемых таблиц, вы можете это делать при остановленном сервере, хотя это не рекомендуется.
+Для реплицируемых таблиц, набор кусков нельзя менять в любом случае.
+
+Директория `detached` содержит куски, не используемые сервером - отцепленные от таблицы с помощью запроса `ALTER ... DETACH`. Также в эту директорию переносятся куски, признанные повреждёнными, вместо их удаления. Вы можете в любое время добавлять, удалять, модифицировать данные в директории detached - сервер не будет об этом знать, пока вы не сделаете запрос `ALTER TABLE ... ATTACH`.
+
+```sql
+ALTER TABLE [db.]table DETACH PARTITION 'name'
+```
+
+Перенести все данные для партиции с именем name в директорию detached и забыть про них.
+Имя партиции указывается в формате YYYYMM. Оно может быть указано в одинарных кавычках или без них.
+
+После того, как запрос будет выполнен, вы можете самостоятельно сделать что угодно с данными в директории detached, например, удалить их из файловой системы, или ничего не делать.
+
+Запрос реплицируется - данные будут перенесены в директорию detached и забыты на всех репликах. Запрос может быть отправлен только на реплику-лидер. Вы можете узнать, является ли реплика лидером, сделав SELECT в системную таблицу system.replicas. Или, проще, вы можете выполнить запрос на всех репликах, и на всех кроме одной, он кинет исключение.
+
+```sql
+ALTER TABLE [db.]table DROP PARTITION 'name'
+```
+
+Аналогично операции `DETACH`. Удалить данные из таблицы. Куски с данными будут помечены как неактивные и будут полностью удалены примерно через 10 минут. Запрос реплицируется - данные будут удалены на всех репликах.
+
+```sql
+ALTER TABLE [db.]table ATTACH PARTITION|PART 'name'
+```
+
+Добавить данные в таблицу из директории detached.
+
+Существует возможность добавить данные для целой партиции (PARTITION) или отдельный кусок (PART). В случае PART, укажите полное имя куска в одинарных кавычках.
+
+Запрос реплицируется. Каждая реплика проверяет, если ли данные в директории detached. Если данные есть - проверяет их целостность, проверяет их соответствие данным на сервере-инициаторе запроса, и если всё хорошо, то добавляет их. Если нет, то скачивает данные с реплики-инициатора запроса, или с другой реплики, на которой уже добавлены эти данные.
+
+То есть, вы можете разместить данные в директории detached на одной реплике и, с помощью запроса ALTER ... ATTACH добавить их в таблицу на всех репликах.
+
+```sql
+ALTER TABLE [db.]table FREEZE PARTITION 'name'
+```
+
+Создаёт локальный бэкап одной или нескольких партиций. В качестве имени может быть указано полное имя партиции (например, 201403) или его префикс (например, 2014) - тогда бэкап будет создан для всех соответствующих партиций.
+
+Запрос делает следующее: для снэпшота данных на момент его выполнения, создаёт hardlink-и на данные таблиц в директории `/var/lib/clickhouse/shadow/N/...`
+
+`/var/lib/clickhouse/` - рабочая директория ClickHouse из конфига.
+`N` - инкрементальный номер бэкапа.
+
+Структура директорий внутри бэкапа создаётся такой же, как внутри `/var/lib/clickhouse/`.
+Также делает chmod всех файлов, запрещая запись в них.
+
+Создание бэкапа происходит почти мгновенно (но сначала дожидается окончания выполняющихся в данный момент запросов к соответствующей таблице). Бэкап изначально не занимает места на диске. При дальнейшей работе системы, бэкап может отнимать место на диске, по мере модификации данных. Если бэкап делается для достаточно старых данных, то он не будет отнимать место на диске.
+
+После создания бэкапа, данные из `/var/lib/clickhouse/shadow/` можно скопировать на удалённый сервер и затем удалить на локальном сервере.
+Весь процесс бэкапа не требует остановки сервера.
+
+Запрос `ALTER ... FREEZE PARTITION` не реплицируется. То есть, локальный бэкап создаётся только на локальном сервере.
+
+В качестве альтернативного варианта, вы можете скопировать данные из директории `/var/lib/clickhouse/data/database/table` вручную.
+Но если это делать при запущенном сервере, то возможны race conditions при копировании директории с добавляющимися/изменяющимися файлами, и бэкап может быть неконсистентным. Этот вариант может использоваться, если сервер не запущен - тогда полученные данные будут такими же, как после запроса `ALTER TABLE t FREEZE PARTITION`.
+
+`ALTER TABLE ... FREEZE PARTITION` копирует только данные, но не метаданные таблицы. Чтобы сделать бэкап метаданных таблицы, скопируйте файл `/var/lib/clickhouse/metadata/database/table.sql`
+
+Для восстановления из бэкапа:
+
+> - создайте таблицу, если её нет, с помощью запроса CREATE. Запрос можно взять из .sql файла (замените в нём `ATTACH` на `CREATE`);
+> - скопируйте данные из директории data/database/table/ внутри бэкапа в директорию `/var/lib/clickhouse/data/database/table/detached/`
+> - выполните запросы `ALTER TABLE ... ATTACH PARTITION YYYYMM`, где `YYYYMM` - месяц, для каждого месяца.
+
+Таким образом, данные из бэкапа будут добавлены в таблицу.
+Восстановление из бэкапа, так же, не требует остановки сервера.
+
+### Бэкапы и репликация
+
+Репликация защищает от аппаратных сбоев. В случае, если на одной из реплик у вас исчезли все данные, то восстановление делается по инструкции в разделе "Восстановление после сбоя".
+
+Для защиты от аппаратных сбоев, обязательно используйте репликацию. Подробнее про репликацию написано в разделе "Репликация данных".
+
+Бэкапы защищают от человеческих ошибок (случайно удалили данные, удалили не те данные или не на том кластере, испортили данные).
+Для баз данных большого объёма, бывает затруднительно копировать бэкапы на удалённые серверы. В этих случаях, для защиты от человеческой ошибки, можно держать бэкап на том же сервере (он будет лежать в `/var/lib/clickhouse/shadow/`).
+
+```sql
+ALTER TABLE [db.]table FETCH PARTITION 'name' FROM 'path-in-zookeeper'
+```
+
+Запрос работает только для реплицируемых таблиц.
+
+Скачивает указанную партицию с шарда, путь в `ZooKeeper` к которому указан в секции `FROM` и помещает в директорию `detached` указанной таблицы.
+
+Не смотря на то, что запрос называется `ALTER TABLE`, он не изменяет структуру таблицы, и не изменяет сразу доступные данные в таблице.
+
+Данные помещаются в директорию `detached`, и их можно прикрепить с помощью запроса `ALTER TABLE ... ATTACH`.
+
+В секции `FROM` указывается путь в `ZooKeeper`. Например, `/clickhouse/tables/01-01/visits`.
+Перед скачиванием проверяется существование партиции и совпадение структуры таблицы. Автоматически выбирается наиболее актуальная реплика среди живых реплик.
+
+Запрос `ALTER ... FETCH PARTITION` не реплицируется. То есть, партиция будет скачана в директорию detached только на локальном сервере. Заметим, что если вы после этого добавите данные в таблицу с помощью запроса `ALTER TABLE ... ATTACH`, то данные будут добавлены на всех репликах (на одной из реплик будут добавлены из директории detached, а на других - загружены с соседних реплик).
+
+### Синхронность запросов ALTER
+
+Для нереплицируемых таблиц, все запросы `ALTER` выполняются синхронно. Для реплицируемых таблиц, запрос всего лишь добавляет инструкцию по соответствующим действиям в `ZooKeeper`, а сами действия осуществляются при первой возможности. Но при этом, запрос может ждать завершения выполнения этих действий на всех репликах.
+
+Для запросов `ALTER ... ATTACH|DETACH|DROP` можно настроить ожидание, с помощью настройки `replication_alter_partitions_sync`.
+Возможные значения: `0` - не ждать, `1` - ждать выполнения только у себя (по умолчанию), `2` - ждать всех.
+
+
+
+### Мутации
+
+Мутации - разновидность запроса ALTER, позволяющая изменять или удалять данные в таблице. В отличие от стандартных запросов `DELETE` и `UPDATE`, рассчитанных на точечное изменение данных, область применения мутаций - достаточно тяжёлые изменения, затрагивающие много строк в таблице.
+
+Функциональность находится в состоянии beta и доступна начиная с версии 1.1.54388. Реализована поддержка *MergeTree таблиц (с репликацией и без).
+
+Конвертировать существующие таблицы для работы с мутациями не нужно. Но после применения первой мутации формат данных таблицы становится несовместимым с предыдущими версиями и откатиться на предыдущую версию уже не получится.
+
+На данный момент доступна команда `ALTER DELETE`:
+
+```sql
+ALTER TABLE [db.]table DELETE WHERE expr
+```
+
+Выражение `expr` должно иметь тип UInt8. Запрос удаляет строки таблицы, для которых это выражение принимает ненулевое значение.
+
+В одном запросе можно указать несколько команд через запятую.
+
+Для *MergeTree-таблиц мутации выполняются, перезаписывая данные по кускам (parts). При этом атомарности нет - куски заменяются на помутированные по мере выполнения и запрос `SELECT`, заданный во время выполнения мутации, увидит данные как из измененных кусков, так и из кусков, которые еще не были изменены.
+
+Мутации линейно упорядочены между собой и накладываются на каждый кусок в порядке добавления. Мутации также упорядочены со вставками - гарантируется, что данные, вставленные в таблицу до начала выполнения запроса мутации, будут изменены, а данные, вставленные после окончания запроса мутации, изменены не будут. При этом мутации никак не блокируют вставки.
+
+Запрос завершается немедленно после добавления информации о мутации (для реплицированных таблиц - в ZooKeeper, для нереплицированных - на файловую систему). Сама мутация выполняется асинхронно, используя настройки системного профиля. Следить за ходом её выполнения можно по таблице `system.mutations`. Добавленные мутации будут выполняться до конца даже в случае перезапуска серверов ClickHouse. Откатить мутацию после её добавления нельзя.
+
+#### Таблица system.mutations
+
+Таблица содержит информацию о ходе выполнения мутаций MergeTree-таблиц. Каждой команде мутации соответствует одна строка. В таблице есть следующие столбцы:
+
+**database**, **table** - имя БД и таблицы, к которой была применена мутация.
+
+**mutation_id** - ID запроса. Для реплицированных таблиц эти ID соответствуют именам записей в директории `
/mutations/` в ZooKeeper, для нереплицированных - именам файлов в директории с данными таблицы.
+
+**command** - Команда мутации (часть запроса после `ALTER TABLE [db.]table`).
+
+**create_time** - Время создания мутации.
+
+**block_numbers.partition_id**, **block_numbers.number** - Nested-столбец. Для мутаций реплицированных таблиц для каждой партиции содержит номер блока, полученный этой мутацией (в каждой партиции будут изменены только куски, содержащие блоки с номерами, меньшими номера, полученного мутацией в этой партиции). Для нереплицированных таблиц нумерация блоков сквозная по партициям, поэтому столбец содержит одну запись с единственным номером блока, полученным мутацией.
+
+**parts_to_do** - Количество кусков таблицы, которые ещё предстоит изменить.
+
+**is_done** - Завершена ли мутация. Замечание: даже если `parts_to_do = 0`, для реплицированной таблицы возможна ситуация, когда мутация ещё не завершена из-за долго выполняющейся вставки, которая добавляет данные, которые нужно будет мутировать.
+
diff --git a/docs/ru/query_language/create.md b/docs/ru/query_language/create.md
new file mode 100644
index 00000000000..a33692d12b1
--- /dev/null
+++ b/docs/ru/query_language/create.md
@@ -0,0 +1,155 @@
+## CREATE DATABASE
+Создание базы данных db_name
+
+```sql
+CREATE DATABASE [IF NOT EXISTS] db_name
+```
+
+`База данных` - это просто директория для таблиц.
+Если написано `IF NOT EXISTS`, то запрос не будет возвращать ошибку, если база данных уже существует.
+
+
+
+
+## CREATE TABLE
+Запрос `CREATE TABLE` может иметь несколько форм.
+
+```sql
+CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
+(
+ name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
+ name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
+ ...
+) ENGINE = engine
+```
+
+Создаёт таблицу с именем name в БД db или текущей БД, если db не указана, со структурой, указанной в скобках, и движком engine.
+Структура таблицы представляет список описаний столбцов. Индексы, если поддерживаются движком, указываются в качестве параметров для движка таблицы.
+
+Описание столбца, это `name type`, в простейшем случае. Пример: `RegionID UInt32`.
+Также могут быть указаны выражения для значений по умолчанию - смотрите ниже.
+
+```sql
+CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name AS [db2.]name2 [ENGINE = engine]
+```
+
+Создаёт таблицу с такой же структурой, как другая таблица. Можно указать другой движок для таблицы. Если движок не указан, то будет выбран такой же движок, как у таблицы `db2.name2`.
+
+```sql
+CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name ENGINE = engine AS SELECT ...
+```
+
+Создаёт таблицу со структурой, как результат запроса `SELECT`, с движком engine, и заполняет её данными из SELECT-а.
+
+Во всех случаях, если указано `IF NOT EXISTS`, то запрос не будет возвращать ошибку, если таблица уже существует. В этом случае, запрос будет ничего не делать.
+
+### Значения по умолчанию
+
+
+В описании столбца, может быть указано выражение для значения по умолчанию, одного из следующих видов:
+`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
+Пример: `URLDomain String DEFAULT domain(URL)`.
+
+Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также `0000-00-00` для дат и `0000-00-00 00:00:00` для дат с временем. NULL-ы не поддерживаются.
+
+В случае, если указано выражение по умолчанию, то указание типа столбца не обязательно. При отсутствии явно указанного типа, будет использован тип выражения по умолчанию. Пример: `EventDate DEFAULT toDate(EventTime)` - для столбца EventDate будет использован тип Date.
+
+При наличии явно указанного типа данных и выражения по умолчанию, это выражение будет приводиться к указанному типу с использованием функций приведения типа. Пример: `Hits UInt32 DEFAULT 0` - имеет такой же смысл, как `Hits UInt32 DEFAULT toUInt32(0)`.
+
+В качестве выражения для умолчания, может быть указано произвольное выражение от констант и столбцов таблицы. При создании и изменении структуры таблицы, проверяется, что выражения не содержат циклов. При INSERT-е проверяется разрешимость выражений - что все столбцы, из которых их можно вычислить, переданы.
+
+`DEFAULT expr`
+
+Обычное значение по умолчанию. Если в запросе INSERT не указан соответствующий столбец, то он будет заполнен путём вычисления соответствующего выражения.
+
+`MATERIALIZED expr`
+
+Материализованное выражение. Такой столбец не может быть указан при INSERT, то есть, он всегда вычисляется.
+При INSERT без указания списка столбцов, такие столбцы не рассматриваются.
+Также этот столбец не подставляется при использовании звёздочки в запросе SELECT - чтобы сохранить инвариант, что дамп, полученный путём `SELECT *`, можно вставить обратно в таблицу INSERT-ом без указания списка столбцов.
+
+`ALIAS expr`
+
+Синоним. Такой столбец вообще не хранится в таблице.
+Его значения не могут быть вставлены в таблицу, он не подставляется при использовании звёздочки в запросе SELECT.
+Он может быть использован в SELECT-ах - в таком случае, во время разбора запроса, алиас раскрывается.
+
+При добавлении новых столбцов с помощью запроса ALTER, старые данные для этих столбцов не записываются. Вместо этого, при чтении старых данных, для которых отсутствуют значения новых столбцов, выполняется вычисление выражений по умолчанию на лету. При этом, если выполнение выражения требует использования других столбцов, не указанных в запросе, то эти столбцы будут дополнительно прочитаны, но только для тех блоков данных, для которых это необходимо.
+
+Если добавить в таблицу новый столбец, а через некоторое время изменить его выражение по умолчанию, то используемые значения для старых данных (для данных, где значения не хранились на диске) поменяются. Также заметим, что при выполнении фоновых слияний, данные для столбцов, отсутствующих в одном из сливаемых кусков, записываются в объединённый кусок.
+
+Отсутствует возможность задать значения по умолчанию для элементов вложенных структур данных.
+
+### Временные таблицы
+
+Во всех случаях, если указано `TEMPORARY`, то будет создана временная таблица. Временные таблицы обладают следующими особенностями:
+- временные таблицы исчезают после завершения сессии; в том числе, при обрыве соединения;
+- временная таблица создаётся с движком Memory; все остальные движки таблиц не поддерживаются;
+- для временной таблицы нет возможности указать БД: она создаётся вне баз данных;
+- если временная таблица имеет то же имя, что и некоторая другая, то, при упоминании в запросе без указания БД, будет использована временная таблица;
+- при распределённой обработке запроса, используемые в запросе временные таблицы, передаются на удалённые серверы.
+
+В большинстве случаев, временные таблицы создаются не вручную, а при использовании внешних данных для запроса, или при распределённом `(GLOBAL) IN`. Подробнее см. соответствующие разделы
+
+Распределенные DDL запросы (секция ON CLUSTER)
+----------------------------------------------
+
+Запросы `CREATE`, `DROP`, `ALTER`, `RENAME` поддерживают возможность распределенного выполнения на кластере.
+Например, следующий запрос создает `Distributed`-таблицу `all_hits` на каждом хосте кластера `cluster`:
+
+```sql
+CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)
+```
+
+Для корректного выполнения таких запросов необходимо на каждом хосте иметь одинаковое определение кластера (для упрощения синхронизации конфигов можете использовать подстановки из ZooKeeper), также необходимо подключение к ZooKeeper серверам.
+Локальная версия запроса в конечном итоге будет выполнена на каждом хосте кластера, даже если некоторые хосты в данный момент не доступны, гарантируется упорядоченность выполнения запросов в рамках одного хоста.
+Пока не поддерживаются `ALTER`-запросы для реплицированных таблиц.
+
+## CREATE VIEW
+
+```sql
+CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...
+```
+
+Создаёт представление. Представления бывают двух видов - обычные и материализованные (MATERIALIZED).
+
+При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
+
+Материализованное представление работает следующим образом: при вставлении данных в таблицу, указанную в SELECT, часть вставленных данных конвертируется запросом, а результат вставляется в представление.
+
+Обычные представления не хранят никаких данных, а всего лишь производят чтение из другой таблицы. То есть, обычное представление - не более чем сохранённый запрос. При чтении из представления, этот сохранённый запрос, используется в качестве подзапроса в секции FROM.
+
+Для примера, пусть вы создали представление:
+
+```sql
+CREATE VIEW view AS SELECT ...
+```
+
+и написали запрос:
+
+```sql
+SELECT a, b, c FROM view
+```
+
+Этот запрос полностью эквивалентен использованию подзапроса:
+
+```sql
+SELECT a, b, c FROM (SELECT ...)
+```
+
+Материализованные (MATERIALIZED) представления хранят данные, преобразованные соответствующим запросом SELECT.
+
+При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
+
+Материализованное представление устроено следующим образом: при вставке данных в таблицу, указанную в SELECT-е, кусок вставляемых данных преобразуется этим запросом SELECT, и полученный результат вставляется в представление.
+
+Если указано POPULATE, то при создании представления, в него будут вставлены имеющиеся данные таблицы, как если бы был сделан запрос `CREATE TABLE ... AS SELECT ...` . Иначе, представление будет содержать только данные, вставляемые в таблицу после создания представления. Не рекомендуется использовать POPULATE, так как вставляемые в таблицу данные во время создания представления, не попадут в него.
+
+Запрос `SELECT` может содержать `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`... Следует иметь ввиду, что соответствующие преобразования будут выполняться независимо, на каждый блок вставляемых данных. Например, при наличии `GROUP BY`, данные будут агрегироваться при вставке, но только в рамках одной пачки вставляемых данных. Далее, данные не будут доагрегированы. Исключение - использование ENGINE, производящего агрегацию данных самостоятельно, например, `SummingMergeTree`.
+
+Недоработано выполнение запросов `ALTER` над материализованными представлениями, поэтому они могут быть неудобными для использования. Если материализованное представление использует конструкцию ``TO [db.]name``, то можно выполнить ``DETACH`` представления, ``ALTER`` для целевой таблицы и последующий ``ATTACH`` ранее отсоединенного (``DETACH``) представления.
+
+Представления выглядят так же, как обычные таблицы. Например, они перечисляются в результате запроса `SHOW TABLES`.
+
+Отсутствует отдельный запрос для удаления представлений. Чтобы удалить представление, следует использовать `DROP TABLE`.
+
diff --git a/docs/ru/dicts/external_dicts.md b/docs/ru/query_language/dicts/external_dicts.md
similarity index 93%
rename from docs/ru/dicts/external_dicts.md
rename to docs/ru/query_language/dicts/external_dicts.md
index 0b7b9566ff9..9399e316248 100644
--- a/docs/ru/dicts/external_dicts.md
+++ b/docs/ru/query_language/dicts/external_dicts.md
@@ -9,9 +9,9 @@ ClickHouse:
- Полностью или частично хранит словари в оперативной памяти.
- Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически.
-Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре [dictionaries_config](../operations/server_settings/settings.md#server_settings-dictionaries_config).
+Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре [dictionaries_config](../../operations/server_settings/settings.md#server_settings-dictionaries_config).
-Словари могут загружаться при старте сервера или при первом использовании, в зависимости от настройки [dictionaries_lazy_load](../operations/server_settings/settings.md#server_settings-dictionaries_lazy_load).
+Словари могут загружаться при старте сервера или при первом использовании, в зависимости от настройки [dictionaries_lazy_load](../../operations/server_settings/settings.md#server_settings-dictionaries_lazy_load).
Конфигурационный файл словарей имеет вид:
diff --git a/docs/ru/dicts/external_dicts_dict.md b/docs/ru/query_language/dicts/external_dicts_dict.md
similarity index 100%
rename from docs/ru/dicts/external_dicts_dict.md
rename to docs/ru/query_language/dicts/external_dicts_dict.md
diff --git a/docs/ru/dicts/external_dicts_dict_layout.md b/docs/ru/query_language/dicts/external_dicts_dict_layout.md
similarity index 100%
rename from docs/ru/dicts/external_dicts_dict_layout.md
rename to docs/ru/query_language/dicts/external_dicts_dict_layout.md
diff --git a/docs/ru/dicts/external_dicts_dict_lifetime.md b/docs/ru/query_language/dicts/external_dicts_dict_lifetime.md
similarity index 100%
rename from docs/ru/dicts/external_dicts_dict_lifetime.md
rename to docs/ru/query_language/dicts/external_dicts_dict_lifetime.md
diff --git a/docs/ru/dicts/external_dicts_dict_sources.md b/docs/ru/query_language/dicts/external_dicts_dict_sources.md
similarity index 96%
rename from docs/ru/dicts/external_dicts_dict_sources.md
rename to docs/ru/query_language/dicts/external_dicts_dict_sources.md
index 9faf164abe3..3e30cfba845 100644
--- a/docs/ru/dicts/external_dicts_dict_sources.md
+++ b/docs/ru/query_language/dicts/external_dicts_dict_sources.md
@@ -52,7 +52,7 @@
Поля настройки:
- `path` - Абсолютный путь к файлу.
-- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../formats/index.md#formats)".
+- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../../interfaces/formats.md#formats)".
@@ -74,7 +74,7 @@
Поля настройки:
- `command` - Абсолютный путь к исполняемому файлу или имя файла (если каталог программы прописан в `PATH`).
-- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../formats/index.md#formats)".
+- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../../interfaces/formats.md#formats)".
@@ -93,12 +93,12 @@
```
-Чтобы ClickHouse смог обратиться к HTTPS-ресурсу, необходимо [настроить openSSL](../operations/server_settings/settings.md#server_settings-openSSL) в конфигурации сервера.
+Чтобы ClickHouse смог обратиться к HTTPS-ресурсу, необходимо [настроить openSSL](../../operations/server_settings/settings.md#server_settings-openSSL) в конфигурации сервера.
Поля настройки:
- `url` - URL источника.
-- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../formats/index.md#formats)".
+- `format` - Формат файла. Поддерживаются все форматы, описанные в разделе "[Форматы](../../interfaces/formats.md#formats)".
@@ -355,7 +355,7 @@ MySQL можно подключить на локальном хосте чер
Поля настройки:
-- `host` - хост ClickHouse. Если host локальный, то запрос выполняется без сетевого взаимодействия. Чтобы повысить отказоустойчивость решения, можно создать таблицу типа [Distributed](../table_engines/distributed.md#table_engines-distributed) и прописать её в дальнейших настройках.
+- `host` - хост ClickHouse. Если host локальный, то запрос выполняется без сетевого взаимодействия. Чтобы повысить отказоустойчивость решения, можно создать таблицу типа [Distributed](../../operations/table_engines/distributed.md#table_engines-distributed) и прописать её в дальнейших настройках.
- `port` - порт сервера ClickHouse.
- `user` - имя пользователя ClickHouse.
- `password` - пароль пользователя ClickHouse.
diff --git a/docs/ru/dicts/external_dicts_dict_structure.md b/docs/ru/query_language/dicts/external_dicts_dict_structure.md
similarity index 100%
rename from docs/ru/dicts/external_dicts_dict_structure.md
rename to docs/ru/query_language/dicts/external_dicts_dict_structure.md
diff --git a/docs/ru/dicts/index.md b/docs/ru/query_language/dicts/index.md
similarity index 100%
rename from docs/ru/dicts/index.md
rename to docs/ru/query_language/dicts/index.md
diff --git a/docs/ru/dicts/internal_dicts.md b/docs/ru/query_language/dicts/internal_dicts.md
similarity index 100%
rename from docs/ru/dicts/internal_dicts.md
rename to docs/ru/query_language/dicts/internal_dicts.md
diff --git a/docs/ru/functions/arithmetic_functions.md b/docs/ru/query_language/functions/arithmetic_functions.md
similarity index 100%
rename from docs/ru/functions/arithmetic_functions.md
rename to docs/ru/query_language/functions/arithmetic_functions.md
diff --git a/docs/ru/functions/array_functions.md b/docs/ru/query_language/functions/array_functions.md
similarity index 98%
rename from docs/ru/functions/array_functions.md
rename to docs/ru/query_language/functions/array_functions.md
index 79818574fd7..9c9b244f2ce 100644
--- a/docs/ru/functions/array_functions.md
+++ b/docs/ru/query_language/functions/array_functions.md
@@ -232,7 +232,7 @@ arrayPushBack(array, single_value)
**Аргументы**
- `array` - Массив.
-- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../data_types/index.md#data_types)".
+- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../../data_types/index.md#data_types)".
**Пример**
@@ -256,7 +256,7 @@ arrayPushFront(array, single_value)
**Аргументы**
- `array` - Массив.
-- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../data_types/index.md#data_types)".
+- `single_value` - Одиночное значение. В массив с числам можно добавить только числа, в массив со строками только строки. При добавлении чисел ClickHouse автоматически приводит тип `single_value` к типу данных массива. Подробнее о типах данных в ClickHouse читайте в разделе "[Типы данных](../../data_types/index.md#data_types)".
**Пример**
diff --git a/docs/ru/functions/array_join.md b/docs/ru/query_language/functions/array_join.md
similarity index 100%
rename from docs/ru/functions/array_join.md
rename to docs/ru/query_language/functions/array_join.md
diff --git a/docs/ru/functions/bit_functions.md b/docs/ru/query_language/functions/bit_functions.md
similarity index 100%
rename from docs/ru/functions/bit_functions.md
rename to docs/ru/query_language/functions/bit_functions.md
diff --git a/docs/ru/functions/comparison_functions.md b/docs/ru/query_language/functions/comparison_functions.md
similarity index 100%
rename from docs/ru/functions/comparison_functions.md
rename to docs/ru/query_language/functions/comparison_functions.md
diff --git a/docs/ru/functions/conditional_functions.md b/docs/ru/query_language/functions/conditional_functions.md
similarity index 100%
rename from docs/ru/functions/conditional_functions.md
rename to docs/ru/query_language/functions/conditional_functions.md
diff --git a/docs/ru/functions/date_time_functions.md b/docs/ru/query_language/functions/date_time_functions.md
similarity index 100%
rename from docs/ru/functions/date_time_functions.md
rename to docs/ru/query_language/functions/date_time_functions.md
diff --git a/docs/ru/functions/encoding_functions.md b/docs/ru/query_language/functions/encoding_functions.md
similarity index 100%
rename from docs/ru/functions/encoding_functions.md
rename to docs/ru/query_language/functions/encoding_functions.md
diff --git a/docs/ru/functions/ext_dict_functions.md b/docs/ru/query_language/functions/ext_dict_functions.md
similarity index 100%
rename from docs/ru/functions/ext_dict_functions.md
rename to docs/ru/query_language/functions/ext_dict_functions.md
diff --git a/docs/ru/functions/geo.md b/docs/ru/query_language/functions/geo.md
similarity index 100%
rename from docs/ru/functions/geo.md
rename to docs/ru/query_language/functions/geo.md
diff --git a/docs/ru/functions/hash_functions.md b/docs/ru/query_language/functions/hash_functions.md
similarity index 100%
rename from docs/ru/functions/hash_functions.md
rename to docs/ru/query_language/functions/hash_functions.md
diff --git a/docs/ru/functions/higher_order_functions.md b/docs/ru/query_language/functions/higher_order_functions.md
similarity index 100%
rename from docs/ru/functions/higher_order_functions.md
rename to docs/ru/query_language/functions/higher_order_functions.md
diff --git a/docs/ru/functions/in_functions.md b/docs/ru/query_language/functions/in_functions.md
similarity index 100%
rename from docs/ru/functions/in_functions.md
rename to docs/ru/query_language/functions/in_functions.md
diff --git a/docs/ru/functions/index.md b/docs/ru/query_language/functions/index.md
similarity index 100%
rename from docs/ru/functions/index.md
rename to docs/ru/query_language/functions/index.md
diff --git a/docs/ru/functions/ip_address_functions.md b/docs/ru/query_language/functions/ip_address_functions.md
similarity index 100%
rename from docs/ru/functions/ip_address_functions.md
rename to docs/ru/query_language/functions/ip_address_functions.md
diff --git a/docs/ru/functions/json_functions.md b/docs/ru/query_language/functions/json_functions.md
similarity index 100%
rename from docs/ru/functions/json_functions.md
rename to docs/ru/query_language/functions/json_functions.md
diff --git a/docs/ru/functions/logical_functions.md b/docs/ru/query_language/functions/logical_functions.md
similarity index 100%
rename from docs/ru/functions/logical_functions.md
rename to docs/ru/query_language/functions/logical_functions.md
diff --git a/docs/ru/functions/math_functions.md b/docs/ru/query_language/functions/math_functions.md
similarity index 100%
rename from docs/ru/functions/math_functions.md
rename to docs/ru/query_language/functions/math_functions.md
diff --git a/docs/ru/functions/other_functions.md b/docs/ru/query_language/functions/other_functions.md
similarity index 100%
rename from docs/ru/functions/other_functions.md
rename to docs/ru/query_language/functions/other_functions.md
diff --git a/docs/ru/functions/random_functions.md b/docs/ru/query_language/functions/random_functions.md
similarity index 100%
rename from docs/ru/functions/random_functions.md
rename to docs/ru/query_language/functions/random_functions.md
diff --git a/docs/ru/functions/rounding_functions.md b/docs/ru/query_language/functions/rounding_functions.md
similarity index 100%
rename from docs/ru/functions/rounding_functions.md
rename to docs/ru/query_language/functions/rounding_functions.md
diff --git a/docs/ru/functions/splitting_merging_functions.md b/docs/ru/query_language/functions/splitting_merging_functions.md
similarity index 100%
rename from docs/ru/functions/splitting_merging_functions.md
rename to docs/ru/query_language/functions/splitting_merging_functions.md
diff --git a/docs/ru/functions/string_functions.md b/docs/ru/query_language/functions/string_functions.md
similarity index 100%
rename from docs/ru/functions/string_functions.md
rename to docs/ru/query_language/functions/string_functions.md
diff --git a/docs/ru/functions/string_replace_functions.md b/docs/ru/query_language/functions/string_replace_functions.md
similarity index 100%
rename from docs/ru/functions/string_replace_functions.md
rename to docs/ru/query_language/functions/string_replace_functions.md
diff --git a/docs/ru/functions/string_search_functions.md b/docs/ru/query_language/functions/string_search_functions.md
similarity index 100%
rename from docs/ru/functions/string_search_functions.md
rename to docs/ru/query_language/functions/string_search_functions.md
diff --git a/docs/ru/functions/type_conversion_functions.md b/docs/ru/query_language/functions/type_conversion_functions.md
similarity index 100%
rename from docs/ru/functions/type_conversion_functions.md
rename to docs/ru/query_language/functions/type_conversion_functions.md
diff --git a/docs/ru/functions/url_functions.md b/docs/ru/query_language/functions/url_functions.md
similarity index 100%
rename from docs/ru/functions/url_functions.md
rename to docs/ru/query_language/functions/url_functions.md
diff --git a/docs/ru/functions/ym_dict_functions.md b/docs/ru/query_language/functions/ym_dict_functions.md
similarity index 100%
rename from docs/ru/functions/ym_dict_functions.md
rename to docs/ru/query_language/functions/ym_dict_functions.md
diff --git a/docs/ru/query_language/index.md b/docs/ru/query_language/index.md
index 5ad3b775836..28482aa6120 100644
--- a/docs/ru/query_language/index.md
+++ b/docs/ru/query_language/index.md
@@ -1 +1,7 @@
-# Язык запросов
+# Диалект SQL
+
+* [SELECT](select.md#select)
+* [INSERT INTO](insert_into.md#queries-insert)
+* [CREATE](create.md#create-database)
+* [ALTER](alter.md#query_language_queries_alter)
+* [Прочие виды запросов](misc.md#miscellaneous-queries)
diff --git a/docs/ru/query_language/insert_into.md b/docs/ru/query_language/insert_into.md
new file mode 100644
index 00000000000..9d2e6280e3a
--- /dev/null
+++ b/docs/ru/query_language/insert_into.md
@@ -0,0 +1,67 @@
+
+
+## INSERT
+
+Добавление данных.
+
+Базовый формат запроса:
+
+```sql
+INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
+```
+
+В запросе можно указать список столбцов для вставки `[(c1, c2, c3)]`. В этом случае, в остальные столбцы записываются:
+
+- Значения, вычисляемые из `DEFAULT` выражений, указанных в определении таблицы.
+- Нули и пустые строки, если `DEFAULT` не определены.
+
+Если [strict_insert_defaults=1](../operations/settings/settings.md#settings-strict_insert_defaults), то столбцы, для которых не определены `DEFAULT`, необходимо перечислить в запросе.
+
+В INSERT можно передавать данные любого [формата](../interfaces/formats.md#formats), который поддерживает ClickHouse. Для этого формат необходимо указать в запросе в явном виде:
+
+```sql
+INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
+```
+
+Например, следующий формат запроса идентичен базовому варианту INSERT ... VALUES:
+
+```sql
+INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
+```
+
+ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это важно, если данные начинаются с пробелов).
+
+Пример:
+
+```sql
+INSERT INTO t FORMAT TabSeparated
+11 Hello, world!
+22 Qwerty
+```
+
+С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе "[Интерфейсы](../interfaces/index.md#interfaces)".
+
+### Вставка результатов `SELECT`
+
+```sql
+INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
+```
+
+Соответствие столбцов определяется их позицией в секции SELECT. При этом, их имена в выражении SELECT и в таблице для INSERT, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору CAST.
+
+Все форматы данных кроме Values не позволяют использовать в качестве значений выражения, такие как `now()`, `1 + 2` и подобные. Формат Values позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
+
+Не поддерживаются другие запросы на модификацию части данных: `UPDATE`, `DELETE`, `REPLACE`, `MERGE`, `UPSERT`, `INSERT UPDATE`.
+Вы можете удалять старые данные с помощью запроса `ALTER TABLE ... DROP PARTITION`.
+
+### Замечания о производительности
+
+`INSERT` сортирует входящие данные по первичному ключу и разбивает их на партиции по месяцам. Если вы вставляете данные за разные месяцы вперемешку, то это может значительно снизить производительность запроса `INSERT`. Чтобы избежать этого:
+
+- Добавляйте данные достаточно большими пачками. Например, по 100 000 строк.
+- Группируйте данные по месацам самостоятельно перед загрузкой в ClickHouse.
+
+Снижения производительности не будет, если:
+
+- Данные поступают в режиме реального времени.
+- Вы загружаете данные, которые как правило отсортированы по времени.
diff --git a/docs/ru/query_language/misc.md b/docs/ru/query_language/misc.md
new file mode 100644
index 00000000000..4027a5fba43
--- /dev/null
+++ b/docs/ru/query_language/misc.md
@@ -0,0 +1,213 @@
+
+
+
+
+## ATTACH
+Запрос полностью аналогичен запросу `CREATE`, но:
+
+- вместо слова `CREATE` используется слово `ATTACH`;
+- запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице в сервер.
+
+После выполнения `ATTACH`, сервер будет знать о существовании таблицы.
+
+Если таблица перед этим была отсоединена (`DETACH`), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры.
+
+```sql
+ATTACH TABLE [IF NOT EXISTS] [db.]name
+```
+
+Этот запрос используется при старте сервера. Сервер хранит метаданные таблиц в виде файлов с запросами `ATTACH`, которые он просто исполняет при запуске (за исключением системных таблиц, создание которых явно вписано в сервер).
+
+## DROP
+Запрос имеет два вида: `DROP DATABASE` и `DROP TABLE`.
+
+```sql
+DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
+```
+
+Удаляет все таблицы внутри базы данных db, а затем саму базу данных db.
+Если указано `IF EXISTS` - не выдавать ошибку, если база данных не существует.
+
+```sql
+DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
+```
+
+Удаляет таблицу.
+Если указано `IF EXISTS` - не выдавать ошибку, если таблица не существует или база данных не существует.
+
+## DETACH
+Удаляет из сервера информацию о таблице name. Сервер перестаёт знать о существовании таблицы.
+
+```sql
+DETACH TABLE [IF EXISTS] [db.]name
+```
+
+Но ни данные, ни метаданные таблицы не удаляются. При следующем запуске сервера, сервер прочитает метаданные и снова узнает о таблице.
+Также, "отцепленную" таблицу можно прицепить заново запросом `ATTACH` (за исключением системных таблиц, для которых метаданные не хранятся).
+
+Запроса `DETACH DATABASE` нет.
+
+## RENAME
+Переименовывает одну или несколько таблиц.
+
+```sql
+RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster]
+```
+
+Все таблицы переименовываются под глобальной блокировкой. Переименовывание таблицы является лёгкой операцией. Если вы указали после TO другую базу данных, то таблица будет перенесена в эту базу данных. При этом, директории с базами данных должны быть расположены в одной файловой системе (иначе возвращается ошибка).
+
+## SHOW DATABASES
+
+```sql
+SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]
+```
+
+Выводит список всех баз данных.
+Запрос полностью аналогичен запросу `SELECT name FROM system.databases [INTO OUTFILE filename] [FORMAT format]`.
+
+Смотрите также раздел "Форматы".
+
+## SHOW TABLES
+
+```sql
+SHOW [TEMPORARY] TABLES [FROM db] [LIKE 'pattern'] [INTO OUTFILE filename] [FORMAT format]
+```
+
+Выводит список таблиц
+
+- из текущей БД или из БД db, если указано FROM db;
+- всех, или имя которых соответствует шаблону pattern, если указано LIKE 'pattern';
+
+Запрос полностью аналогичен запросу: `SELECT name FROM system.tables WHERE database = 'db' [AND name LIKE 'pattern'] [INTO OUTFILE filename] [FORMAT format]`.
+
+Смотрите также раздел "Оператор LIKE".
+
+## SHOW PROCESSLIST
+
+```sql
+SHOW PROCESSLIST [INTO OUTFILE filename] [FORMAT format]
+```
+
+Выводит список запросов, выполняющихся в данный момент времени, кроме запросов `SHOW PROCESSLIST`.
+
+Выдаёт таблицу, содержащую столбцы:
+
+**user** - пользователь, под которым был задан запрос. Следует иметь ввиду, что при распределённой обработке запроса на удалённые серверы запросы отправляются под пользователем default. И SHOW PROCESSLIST показывает имя пользователя для конкретного запроса, а не для запроса, который данный запрос инициировал.
+
+**address** - имя хоста, с которого был отправлен запрос. При распределённой обработке запроса на удалённых серверах — это имя хоста-инициатора запроса. Чтобы проследить, откуда был задан распределённый запрос изначально, следует смотреть SHOW PROCESSLIST на сервере-инициаторе запроса.
+
+**elapsed** - время выполнения запроса, в секундах. Запросы выводятся упорядоченными по убыванию времени выполнения.
+
+**rows_read**, **bytes_read** - сколько было прочитано строк, байт несжатых данных при обработке запроса. При распределённой обработке запроса суммируются данные со всех удалённых серверов. Именно эти данные используются для ограничений и квот.
+
+**memory_usage** - текущее потребление оперативки в байтах. Смотрите настройку max_memory_usage.
+
+**query** - сам запрос. В запросах INSERT данные для вставки не выводятся.
+
+**query_id** - идентификатор запроса. Непустой, только если был явно задан пользователем. При распределённой обработке запроса идентификатор запроса не передаётся на удалённые серверы.
+
+Запрос полностью аналогичен запросу: `SELECT * FROM system.processes [INTO OUTFILE filename] [FORMAT format]`.
+
+Полезный совет (выполните в консоли):
+
+```bash
+watch -n1 "clickhouse-client --query='SHOW PROCESSLIST'"
+```
+
+## SHOW CREATE TABLE
+
+```sql
+SHOW CREATE [TEMPORARY] TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
+```
+
+Возвращает один столбец statement типа `String`, содержащий одно значение - запрос `CREATE`, с помощью которого создана указанная таблица.
+
+## DESCRIBE TABLE
+
+```sql
+DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
+```
+
+Возвращает два столбца: `name`, `type` типа `String`, в которых описаны имена и типы столбцов указанной таблицы.
+
+Вложенные структуры данных выводятся в "развёрнутом" виде. То есть, каждый столбец - по отдельности, с именем через точку.
+
+## EXISTS
+
+```sql
+EXISTS [TEMPORARY] TABLE [db.]name [INTO OUTFILE filename] [FORMAT format]
+```
+
+Возвращает один столбец типа `UInt8`, содержащий одно значение - `0`, если таблицы или БД не существует и `1`, если таблица в указанной БД существует.
+
+## USE
+
+```sql
+USE db
+```
+
+Позволяет установить текущую базу данных для сессии.
+Текущая база данных используется для поиска таблиц, если база данных не указана в запросе явно через точку перед именем таблицы.
+При использовании HTTP протокола, запрос не может быть выполнен, так как понятия сессии не существует.
+
+## SET
+
+```sql
+SET param = value
+```
+
+Позволяет установить настройку `param` в значение `value`. Также можно одним запросом установить все настройки из заданного профиля настроек - для этого, укажите в качестве имени настройки profile. Подробнее смотри раздел "Настройки".
+Настройка устанавливается на сессию, или на сервер (глобально), если указано `GLOBAL`.
+При установке глобальной настройки, настройка на все уже запущенные сессии, включая текущую сессию, не устанавливается, а будет использована только для новых сессий.
+
+При перезапуске сервера, теряются настройки, установленные с помощью `SET`.
+Установить настройки, которые переживут перезапуск сервера, можно только с помощью конфигурационного файла сервера.
+
+## OPTIMIZE
+
+```sql
+OPTIMIZE TABLE [db.]name [PARTITION partition] [FINAL]
+```
+
+Просит движок таблицы сделать что-нибудь, что может привести к более оптимальной работе.
+Поддерживается только движками `*MergeTree`, в котором выполнение этого запроса инициирует внеочередное слияние кусков данных.
+Если указан `PARTITION`, то оптимизация будет производиться только для указаной партиции.
+Если указан `FINAL`, то оптимизация будет производиться даже когда все данные уже лежат в одном куске.
+
+
+Запрос OPTIMIZE не может устранить причину появления ошибки "Too many parts".
+
+
+## KILL QUERY
+
+```sql
+KILL QUERY
+ WHERE
+ [SYNC|ASYNC|TEST]
+ [FORMAT format]
+```
+
+Пытается принудительно остановить исполняющиеся в данный момент запросы.
+Запросы для принудительной остановки выбираются из таблицы system.processes с помощью условия, указанного в секции `WHERE` запроса `KILL`.
+
+Примеры:
+```sql
+-- Принудительно останавливает все запросы с указанным query_id:
+KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'
+
+-- Синхронно останавливает все запросы пользователя 'username':
+KILL QUERY WHERE user='username' SYNC
+```
+
+Readonly-пользователи могут останавливать только свои запросы.
+
+По-умолчанию используется асинхронный вариант запроса (`ASYNC`), который не дожидается подтверждения остановки запросов.
+
+Синхронный вариант (`SYNC`) ожидает остановки всех запросов и построчно выводит информацию о процессах по ходу их остановки.
+Ответ содержит колонку `kill_status`, которая может принимать следующие значения:
+
+1. 'finished' - запрос был успешно остановлен;
+2. 'waiting' - запросу отправлен сигнал завершения, ожидается его остановка;
+3. остальные значения описывают причину невозможности остановки запроса.
+
+Тестовый вариант запроса (`TEST`) только проверяет права пользователя и выводит список запросов для остановки.
diff --git a/docs/ru/operators/index.md b/docs/ru/query_language/operators.md
similarity index 100%
rename from docs/ru/operators/index.md
rename to docs/ru/query_language/operators.md
diff --git a/docs/ru/query_language/queries.md b/docs/ru/query_language/select.md
similarity index 52%
rename from docs/ru/query_language/queries.md
rename to docs/ru/query_language/select.md
index cda54356f49..8f006ef4965 100644
--- a/docs/ru/query_language/queries.md
+++ b/docs/ru/query_language/select.md
@@ -1,676 +1,6 @@
-
+# SELECT запросы
-# Запросы
-
-## CREATE DATABASE
-Создание базы данных db_name
-
-```sql
-CREATE DATABASE [IF NOT EXISTS] db_name
-```
-
-`База данных` - это просто директория для таблиц.
-Если написано `IF NOT EXISTS`, то запрос не будет возвращать ошибку, если база данных уже существует.
-
-
-
-
-## CREATE TABLE
-Запрос `CREATE TABLE` может иметь несколько форм.
-
-```sql
-CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
-(
- name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
- name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
- ...
-) ENGINE = engine
-```
-
-Создаёт таблицу с именем name в БД db или текущей БД, если db не указана, со структурой, указанной в скобках, и движком engine.
-Структура таблицы представляет список описаний столбцов. Индексы, если поддерживаются движком, указываются в качестве параметров для движка таблицы.
-
-Описание столбца, это `name type`, в простейшем случае. Пример: `RegionID UInt32`.
-Также могут быть указаны выражения для значений по умолчанию - смотрите ниже.
-
-```sql
-CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name AS [db2.]name2 [ENGINE = engine]
-```
-
-Создаёт таблицу с такой же структурой, как другая таблица. Можно указать другой движок для таблицы. Если движок не указан, то будет выбран такой же движок, как у таблицы `db2.name2`.
-
-```sql
-CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name ENGINE = engine AS SELECT ...
-```
-
-Создаёт таблицу со структурой, как результат запроса `SELECT`, с движком engine, и заполняет её данными из SELECT-а.
-
-Во всех случаях, если указано `IF NOT EXISTS`, то запрос не будет возвращать ошибку, если таблица уже существует. В этом случае, запрос будет ничего не делать.
-
-### Значения по умолчанию
-
-
-В описании столбца, может быть указано выражение для значения по умолчанию, одного из следующих видов:
-`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`.
-Пример: `URLDomain String DEFAULT domain(URL)`.
-
-Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также `0000-00-00` для дат и `0000-00-00 00:00:00` для дат с временем. NULL-ы не поддерживаются.
-
-В случае, если указано выражение по умолчанию, то указание типа столбца не обязательно. При отсутствии явно указанного типа, будет использован тип выражения по умолчанию. Пример: `EventDate DEFAULT toDate(EventTime)` - для столбца EventDate будет использован тип Date.
-
-При наличии явно указанного типа данных и выражения по умолчанию, это выражение будет приводиться к указанному типу с использованием функций приведения типа. Пример: `Hits UInt32 DEFAULT 0` - имеет такой же смысл, как `Hits UInt32 DEFAULT toUInt32(0)`.
-
-В качестве выражения для умолчания, может быть указано произвольное выражение от констант и столбцов таблицы. При создании и изменении структуры таблицы, проверяется, что выражения не содержат циклов. При INSERT-е проверяется разрешимость выражений - что все столбцы, из которых их можно вычислить, переданы.
-
-`DEFAULT expr`
-
-Обычное значение по умолчанию. Если в запросе INSERT не указан соответствующий столбец, то он будет заполнен путём вычисления соответствующего выражения.
-
-`MATERIALIZED expr`
-
-Материализованное выражение. Такой столбец не может быть указан при INSERT, то есть, он всегда вычисляется.
-При INSERT без указания списка столбцов, такие столбцы не рассматриваются.
-Также этот столбец не подставляется при использовании звёздочки в запросе SELECT - чтобы сохранить инвариант, что дамп, полученный путём `SELECT *`, можно вставить обратно в таблицу INSERT-ом без указания списка столбцов.
-
-`ALIAS expr`
-
-Синоним. Такой столбец вообще не хранится в таблице.
-Его значения не могут быть вставлены в таблицу, он не подставляется при использовании звёздочки в запросе SELECT.
-Он может быть использован в SELECT-ах - в таком случае, во время разбора запроса, алиас раскрывается.
-
-При добавлении новых столбцов с помощью запроса ALTER, старые данные для этих столбцов не записываются. Вместо этого, при чтении старых данных, для которых отсутствуют значения новых столбцов, выполняется вычисление выражений по умолчанию на лету. При этом, если выполнение выражения требует использования других столбцов, не указанных в запросе, то эти столбцы будут дополнительно прочитаны, но только для тех блоков данных, для которых это необходимо.
-
-Если добавить в таблицу новый столбец, а через некоторое время изменить его выражение по умолчанию, то используемые значения для старых данных (для данных, где значения не хранились на диске) поменяются. Также заметим, что при выполнении фоновых слияний, данные для столбцов, отсутствующих в одном из сливаемых кусков, записываются в объединённый кусок.
-
-Отсутствует возможность задать значения по умолчанию для элементов вложенных структур данных.
-
-### Временные таблицы
-
-Во всех случаях, если указано `TEMPORARY`, то будет создана временная таблица. Временные таблицы обладают следующими особенностями:
-- временные таблицы исчезают после завершения сессии; в том числе, при обрыве соединения;
-- временная таблица создаётся с движком Memory; все остальные движки таблиц не поддерживаются;
-- для временной таблицы нет возможности указать БД: она создаётся вне баз данных;
-- если временная таблица имеет то же имя, что и некоторая другая, то, при упоминании в запросе без указания БД, будет использована временная таблица;
-- при распределённой обработке запроса, используемые в запросе временные таблицы, передаются на удалённые серверы.
-
-В большинстве случаев, временные таблицы создаются не вручную, а при использовании внешних данных для запроса, или при распределённом `(GLOBAL) IN`. Подробнее см. соответствующие разделы
-
-Распределенные DDL запросы (секция ON CLUSTER)
-----------------------------------------------
-
-Запросы `CREATE`, `DROP`, `ALTER`, `RENAME` поддерживают возможность распределенного выполнения на кластере.
-Например, следующий запрос создает `Distributed`-таблицу `all_hits` на каждом хосте кластера `cluster`:
-
-```sql
-CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)
-```
-
-Для корректного выполнения таких запросов необходимо на каждом хосте иметь одинаковое определение кластера (для упрощения синхронизации конфигов можете использовать подстановки из ZooKeeper), также необходимо подключение к ZooKeeper серверам.
-Локальная версия запроса в конечном итоге будет выполнена на каждом хосте кластера, даже если некоторые хосты в данный момент не доступны, гарантируется упорядоченность выполнения запросов в рамках одного хоста.
-Пока не поддерживаются `ALTER`-запросы для реплицированных таблиц.
-
-## CREATE VIEW
-
-```sql
-CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...
-```
-
-Создаёт представление. Представления бывают двух видов - обычные и материализованные (MATERIALIZED).
-
-При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
-
-Материализованное представление работает следующим образом: при вставлении данных в таблицу, указанную в SELECT, часть вставленных данных конвертируется запросом, а результат вставляется в представление.
-
-Обычные представления не хранят никаких данных, а всего лишь производят чтение из другой таблицы. То есть, обычное представление - не более чем сохранённый запрос. При чтении из представления, этот сохранённый запрос, используется в качестве подзапроса в секции FROM.
-
-Для примера, пусть вы создали представление:
-
-```sql
-CREATE VIEW view AS SELECT ...
-```
-
-и написали запрос:
-
-```sql
-SELECT a, b, c FROM view
-```
-
-Этот запрос полностью эквивалентен использованию подзапроса:
-
-```sql
-SELECT a, b, c FROM (SELECT ...)
-```
-
-Материализованные (MATERIALIZED) представления хранят данные, преобразованные соответствующим запросом SELECT.
-
-При создании материализованного представления, нужно обязательно указать ENGINE - движок таблицы для хранения данных.
-
-Материализованное представление устроено следующим образом: при вставке данных в таблицу, указанную в SELECT-е, кусок вставляемых данных преобразуется этим запросом SELECT, и полученный результат вставляется в представление.
-
-Если указано POPULATE, то при создании представления, в него будут вставлены имеющиеся данные таблицы, как если бы был сделан запрос `CREATE TABLE ... AS SELECT ...` . Иначе, представление будет содержать только данные, вставляемые в таблицу после создания представления. Не рекомендуется использовать POPULATE, так как вставляемые в таблицу данные во время создания представления, не попадут в него.
-
-Запрос `SELECT` может содержать `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`... Следует иметь ввиду, что соответствующие преобразования будут выполняться независимо, на каждый блок вставляемых данных. Например, при наличии `GROUP BY`, данные будут агрегироваться при вставке, но только в рамках одной пачки вставляемых данных. Далее, данные не будут доагрегированы. Исключение - использование ENGINE, производящего агрегацию данных самостоятельно, например, `SummingMergeTree`.
-
-Недоработано выполнение запросов `ALTER` над материализованными представлениями, поэтому они могут быть неудобными для использования. Если материализованное представление использует конструкцию ``TO [db.]name``, то можно выполнить ``DETACH`` представления, ``ALTER`` для целевой таблицы и последующий ``ATTACH`` ранее отсоединенного (``DETACH``) представления.
-
-Представления выглядят так же, как обычные таблицы. Например, они перечисляются в результате запроса `SHOW TABLES`.
-
-Отсутствует отдельный запрос для удаления представлений. Чтобы удалить представление, следует использовать `DROP TABLE`.
-
-
-
-## ATTACH
-Запрос полностью аналогичен запросу `CREATE`, но:
-
-- вместо слова `CREATE` используется слово `ATTACH`;
-- запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице в сервер.
-
-После выполнения `ATTACH`, сервер будет знать о существовании таблицы.
-
-Если таблица перед этим была отсоединена (`DETACH`), т.е. её структура известна, то можно использовать сокращенную форму записи без определения структуры.
-
-```sql
-ATTACH TABLE [IF NOT EXISTS] [db.]name
-```
-
-Этот запрос используется при старте сервера. Сервер хранит метаданные таблиц в виде файлов с запросами `ATTACH`, которые он просто исполняет при запуске (за исключением системных таблиц, создание которых явно вписано в сервер).
-
-## DROP
-Запрос имеет два вида: `DROP DATABASE` и `DROP TABLE`.
-
-```sql
-DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
-```
-
-Удаляет все таблицы внутри базы данных db, а затем саму базу данных db.
-Если указано `IF EXISTS` - не выдавать ошибку, если база данных не существует.
-
-```sql
-DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
-```
-
-Удаляет таблицу.
-Если указано `IF EXISTS` - не выдавать ошибку, если таблица не существует или база данных не существует.
-
-## DETACH
-Удаляет из сервера информацию о таблице name. Сервер перестаёт знать о существовании таблицы.
-
-```sql
-DETACH TABLE [IF EXISTS] [db.]name
-```
-
-Но ни данные, ни метаданные таблицы не удаляются. При следующем запуске сервера, сервер прочитает метаданные и снова узнает о таблице.
-Также, "отцепленную" таблицу можно прицепить заново запросом `ATTACH` (за исключением системных таблиц, для которых метаданные не хранятся).
-
-Запроса `DETACH DATABASE` нет.
-
-## RENAME
-Переименовывает одну или несколько таблиц.
-
-```sql
-RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster]
-```
-
-Все таблицы переименовываются под глобальной блокировкой. Переименовывание таблицы является лёгкой операцией. Если вы указали после TO другую базу данных, то таблица будет перенесена в эту базу данных. При этом, директории с базами данных должны быть расположены в одной файловой системе (иначе возвращается ошибка).
-
-
-
-## ALTER
-Запрос `ALTER` поддерживается только для таблиц типа `*MergeTree`, а также `Merge` и `Distributed`. Запрос имеет несколько вариантов.
-
-### Манипуляции со столбцами
-
-Изменение структуры таблицы.
-
-```sql
-ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
-```
-
-В запросе указывается список из одного или более действий через запятую.
-Каждое действие - операция над столбцом.
-
-Существуют следующие действия:
-
-```sql
-ADD COLUMN name [type] [default_expr] [AFTER name_after]
-```
-
-Добавляет в таблицу новый столбец с именем name, типом type и выражением для умолчания `default_expr` (смотрите раздел "Значения по умолчанию"). Если указано `AFTER name_after` (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Иначе, столбец добавляется в конец таблицы. Внимательный читатель может заметить, что отсутствует возможность добавить столбец в начало таблицы. Для цепочки действий, name_after может быть именем столбца, который добавляется в одном из предыдущих действий.
-
-Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree).
-
-Такая схема позволяет добиться мгновенной работы запроса ALTER и отсутствия необходимости увеличивать объём старых данных.
-
-```sql
-DROP COLUMN name
-```
-
-Удаляет столбец с именем name.
-Удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно.
-
-```sql
-MODIFY COLUMN name [type] [default_expr]
-```
-
-Изменяет тип столбца name на type и/или выражение для умолчания на default_expr. При изменении типа, значения преобразуются так, как если бы к ним была применена функция toType.
-
-Если изменяется только выражение для умолчания, то запрос не делает никакой сложной работы и выполняется мгновенно.
-
-Изменение типа столбца - это единственное действие, которое выполняет сложную работу - меняет содержимое файлов с данными. Для больших таблиц, выполнение может занять длительное время.
-
-Выполнение производится в несколько стадий:
-- подготовка временных (новых) файлов с изменёнными данными;
-- переименование старых файлов;
-- переименование временных (новых) файлов в старые;
-- удаление старых файлов.
-
-Из них, длительной является только первая стадия. Если на этой стадии возникнет сбой, то данные не поменяются.
-Если на одной из следующих стадий возникнет сбой, то данные будет можно восстановить вручную. За исключением случаев, когда старые файлы удалены из файловой системы, а данные для новых файлов не доехали на диск и потеряны.
-
-Не поддерживается изменение типа столбца у массивов и вложенных структур данных.
-
-Запрос `ALTER` позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида `name.nested_name` и типом `Array(T)` - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки.
-
-Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение `ENGINE`). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с `DateTime` на `UInt32`).
-
-Если возможностей запроса `ALTER` не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса `INSERT SELECT`, затем поменять таблицы местами с помощью запроса `RENAME`, и удалить старую таблицу.
-
-Запрос `ALTER` блокирует все чтения и записи для таблицы. То есть, если на момент запроса `ALTER`, выполнялся долгий `SELECT`, то запрос `ALTER` сначала дождётся его выполнения. И в это время, все новые запросы к той же таблице, будут ждать, пока завершится этот `ALTER`.
-
-Для таблиц, которые не хранят данные самостоятельно (типа `Merge` и `Distributed`), `ALTER` всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа `Distributed`, вам также потребуется выполнить запрос `ALTER` для таблиц на всех удалённых серверах.
-
-Запрос `ALTER` на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы `ALTER` выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно.
-
-### Манипуляции с партициями и кусками
-
-Работает только для таблиц семейства `MergeTree`. Существуют следующие виды операций:
-
-- `DETACH PARTITION` - перенести партицию в директорию detached и забыть про неё.
-- `DROP PARTITION` - удалить партицию.
-- `ATTACH PART|PARTITION` - добавить в таблицу новый кусок или партицию из директории `detached`.
-- `FREEZE PARTITION` - создать бэкап партиции.
-- `FETCH PARTITION` - скачать партицию с другого сервера.
-
-Ниже будет рассмотрен каждый вид запроса по-отдельности.
-
-Партицией (partition) в таблице называются данные за один календарный месяц. Это определяется значениями ключа-даты, указанной в параметрах движка таблицы. Данные за каждый месяц хранятся отдельно, чтобы упростить всевозможные манипуляции с этими данными.
-
-Куском (part) в таблице называется часть данных одной партиции, отсортированная по первичному ключу.
-
-Чтобы посмотреть набор кусков и партиций таблицы, можно воспользоваться системной таблицей `system.parts`:
-
-```sql
-SELECT * FROM system.parts WHERE active
-```
-
-`active` - учитывать только активные куски. Неактивными являются, например, исходные куски оставшиеся после слияния в более крупный кусок - такие куски удаляются приблизительно через 10 минут после слияния.
-
-Другой способ посмотреть набор кусков и партиций - зайти в директорию с данными таблицы.
-Директория с данными - `/var/lib/clickhouse/data/database/table/`,
-где `/var/lib/clickhouse/` - путь к данным ClickHouse, database - имя базы данных, table - имя таблицы. Пример:
-
-```bash
-$ ls -l /var/lib/clickhouse/data/test/visits/
-total 48
-drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_2_2_0
-drwxrwxrwx 2 clickhouse clickhouse 20480 May 5 02:58 20140317_20140323_4_4_0
-drwxrwxrwx 2 clickhouse clickhouse 4096 May 5 02:55 detached
--rw-rw-rw- 1 clickhouse clickhouse 2 May 5 02:58 increment.txt
-```
-
-Здесь `20140317_20140323_2_2_0`, `20140317_20140323_4_4_0` - директории кусков.
-
-Рассмотрим по порядку имя первого куска: `20140317_20140323_2_2_0`.
-
-- `20140317` - минимальная дата данных куска
-- `20140323` - максимальная дата данных куска
-- `2` - минимальный номер блока данных
-- `2` - максимальный номер блока данных
-- `0` - уровень куска - глубина дерева слияний, которыми он образован
-
-Каждый кусок относится к одной партиции и содержит данные только за один месяц.
-`201403` - имя партиции. Партиция представляет собой набор кусков за один месяц.
-
-При работающем сервере, нельзя вручную изменять набор кусков или их данные на файловой системе, так как сервер не будет об этом знать.
-Для нереплицируемых таблиц, вы можете это делать при остановленном сервере, хотя это не рекомендуется.
-Для реплицируемых таблиц, набор кусков нельзя менять в любом случае.
-
-Директория `detached` содержит куски, не используемые сервером - отцепленные от таблицы с помощью запроса `ALTER ... DETACH`. Также в эту директорию переносятся куски, признанные повреждёнными, вместо их удаления. Вы можете в любое время добавлять, удалять, модифицировать данные в директории detached - сервер не будет об этом знать, пока вы не сделаете запрос `ALTER TABLE ... ATTACH`.
-
-```sql
-ALTER TABLE [db.]table DETACH PARTITION 'name'
-```
-
-Перенести все данные для партиции с именем name в директорию detached и забыть про них.
-Имя партиции указывается в формате YYYYMM. Оно может быть указано в одинарных кавычках или без них.
-
-После того, как запрос будет выполнен, вы можете самостоятельно сделать что угодно с данными в директории detached, например, удалить их из файловой системы, или ничего не делать.
-
-Запрос реплицируется - данные будут перенесены в директорию detached и забыты на всех репликах. Запрос может быть отправлен только на реплику-лидер. Вы можете узнать, является ли реплика лидером, сделав SELECT в системную таблицу system.replicas. Или, проще, вы можете выполнить запрос на всех репликах, и на всех кроме одной, он кинет исключение.
-
-```sql
-ALTER TABLE [db.]table DROP PARTITION 'name'
-```
-
-Аналогично операции `DETACH`. Удалить данные из таблицы. Куски с данными будут помечены как неактивные и будут полностью удалены примерно через 10 минут. Запрос реплицируется - данные будут удалены на всех репликах.
-
-```sql
-ALTER TABLE [db.]table ATTACH PARTITION|PART 'name'
-```
-
-Добавить данные в таблицу из директории detached.
-
-Существует возможность добавить данные для целой партиции (PARTITION) или отдельный кусок (PART). В случае PART, укажите полное имя куска в одинарных кавычках.
-
-Запрос реплицируется. Каждая реплика проверяет, если ли данные в директории detached. Если данные есть - проверяет их целостность, проверяет их соответствие данным на сервере-инициаторе запроса, и если всё хорошо, то добавляет их. Если нет, то скачивает данные с реплики-инициатора запроса, или с другой реплики, на которой уже добавлены эти данные.
-
-То есть, вы можете разместить данные в директории detached на одной реплике и, с помощью запроса ALTER ... ATTACH добавить их в таблицу на всех репликах.
-
-```sql
-ALTER TABLE [db.]table FREEZE PARTITION 'name'
-```
-
-Создаёт локальный бэкап одной или нескольких партиций. В качестве имени может быть указано полное имя партиции (например, 201403) или его префикс (например, 2014) - тогда бэкап будет создан для всех соответствующих партиций.
-
-Запрос делает следующее: для снэпшота данных на момент его выполнения, создаёт hardlink-и на данные таблиц в директории `/var/lib/clickhouse/shadow/N/...`
-
-`/var/lib/clickhouse/` - рабочая директория ClickHouse из конфига.
-`N` - инкрементальный номер бэкапа.
-
-Структура директорий внутри бэкапа создаётся такой же, как внутри `/var/lib/clickhouse/`.
-Также делает chmod всех файлов, запрещая запись в них.
-
-Создание бэкапа происходит почти мгновенно (но сначала дожидается окончания выполняющихся в данный момент запросов к соответствующей таблице). Бэкап изначально не занимает места на диске. При дальнейшей работе системы, бэкап может отнимать место на диске, по мере модификации данных. Если бэкап делается для достаточно старых данных, то он не будет отнимать место на диске.
-
-После создания бэкапа, данные из `/var/lib/clickhouse/shadow/` можно скопировать на удалённый сервер и затем удалить на локальном сервере.
-Весь процесс бэкапа не требует остановки сервера.
-
-Запрос `ALTER ... FREEZE PARTITION` не реплицируется. То есть, локальный бэкап создаётся только на локальном сервере.
-
-В качестве альтернативного варианта, вы можете скопировать данные из директории `/var/lib/clickhouse/data/database/table` вручную.
-Но если это делать при запущенном сервере, то возможны race conditions при копировании директории с добавляющимися/изменяющимися файлами, и бэкап может быть неконсистентным. Этот вариант может использоваться, если сервер не запущен - тогда полученные данные будут такими же, как после запроса `ALTER TABLE t FREEZE PARTITION`.
-
-`ALTER TABLE ... FREEZE PARTITION` копирует только данные, но не метаданные таблицы. Чтобы сделать бэкап метаданных таблицы, скопируйте файл `/var/lib/clickhouse/metadata/database/table.sql`
-
-Для восстановления из бэкапа:
-
-> - создайте таблицу, если её нет, с помощью запроса CREATE. Запрос можно взять из .sql файла (замените в нём `ATTACH` на `CREATE`);
-> - скопируйте данные из директории data/database/table/ внутри бэкапа в директорию `/var/lib/clickhouse/data/database/table/detached/`
-> - выполните запросы `ALTER TABLE ... ATTACH PARTITION YYYYMM`, где `YYYYMM` - месяц, для каждого месяца.
-
-Таким образом, данные из бэкапа будут добавлены в таблицу.
-Восстановление из бэкапа, так же, не требует остановки сервера.
-
-### Бэкапы и репликация
-
-Репликация защищает от аппаратных сбоев. В случае, если на одной из реплик у вас исчезли все данные, то восстановление делается по инструкции в разделе "Восстановление после сбоя".
-
-Для защиты от аппаратных сбоев, обязательно используйте репликацию. Подробнее про репликацию написано в разделе "Репликация данных".
-
-Бэкапы защищают от человеческих ошибок (случайно удалили данные, удалили не те данные или не на том кластере, испортили данные).
-Для баз данных большого объёма, бывает затруднительно копировать бэкапы на удалённые серверы. В этих случаях, для защиты от человеческой ошибки, можно держать бэкап на том же сервере (он будет лежать в `/var/lib/clickhouse/shadow/`).
-
-```sql
-ALTER TABLE [db.]table FETCH PARTITION 'name' FROM 'path-in-zookeeper'
-```
-
-Запрос работает только для реплицируемых таблиц.
-
-Скачивает указанную партицию с шарда, путь в `ZooKeeper` к которому указан в секции `FROM` и помещает в директорию `detached` указанной таблицы.
-
-Не смотря на то, что запрос называется `ALTER TABLE`, он не изменяет структуру таблицы, и не изменяет сразу доступные данные в таблице.
-
-Данные помещаются в директорию `detached`, и их можно прикрепить с помощью запроса `ALTER TABLE ... ATTACH`.
-
-В секции `FROM` указывается путь в `ZooKeeper`. Например, `/clickhouse/tables/01-01/visits`.
-Перед скачиванием проверяется существование партиции и совпадение структуры таблицы. Автоматически выбирается наиболее актуальная реплика среди живых реплик.
-
-Запрос `ALTER ... FETCH PARTITION` не реплицируется. То есть, партиция будет скачана в директорию detached только на локальном сервере. Заметим, что если вы после этого добавите данные в таблицу с помощью запроса `ALTER TABLE ... ATTACH`, то данные будут добавлены на всех репликах (на одной из реплик будут добавлены из директории detached, а на других - загружены с соседних реплик).
-
-### Синхронность запросов ALTER
-
-Для нереплицируемых таблиц, все запросы `ALTER` выполняются синхронно. Для реплицируемых таблиц, запрос всего лишь добавляет инструкцию по соответствующим действиям в `ZooKeeper`, а сами действия осуществляются при первой возможности. Но при этом, запрос может ждать завершения выполнения этих действий на всех репликах.
-
-Для запросов `ALTER ... ATTACH|DETACH|DROP` можно настроить ожидание, с помощью настройки `replication_alter_partitions_sync`.
-Возможные значения: `0` - не ждать, `1` - ждать выполнения только у себя (по умолчанию), `2` - ждать всех.
-
-
-
-### Мутации
-
-Мутации - разновидность запроса ALTER, позволяющая изменять или удалять данные в таблице. В отличие от стандартных запросов `DELETE` и `UPDATE`, рассчитанных на точечное изменение данных, область применения мутаций - достаточно тяжёлые изменения, затрагивающие много строк в таблице.
-
-Функциональность находится в состоянии beta и доступна начиная с версии 1.1.54388. Реализована поддержка *MergeTree таблиц (с репликацией и без).
-
-Конвертировать существующие таблицы для работы с мутациями не нужно. Но после применения первой мутации формат данных таблицы становится несовместимым с предыдущими версиями и откатиться на предыдущую версию уже не получится.
-
-На данный момент доступна команда `ALTER DELETE`:
-
-```sql
-ALTER TABLE [db.]table DELETE WHERE expr
-```
-
-Выражение `expr` должно иметь тип UInt8. Запрос удаляет строки таблицы, для которых это выражение принимает ненулевое значение.
-
-В одном запросе можно указать несколько команд через запятую.
-
-Для *MergeTree-таблиц мутации выполняются, перезаписывая данные по кускам (parts). При этом атомарности нет - куски заменяются на помутированные по мере выполнения и запрос `SELECT`, заданный во время выполнения мутации, увидит данные как из измененных кусков, так и из кусков, которые еще не были изменены.
-
-Мутации линейно упорядочены между собой и накладываются на каждый кусок в порядке добавления. Мутации также упорядочены со вставками - гарантируется, что данные, вставленные в таблицу до начала выполнения запроса мутации, будут изменены, а данные, вставленные после окончания запроса мутации, изменены не будут. При этом мутации никак не блокируют вставки.
-
-Запрос завершается немедленно после добавления информации о мутации (для реплицированных таблиц - в ZooKeeper, для нереплицированных - на файловую систему). Сама мутация выполняется асинхронно, используя настройки системного профиля. Следить за ходом её выполнения можно по таблице `system.mutations`. Добавленные мутации будут выполняться до конца даже в случае перезапуска серверов ClickHouse. Откатить мутацию после её добавления нельзя.
-
-#### Таблица system.mutations
-
-Таблица содержит информацию о ходе выполнения мутаций MergeTree-таблиц. Каждой команде мутации соответствует одна строка. В таблице есть следующие столбцы:
-
-**database**, **table** - имя БД и таблицы, к которой была применена мутация.
-
-**mutation_id** - ID запроса. Для реплицированных таблиц эти ID соответствуют именам записей в директории `/mutations/` в ZooKeeper, для нереплицированных - именам файлов в директории с данными таблицы.
-
-**command** - Команда мутации (часть запроса после `ALTER TABLE [db.]table`).
-
-**create_time** - Время создания мутации.
-
-**block_numbers.partition_id**, **block_numbers.number** - Nested-столбец. Для мутаций реплицированных таблиц для каждой партиции содержит номер блока, полученный этой мутацией (в каждой партиции будут изменены только куски, содержащие блоки с номерами, меньшими номера, полученного мутацией в этой партиции). Для нереплицированных таблиц нумерация блоков сквозная по партициям, поэтому столбец содержит одну запись с единственным номером блока, полученным мутацией.
-
-**parts_to_do** - Количество кусков таблицы, которые ещё предстоит изменить.
-
-**is_done** - Завершена ли мутация. Замечание: даже если `parts_to_do = 0`, для реплицированной таблицы возможна ситуация, когда мутация ещё не завершена из-за долго выполняющейся вставки, которая добавляет данные, которые нужно будет мутировать.
-
-## SHOW DATABASES
-
-```sql
-SHOW DATABASES [INTO OUTFILE filename] [FORMAT format]
-```
-
-Выводит список всех баз данных.
-Запрос полностью аналогичен запросу `SELECT name FROM system.databases [INTO OUTFILE filename] [FORMAT format]`.
-
-Смотрите также раздел "Форматы".
-
-## SHOW TABLES
-
-```sql
-SHOW [TEMPORARY] TABLES [FROM db] [LIKE 'pattern'] [INTO OUTFILE filename] [FORMAT format]
-```
-
-Выводит список таблиц
-
-- из текущей БД или из БД db, если указано FROM db;
-- всех, или имя которых соответствует шаблону pattern, если указано LIKE 'pattern';
-
-Запрос полностью аналогичен запросу: `SELECT name FROM system.tables WHERE database = 'db' [AND name LIKE 'pattern'] [INTO OUTFILE filename] [FORMAT format]`.
-
-Смотрите также раздел "Оператор LIKE".
-
-## SHOW PROCESSLIST
-
-```sql
-SHOW PROCESSLIST [INTO OUTFILE filename] [FORMAT format]
-```
-
-Выводит список запросов, выполняющихся в данный момент времени, кроме запросов `SHOW PROCESSLIST`.
-
-Выдаёт таблицу, содержащую столбцы:
-
-**user** - пользователь, под которым был задан запрос. Следует иметь ввиду, что при распределённой обработке запроса на удалённые серверы запросы отправляются под пользователем default. И SHOW PROCESSLIST показывает имя пользователя для конкретного запроса, а не для запроса, который данный запрос инициировал.
-
-**address** - имя хоста, с которого был отправлен запрос. При распределённой обработке запроса на удалённых серверах — это имя хоста-инициатора запроса. Чтобы проследить, откуда был задан распределённый запрос изначально, следует смотреть SHOW PROCESSLIST на сервере-инициаторе запроса.
-
-**elapsed** - время выполнения запроса, в секундах. Запросы выводятся упорядоченными по убыванию времени выполнения.
-
-**rows_read**, **bytes_read** - сколько было прочитано строк, байт несжатых данных при обработке запроса. При распределённой обработке запроса суммируются данные со всех удалённых серверов. Именно эти данные используются для ограничений и квот.
-
-**memory_usage** - текущее потребление оперативки в байтах. Смотрите настройку max_memory_usage.
-
-**query** - сам запрос. В запросах INSERT данные для вставки не выводятся.
-
-**query_id** - идентификатор запроса. Непустой, только если был явно задан пользователем. При распределённой обработке запроса идентификатор запроса не передаётся на удалённые серверы.
-
-Запрос полностью аналогичен запросу: `SELECT * FROM system.processes [INTO OUTFILE filename] [FORMAT format]`.
-
-Полезный совет (выполните в консоли):
-
-```bash
-watch -n1 "clickhouse-client --query='SHOW PROCESSLIST'"
-```
-
-## SHOW CREATE TABLE
-
-```sql
-SHOW CREATE [TEMPORARY] TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
-```
-
-Возвращает один столбец statement типа `String`, содержащий одно значение - запрос `CREATE`, с помощью которого создана указанная таблица.
-
-## DESCRIBE TABLE
-
-```sql
-DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
-```
-
-Возвращает два столбца: `name`, `type` типа `String`, в которых описаны имена и типы столбцов указанной таблицы.
-
-Вложенные структуры данных выводятся в "развёрнутом" виде. То есть, каждый столбец - по отдельности, с именем через точку.
-
-## EXISTS
-
-```sql
-EXISTS [TEMPORARY] TABLE [db.]name [INTO OUTFILE filename] [FORMAT format]
-```
-
-Возвращает один столбец типа `UInt8`, содержащий одно значение - `0`, если таблицы или БД не существует и `1`, если таблица в указанной БД существует.
-
-## USE
-
-```sql
-USE db
-```
-
-Позволяет установить текущую базу данных для сессии.
-Текущая база данных используется для поиска таблиц, если база данных не указана в запросе явно через точку перед именем таблицы.
-При использовании HTTP протокола, запрос не может быть выполнен, так как понятия сессии не существует.
-
-## SET
-
-```sql
-SET param = value
-```
-
-Позволяет установить настройку `param` в значение `value`. Также можно одним запросом установить все настройки из заданного профиля настроек - для этого, укажите в качестве имени настройки profile. Подробнее смотри раздел "Настройки".
-Настройка устанавливается на сессию, или на сервер (глобально), если указано `GLOBAL`.
-При установке глобальной настройки, настройка на все уже запущенные сессии, включая текущую сессию, не устанавливается, а будет использована только для новых сессий.
-
-При перезапуске сервера, теряются настройки, установленные с помощью `SET`.
-Установить настройки, которые переживут перезапуск сервера, можно только с помощью конфигурационного файла сервера.
-
-## OPTIMIZE
-
-```sql
-OPTIMIZE TABLE [db.]name [PARTITION partition] [FINAL]
-```
-
-Просит движок таблицы сделать что-нибудь, что может привести к более оптимальной работе.
-Поддерживается только движками `*MergeTree`, в котором выполнение этого запроса инициирует внеочередное слияние кусков данных.
-Если указан `PARTITION`, то оптимизация будет производиться только для указаной партиции.
-Если указан `FINAL`, то оптимизация будет производиться даже когда все данные уже лежат в одном куске.
-
-
-Запрос OPTIMIZE не может устранить причину появления ошибки "Too many parts".
-
-
-
-
-## INSERT
-
-Добавление данных.
-
-Базовый формат запроса:
-
-```sql
-INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
-```
-
-В запросе можно указать список столбцов для вставки `[(c1, c2, c3)]`. В этом случае, в остальные столбцы записываются:
-
-- Значения, вычисляемые из `DEFAULT` выражений, указанных в определении таблицы.
-- Нули и пустые строки, если `DEFAULT` не определены.
-
-Если [strict_insert_defaults=1](../operations/settings/settings.md#settings-strict_insert_defaults), то столбцы, для которых не определены `DEFAULT`, необходимо перечислить в запросе.
-
-В INSERT можно передавать данные любого [формата](../formats/index.md#formats), который поддерживает ClickHouse. Для этого формат необходимо указать в запросе в явном виде:
-
-```sql
-INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
-```
-
-Например, следующий формат запроса идентичен базовому варианту INSERT ... VALUES:
-
-```sql
-INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
-```
-
-ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это важно, если данные начинаются с пробелов).
-
-Пример:
-
-```sql
-INSERT INTO t FORMAT TabSeparated
-11 Hello, world!
-22 Qwerty
-```
-
-С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе "[Интерфейсы](../interfaces/index.md#interfaces)".
-
-### Вставка результатов `SELECT`
-
-```sql
-INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
-```
-
-Соответствие столбцов определяется их позицией в секции SELECT. При этом, их имена в выражении SELECT и в таблице для INSERT, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору CAST.
-
-Все форматы данных кроме Values не позволяют использовать в качестве значений выражения, такие как `now()`, `1 + 2` и подобные. Формат Values позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
-
-Не поддерживаются другие запросы на модификацию части данных: `UPDATE`, `DELETE`, `REPLACE`, `MERGE`, `UPSERT`, `INSERT UPDATE`.
-Вы можете удалять старые данные с помощью запроса `ALTER TABLE ... DROP PARTITION`.
-
-### Замечания о производительности
-
-`INSERT` сортирует входящие данные по первичному ключу и разбивает их на партиции по месяцам. Если вы вставляете данные за разные месяцы вперемешку, то это может значительно снизить производительность запроса `INSERT`. Чтобы избежать этого:
-
-- Добавляйте данные достаточно большими пачками. Например, по 100 000 строк.
-- Группируйте данные по месацам самостоятельно перед загрузкой в ClickHouse.
-
-Снижения производительности не будет, если:
-
-- Данные поступают в режиме реального времени.
-- Вы загружаете данные, которые как правило отсортированы по времени.
-
-## SELECT
-
-Выборка данных.
+`SELECT` осуществляет выборку данных.
```sql
SELECT [DISTINCT] expr_list
@@ -1520,37 +850,3 @@ SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID GLOBAL
- в подзапросах (так как из подзапросов выкидываются столбцы, не нужные для внешнего запроса).
В других случаях использование звёздочки является издевательством над системой, так как вместо преимуществ столбцовой СУБД вы получаете недостатки. То есть использовать звёздочку не рекомендуется.
-
-## KILL QUERY
-
-```sql
-KILL QUERY
- WHERE
- [SYNC|ASYNC|TEST]
- [FORMAT format]
-```
-
-Пытается принудительно остановить исполняющиеся в данный момент запросы.
-Запросы для принудительной остановки выбираются из таблицы system.processes с помощью условия, указанного в секции `WHERE` запроса `KILL`.
-
-Примеры:
-```sql
--- Принудительно останавливает все запросы с указанным query_id:
-KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'
-
--- Синхронно останавливает все запросы пользователя 'username':
-KILL QUERY WHERE user='username' SYNC
-```
-
-Readonly-пользователи могут останавливать только свои запросы.
-
-По-умолчанию используется асинхронный вариант запроса (`ASYNC`), который не дожидается подтверждения остановки запросов.
-
-Синхронный вариант (`SYNC`) ожидает остановки всех запросов и построчно выводит информацию о процессах по ходу их остановки.
-Ответ содержит колонку `kill_status`, которая может принимать следующие значения:
-
-1. 'finished' - запрос был успешно остановлен;
-2. 'waiting' - запросу отправлен сигнал завершения, ожидается его остановка;
-3. остальные значения описывают причину невозможности остановки запроса.
-
-Тестовый вариант запроса (`TEST`) только проверяет права пользователя и выводит список запросов для остановки.
diff --git a/docs/ru/query_language/syntax.md b/docs/ru/query_language/syntax.md
index 5b5e0fb5a7f..42b1987fc70 100644
--- a/docs/ru/query_language/syntax.md
+++ b/docs/ru/query_language/syntax.md
@@ -59,7 +59,7 @@ INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')
Поддерживаются только строковые литералы в одинарных кавычках. Символы внутри могут быть экранированы с помощью обратного слеша. Следующие escape-последовательности имеют соответствующее специальное значение: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\a`, `\v`, `\xHH`. Во всех остальных случаях, последовательности вида `\c`, где c - любой символ, преобразуется в c. Таким образом, могут быть использованы последовательности `\'` и `\\`. Значение будет иметь тип String.
-Минимальный набор символов, которых вам необходимо экранировать в строковых литералах: `'` and `\`.
+Минимальный набор символов, которых вам необходимо экранировать в строковых литералах: `'` и `\`.
### Составные литералы
diff --git a/docs/ru/table_functions/file.md b/docs/ru/query_language/table_functions/file.md
similarity index 82%
rename from docs/ru/table_functions/file.md
rename to docs/ru/query_language/table_functions/file.md
index 0c009133dc0..f3e35c7f8f0 100644
--- a/docs/ru/table_functions/file.md
+++ b/docs/ru/query_language/table_functions/file.md
@@ -4,9 +4,9 @@
`file(path, format, structure)` - возвращает таблицу со столбцами, указанными в structure, созданную из файла path типа format.
-path - относительный путь до файла от [user_files_path](../operations/server_settings/settings.md#user_files_path).
+path - относительный путь до файла от [user_files_path](../../operations/server_settings/settings.md#user_files_path).
-format - [формат](../formats/index.md#formats) файла.
+format - [формат](../../interfaces/formats.md#formats) файла.
structure - структура таблицы в форме 'UserID UInt64, URL String'. Определяет имена и типы столбцов.
diff --git a/docs/ru/table_functions/index.md b/docs/ru/query_language/table_functions/index.md
similarity index 100%
rename from docs/ru/table_functions/index.md
rename to docs/ru/query_language/table_functions/index.md
diff --git a/docs/ru/table_functions/merge.md b/docs/ru/query_language/table_functions/merge.md
similarity index 100%
rename from docs/ru/table_functions/merge.md
rename to docs/ru/query_language/table_functions/merge.md
diff --git a/docs/ru/table_functions/numbers.md b/docs/ru/query_language/table_functions/numbers.md
similarity index 100%
rename from docs/ru/table_functions/numbers.md
rename to docs/ru/query_language/table_functions/numbers.md
diff --git a/docs/ru/table_functions/remote.md b/docs/ru/query_language/table_functions/remote.md
similarity index 97%
rename from docs/ru/table_functions/remote.md
rename to docs/ru/query_language/table_functions/remote.md
index ea62b52a0a9..71bf70ba8d8 100644
--- a/docs/ru/table_functions/remote.md
+++ b/docs/ru/query_language/table_functions/remote.md
@@ -52,7 +52,7 @@ example01-{01..02}-1
При наличии нескольких пар фигурных скобок, генерируется прямое произведение соответствующих множеств.
-Адреса или их фрагменты в фигурных скобках можно указать через символ |. В этом случае, соответствующие множества адресов понимаются как реплики - запрос будет отправлен на первую живую реплику. При этом, реплики перебираются в порядке, согласно текущей настройке [load_balancing](../operations/settings/settings.md#settings-load_balancing).
+Адреса или их фрагменты в фигурных скобках можно указать через символ |. В этом случае, соответствующие множества адресов понимаются как реплики - запрос будет отправлен на первую живую реплику. При этом, реплики перебираются в порядке, согласно текущей настройке [load_balancing](../../operations/settings/settings.md#settings-load_balancing).
Пример:
diff --git a/docs/ru/system_tables/index.md b/docs/ru/system_tables/index.md
deleted file mode 100644
index e45ba75b7a4..00000000000
--- a/docs/ru/system_tables/index.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Системные таблицы
-
-Системные таблицы используются для реализации части функциональности системы, а также предоставляют доступ к информации о работе системы.
-Вы не можете удалить системную таблицу (хотя можете сделать DETACH).
-Для системных таблиц нет файлов с данными на диске и файлов с метаданными. Сервер создаёт все системные таблицы при старте.
-В системные таблицы нельзя записывать данные - можно только читать.
-Системные таблицы расположены в базе данных system.
diff --git a/docs/ru/system_tables/system.asynchronous_metrics.md b/docs/ru/system_tables/system.asynchronous_metrics.md
deleted file mode 100644
index b1e649ac16a..00000000000
--- a/docs/ru/system_tables/system.asynchronous_metrics.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-# system.asynchronous_metrics
-
-Содержат метрики, используемые для профилирования и мониторинга.
-Обычно отражают количество событий, происходящих в данный момент в системе, или ресурсов, суммарно потребляемых системой.
-Пример: количество запросов типа SELECT, исполняемых в текущий момент; количество потребляемой памяти.
-`system.asynchronous_metrics` и `system.metrics` отличаются набором и способом вычисления метрик.
diff --git a/docs/ru/system_tables/system.clusters.md b/docs/ru/system_tables/system.clusters.md
deleted file mode 100644
index 52116a127cb..00000000000
--- a/docs/ru/system_tables/system.clusters.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# system.clusters
-
-Содержит информацию о доступных в конфигурационном файле кластерах и серверах, которые в них входят.
-Столбцы:
-
-```text
-cluster String - имя кластера
-shard_num UInt32 - номер шарда в кластере, начиная с 1
-shard_weight UInt32 - относительный вес шарда при записи данных
-replica_num UInt32 - номер реплики в шарде, начиная с 1
-host_name String - имя хоста, как прописано в конфиге
-host_address String - IP-адрес хоста, полученный из DNS
-port UInt16 - порт, на который обращаться для соединения с сервером
-user String - имя пользователя, которого использовать для соединения с сервером
-```
diff --git a/docs/ru/system_tables/system.columns.md b/docs/ru/system_tables/system.columns.md
deleted file mode 100644
index c458f24d95f..00000000000
--- a/docs/ru/system_tables/system.columns.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# system.columns
-
-Содержит информацию о столбцах всех таблиц.
-С помощью этой таблицы можно получить информацию аналогично запросу `DESCRIBE TABLE`, но для многих таблиц сразу.
-
-```text
-database String - имя базы данных, в которой находится таблица
-table String - имя таблицы
-name String - имя столбца
-type String - тип столбца
-default_type String - тип (DEFAULT, MATERIALIZED, ALIAS) выражения для значения по умолчанию, или пустая строка, если оно не описано
-default_expression String - выражение для значения по умолчанию, или пустая строка, если оно не описано
-```
diff --git a/docs/ru/system_tables/system.databases.md b/docs/ru/system_tables/system.databases.md
deleted file mode 100644
index 10087837b5c..00000000000
--- a/docs/ru/system_tables/system.databases.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# system.databases
-
-Таблица содержит один столбец name типа String - имя базы данных.
-Для каждой базы данных, о которой знает сервер, будет присутствовать соответствующая запись в таблице.
-Эта системная таблица используется для реализации запроса `SHOW DATABASES`.
diff --git a/docs/ru/system_tables/system.dictionaries.md b/docs/ru/system_tables/system.dictionaries.md
deleted file mode 100644
index df588920bc1..00000000000
--- a/docs/ru/system_tables/system.dictionaries.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# system.dictionaries
-
-Содержит информацию о внешних словарях.
-
-Столбцы:
-
-- `name String` — Имя словаря.
-- `type String` — Тип словаря: Flat, Hashed, Cache.
-- `origin String` — Путь к конфигурационному файлу, в котором описан словарь.
-- `attribute.names Array(String)` — Массив имён атрибутов, предоставляемых словарём.
-- `attribute.types Array(String)` — Соответствующий массив типов атрибутов, предоставляемых словарём.
-- `has_hierarchy UInt8` — Является ли словарь иерархическим.
-- `bytes_allocated UInt64` — Количество оперативной памяти, которое использует словарь.
-- `hit_rate Float64` — Для cache-словарей - доля использований, для которых значение было в кэше.
-- `element_count UInt64` — Количество хранящихся в словаре элементов.
-- `load_factor Float64` — Доля заполненности словаря (для hashed словаря - доля заполнения хэш-таблицы).
-- `creation_time DateTime` — Время создания или последней успешной перезагрузки словаря.
-- `last_exception String` — Текст ошибки, возникшей при создании или перезагрузке словаря, если словарь не удалось создать.
-- `source String` - Текст, описывающий источник данных для словаря.
-
-
-Заметим, что количество оперативной памяти, которое использует словарь, не является пропорциональным количеству элементов, хранящихся в словаре. Так, для flat и cached словарей, все ячейки памяти выделяются заранее, независимо от реальной заполненности словаря.
diff --git a/docs/ru/system_tables/system.events.md b/docs/ru/system_tables/system.events.md
deleted file mode 100644
index 89ced73459c..00000000000
--- a/docs/ru/system_tables/system.events.md
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-# system.events
-
-Содержит информацию о количестве произошедших в системе событий, для профилирования и мониторинга.
-Пример: количество обработанных запросов типа SELECT.
-Столбцы: event String - имя события, value UInt64 - количество.
diff --git a/docs/ru/system_tables/system.functions.md b/docs/ru/system_tables/system.functions.md
deleted file mode 100644
index f4ec19d1dbf..00000000000
--- a/docs/ru/system_tables/system.functions.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# system.functions
-
-Содержит информацию об обычных и агрегатных функциях.
-
-Столбцы:
-
-- `name` (`String`) – Имя функции.
-- `is_aggregate` (`UInt8`) – Признак, является ли функция агрегатной.
diff --git a/docs/ru/system_tables/system.merges.md b/docs/ru/system_tables/system.merges.md
deleted file mode 100644
index c0b52a4675c..00000000000
--- a/docs/ru/system_tables/system.merges.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# system.merges
-
-Содержит информацию о производящихся прямо сейчас слияниях для таблиц семейства MergeTree.
-
-Столбцы:
-
-- `database String` — Имя базы данных, в которой находится таблица.
-- `table String` — Имя таблицы.
-- `elapsed Float64` — Время в секундах, прошедшее от начала выполнения слияния.
-- `progress Float64` — Доля выполненной работы от 0 до 1.
-- `num_parts UInt64` — Количество сливаемых кусков.
-- `result_part_name String` — Имя куска, который будет образован в результате слияния.
-- `total_size_bytes_compressed UInt64` — Суммарный размер сжатых данных сливаемых кусков.
-- `total_size_marks UInt64` — Суммарное количество засечек в сливаемых кусках.
-- `bytes_read_uncompressed UInt64` — Количество прочитанных байт, разжатых.
-- `rows_read UInt64` — Количество прочитанных строк.
-- `bytes_written_uncompressed UInt64` — Количество записанных байт, несжатых.
-- `rows_written UInt64` — Количество записанных строк.
diff --git a/docs/ru/system_tables/system.metrics.md b/docs/ru/system_tables/system.metrics.md
deleted file mode 100644
index 3fdc8b0daee..00000000000
--- a/docs/ru/system_tables/system.metrics.md
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-# system.metrics
diff --git a/docs/ru/system_tables/system.numbers.md b/docs/ru/system_tables/system.numbers.md
deleted file mode 100644
index 6a7ebc78cf5..00000000000
--- a/docs/ru/system_tables/system.numbers.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# system.numbers
-
-Таблица содержит один столбец с именем number типа UInt64, содержащим почти все натуральные числа, начиная с нуля.
-Эту таблицу можно использовать для тестов, а также если вам нужно сделать перебор.
-Чтения из этой таблицы не распараллеливаются.
diff --git a/docs/ru/system_tables/system.numbers_mt.md b/docs/ru/system_tables/system.numbers_mt.md
deleted file mode 100644
index 113abbf4a26..00000000000
--- a/docs/ru/system_tables/system.numbers_mt.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# system.numbers_mt
-
-То же самое, что и system.numbers, но чтение распараллеливается. Числа могут возвращаться в произвольном порядке.
-Используется для тестов.
diff --git a/docs/ru/system_tables/system.one.md b/docs/ru/system_tables/system.one.md
deleted file mode 100644
index b3666757e3a..00000000000
--- a/docs/ru/system_tables/system.one.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# system.one
-
-Таблица содержит одну строку с одним столбцом dummy типа UInt8, содержащим значение 0.
-Эта таблица используется, если в SELECT запросе не указана секция FROM.
-То есть, это - аналог таблицы DUAL, которую можно найти в других СУБД.
diff --git a/docs/ru/system_tables/system.parts.md b/docs/ru/system_tables/system.parts.md
deleted file mode 100644
index 8a5a0f34576..00000000000
--- a/docs/ru/system_tables/system.parts.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# system.parts
-
-Содержит информацию о кусках таблиц семейства [MergeTree](../table_engines/mergetree.md#table_engines-mergetree).
-
-Каждая строка описывает один кусок данных.
-
-Столбцы:
-
-- partition (String) - Имя партиции. Формат YYYYMM. Что такое партиция можно узнать из описания запроса [ALTER](../query_language/queries.md#query_language_queries_alter).
-- name (String) - Имя куска.
-- active (UInt8) - Признак активности. Если кусок активен, то он используется таблице, в противном случает он будет удален. Неактивные куски остаются после слияний.
-- marks (UInt64) - Количество засечек. Чтобы получить примерное количество строк в куске, умножьте ``marks`` на гранулированность индекса (обычно 8192).
-- marks_size (UInt64) - Размер файла с засечками.
-- rows (UInt64) - Количество строк.
-- bytes (UInt64) - Количество байт в сжатом виде.
-- modification_time (DateTime) - Время модификации директории с куском. Обычно соответствует времени создания куска.|
-- remove_time (DateTime) - Время, когда кусок стал неактивным.
-- refcount (UInt32) - Количество мест, в котором кусок используется. Значение больше 2 говорит о том, что кусок участвует в запросах или в слияниях.
-- min_date (Date) - Минимальное значение ключа даты в куске.
-- max_date (Date) - Максимальное значение ключа даты в куске.
-- min_block_number (UInt64) - Минимальный номер куска из которых состоит текущий после слияния.
-- max_block_number (UInt64) - Максимальный номер куска из которых состоит текущий после слияния.
-- level (UInt32) - Глубина дерева слияний. Если слияний не было, то ``level=0``.
-- primary_key_bytes_in_memory (UInt64) - Объем памяти (в байтах), занимаемой значениями первичных ключей.
-- primary_key_bytes_in_memory_allocated (UInt64) - Выделенный с резервом объем памяти (в байтах) для размещения первичных ключей.
-- database (String) - Имя базы данных.
-- table (String) - Имя таблицы.
-- engine (String) - Имя движка таблицы, без параметров.
diff --git a/docs/ru/system_tables/system.processes.md b/docs/ru/system_tables/system.processes.md
deleted file mode 100644
index 82264c0b794..00000000000
--- a/docs/ru/system_tables/system.processes.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# system.processes
-
-Эта системная таблица используется для реализации запроса `SHOW PROCESSLIST`.
-Столбцы:
-
-```text
-user String - имя пользователя, который задал запрос. При распределённой обработке запроса, относится к пользователю, с помощью которого сервер-инициатор запроса отправил запрос на данный сервер, а не к имени пользователя, который задал распределённый запрос на сервер-инициатор запроса.
-
-address String - IP-адрес, с которого задан запрос. При распределённой обработке запроса, аналогично.
-
-elapsed Float64 - время в секундах, прошедшее от начала выполнения запроса.
-
-rows_read UInt64 - количество прочитанных из таблиц строк. При распределённой обработке запроса, на сервере-инициаторе запроса, представляет собой сумму по всем удалённым серверам.
-
-bytes_read UInt64 - количество прочитанных из таблиц байт, в несжатом виде. При распределённой обработке запроса, на сервере-инициаторе запроса, представляет собой сумму по всем удалённым серверам.
-
-total_rows_approx UInt64 - приблизительная оценка общего количества строк, которые должны быть прочитаны. При распределённой обработке запроса, на сервере-инициаторе запроса, представляет собой сумму по всем удалённым серверам. Может обновляться в процессе выполнения запроса, когда становятся известны новые источники для обработки.
-
-memory_usage UInt64 - потребление памяти запросом. Может не учитывать некоторые виды выделенной памяти.
-
-query String - текст запроса. В случае INSERT - без данных для INSERT-а.
-
-query_id String - идентификатор запроса, если был задан.
-```
diff --git a/docs/ru/system_tables/system.replicas.md b/docs/ru/system_tables/system.replicas.md
deleted file mode 100644
index 5647dd24edb..00000000000
--- a/docs/ru/system_tables/system.replicas.md
+++ /dev/null
@@ -1,124 +0,0 @@
-# system.replicas
-
-Содержит информацию и статус для реплицируемых таблиц, расположенных на локальном сервере.
-Эту таблицу можно использовать для мониторинга. Таблица содержит по строчке для каждой Replicated\*-таблицы.
-
-Пример:
-
-```sql
-SELECT *
-FROM system.replicas
-WHERE table = 'visits'
-FORMAT Vertical
-```
-
-```text
-Row 1:
-──────
-database: merge
-table: visits
-engine: ReplicatedCollapsingMergeTree
-is_leader: 1
-is_readonly: 0
-is_session_expired: 0
-future_parts: 1
-parts_to_check: 0
-zookeeper_path: /clickhouse/tables/01-06/visits
-replica_name: example01-06-1.yandex.ru
-replica_path: /clickhouse/tables/01-06/visits/replicas/example01-06-1.yandex.ru
-columns_version: 9
-queue_size: 1
-inserts_in_queue: 0
-merges_in_queue: 1
-log_max_index: 596273
-log_pointer: 596274
-total_replicas: 2
-active_replicas: 2
-```
-
-Столбцы:
-
-```text
-database: имя БД
-table: имя таблицы
-engine: имя движка таблицы
-
-is_leader: является ли реплика лидером
-
-В один момент времени, не более одной из реплик является лидером. Лидер отвечает за выбор фоновых слияний, которые следует произвести.
-Замечу, что запись можно осуществлять на любую реплику (доступную и имеющую сессию в ZK), независимо от лидерства.
-
-is_readonly: находится ли реплика в режиме "только для чтения"
-Этот режим включается, если в конфиге нет секции с ZK; если при переинициализации сессии в ZK произошла неизвестная ошибка; во время переинициализации сессии с ZK.
-
-is_session_expired: истекла ли сессия с ZK.
-В основном, то же самое, что и is_readonly.
-
-future_parts: количество кусков с данными, которые появятся в результате INSERT-ов или слияний, которых ещё предстоит сделать
-
-parts_to_check: количество кусков с данными в очереди на проверку
-Кусок помещается в очередь на проверку, если есть подозрение, что он может быть битым.
-
-zookeeper_path: путь к данным таблицы в ZK
-replica_name: имя реплики в ZK; разные реплики одной таблицы имеют разное имя
-replica_path: путь к данным реплики в ZK. То же самое, что конкатенация zookeeper_path/replicas/replica_path.
-
-columns_version: номер версии структуры таблицы
-Обозначает, сколько раз был сделан ALTER. Если на репликах разные версии, значит некоторые реплики сделали ещё не все ALTER-ы.
-
-queue_size: размер очереди действий, которых предстоит сделать
-К действиям относятся вставки блоков данных, слияния, и некоторые другие действия.
-Как правило, совпадает с future_parts.
-
-inserts_in_queue: количество вставок блоков данных, которых предстоит сделать
-Обычно вставки должны быстро реплицироваться. Если величина большая - значит что-то не так.
-
-merges_in_queue: количество слияний, которых предстоит сделать
-Бывают длинные слияния - то есть, это значение может быть больше нуля продолжительное время.
-
-Следующие 4 столбца имеют ненулевое значение только если активна сессия с ZK.
-
-log_max_index: максимальный номер записи в общем логе действий
-log_pointer: максимальный номер записи из общего лога действий, которую реплика скопировала в свою очередь для выполнения, плюс единица
-Если log_pointer сильно меньше log_max_index, значит что-то не так.
-
-total_replicas: общее число известных реплик этой таблицы
-active_replicas: число реплик этой таблицы, имеющих сессию в ZK; то есть, число работающих реплик
-```
-
-Если запрашивать все столбцы, то таблица может работать слегка медленно, так как на каждую строчку делается несколько чтений из ZK.
-Если не запрашивать последние 4 столбца (log_max_index, log_pointer, total_replicas, active_replicas), то таблица работает быстро.
-
-Например, так можно проверить, что всё хорошо:
-
-```sql
-SELECT
- database,
- table,
- is_leader,
- is_readonly,
- is_session_expired,
- future_parts,
- parts_to_check,
- columns_version,
- queue_size,
- inserts_in_queue,
- merges_in_queue,
- log_max_index,
- log_pointer,
- total_replicas,
- active_replicas
-FROM system.replicas
-WHERE
- is_readonly
- OR is_session_expired
- OR future_parts > 20
- OR parts_to_check > 10
- OR queue_size > 20
- OR inserts_in_queue > 10
- OR log_max_index - log_pointer > 10
- OR total_replicas < 2
- OR active_replicas < total_replicas
-```
-
-Если этот запрос ничего не возвращает - значит всё хорошо.
diff --git a/docs/ru/system_tables/system.settings.md b/docs/ru/system_tables/system.settings.md
deleted file mode 100644
index 6fd12cd39fd..00000000000
--- a/docs/ru/system_tables/system.settings.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# system.settings
-
-Содержит информацию о настройках, используемых в данный момент.
-То есть, используемых для выполнения запроса, с помощью которого вы читаете из таблицы system.settings.
-
-Столбцы:
-
-```text
-name String - имя настройки
-value String - значение настройки
-changed UInt8 - была ли настройка явно задана в конфиге или изменена явным образом
-```
-
-Пример:
-
-```sql
-SELECT *
-FROM system.settings
-WHERE changed
-```
-
-```text
-┌─name───────────────────┬─value───────┬─changed─┐
-│ max_threads │ 8 │ 1 │
-│ use_uncompressed_cache │ 0 │ 1 │
-│ load_balancing │ random │ 1 │
-│ max_memory_usage │ 10000000000 │ 1 │
-└────────────────────────┴─────────────┴─────────┘
-```
diff --git a/docs/ru/system_tables/system.tables.md b/docs/ru/system_tables/system.tables.md
deleted file mode 100644
index ff8f4405032..00000000000
--- a/docs/ru/system_tables/system.tables.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# system.tables
-
-Таблица содержит столбцы database, name, engine типа String.
-Также таблица содержит три виртуальных столбца: metadata_modification_time типа DateTime, create_table_query и engine_full типа String.
-Для каждой таблицы, о которой знает сервер, будет присутствовать соответствующая запись в таблице system.tables.
-Эта системная таблица используется для реализации запросов SHOW TABLES.
diff --git a/docs/ru/system_tables/system.zookeeper.md b/docs/ru/system_tables/system.zookeeper.md
deleted file mode 100644
index be4222d1a76..00000000000
--- a/docs/ru/system_tables/system.zookeeper.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# system.zookeeper
-
-Позволяет читать данные из ZooKeeper кластера, описанного в конфигурации.
-В запросе обязательно в секции WHERE должно присутствовать условие на равенство path - путь в ZooKeeper, для детей которого вы хотите получить данные.
-
-Запрос `SELECT * FROM system.zookeeper WHERE path = '/clickhouse'` выведет данные по всем детям узла `/clickhouse`.
-Чтобы вывести данные по всем узлам в корне, напишите path = '/'.
-Если узла, указанного в path не существует, то будет брошено исключение.
-
-Столбцы:
-
-- `name String` — Имя узла.
-- `path String` — Путь к узлу.
-- `value String` — Значение узла.
-- `dataLength Int32` — Размер значения.
-- `numChildren Int32` — Количество детей.
-- `czxid Int64` — Идентификатор транзакции, в которой узел был создан.
-- `mzxid Int64` — Идентификатор транзакции, в которой узел был последний раз изменён.
-- `pzxid Int64` — Идентификатор транзакции, последний раз удаливший или добавивший детей.
-- `ctime DateTime` — Время создания узла.
-- `mtime DateTime` — Время последней модификации узла.
-- `version Int32` — Версия узла - количество раз, когда узел был изменён.
-- `cversion Int32` — Количество добавлений или удалений детей.
-- `aversion Int32` — Количество изменений ACL.
-- `ephemeralOwner Int64` — Для эфемерных узлов - идентификатор сессии, которая владеет этим узлом.
-
-
-Пример:
-
-```sql
-SELECT *
-FROM system.zookeeper
-WHERE path = '/clickhouse/tables/01-08/visits/replicas'
-FORMAT Vertical
-```
-
-```text
-Row 1:
-──────
-name: example01-08-1.yandex.ru
-value:
-czxid: 932998691229
-mzxid: 932998691229
-ctime: 2015-03-27 16:49:51
-mtime: 2015-03-27 16:49:51
-version: 0
-cversion: 47
-aversion: 0
-ephemeralOwner: 0
-dataLength: 0
-numChildren: 7
-pzxid: 987021031383
-path: /clickhouse/tables/01-08/visits/replicas
-
-Row 2:
-──────
-name: example01-08-2.yandex.ru
-value:
-czxid: 933002738135
-mzxid: 933002738135
-ctime: 2015-03-27 16:57:01
-mtime: 2015-03-27 16:57:01
-version: 0
-cversion: 37
-aversion: 0
-ephemeralOwner: 0
-dataLength: 0
-numChildren: 7
-pzxid: 987021252247
-path: /clickhouse/tables/01-08/visits/replicas
-```
diff --git a/docs/ru/table_engines/materializedview.md b/docs/ru/table_engines/materializedview.md
deleted file mode 100644
index 4452855c802..00000000000
--- a/docs/ru/table_engines/materializedview.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# MaterializedView
-
-Используется для реализации материализованных представлений (подробнее см. запрос [CREATE TABLE](../query_language/queries.md#query_language-queries-create_table)). Для хранения данных, использует другой движок, который был указан при создании представления. При чтении из таблицы, просто использует этот движок.
diff --git a/docs/toc_en.yml b/docs/toc_en.yml
new file mode 100644
index 00000000000..74c3b59decb
--- /dev/null
+++ b/docs/toc_en.yml
@@ -0,0 +1,172 @@
+pages:
+- 'ClickHouse': 'index.md'
+
+- 'Introduction':
+ - 'hidden': 'introduction/index.md'
+ - 'Distinctive features of ClickHouse': 'introduction/distinctive_features.md'
+ - 'ClickHouse features that can be considered disadvantages': 'introduction/features_considered_disadvantages.md'
+ - 'The Yandex.Metrica task': 'introduction/ya_metrika_task.md'
+ - 'Everything you were afraid to ask': 'introduction/possible_silly_questions.md'
+ - 'Performance': 'introduction/performance.md'
+
+- 'Getting started':
+ - 'Deploying and running': 'getting_started/index.md'
+ - 'Example datasets':
+ - 'OnTime': 'getting_started/example_datasets/ontime.md'
+ - 'New York Taxi data': 'getting_started/example_datasets/nyc_taxi.md'
+ - 'AMPLab Big Data Benchmark': 'getting_started/example_datasets/amplab_benchmark.md'
+ - 'WikiStat': 'getting_started/example_datasets/wikistat.md'
+ - 'Terabyte click logs from Criteo': 'getting_started/example_datasets/criteo.md'
+ - 'Star Schema Benchmark': 'getting_started/example_datasets/star_schema.md'
+
+- 'Interfaces':
+ - 'Introduction': 'interfaces/index.md'
+ - 'Command-line client': 'interfaces/cli.md'
+ - 'HTTP interface': 'interfaces/http_interface.md'
+ - 'JDBC driver': 'interfaces/jdbc.md'
+ - 'Native interface (TCP)': 'interfaces/tcp.md'
+ - 'Libraries from third-party developers': 'interfaces/third-party_client_libraries.md'
+ - 'Visual interfaces from third-party developers': 'interfaces/third-party_gui.md'
+ - 'Input and output formats': 'interfaces/formats.md'
+
+- 'Data types':
+ - 'Introduction': 'data_types/index.md'
+ - 'UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64': 'data_types/int_uint.md'
+ - 'Float32, Float64': 'data_types/float.md'
+ - 'Boolean values': 'data_types/boolean.md'
+ - 'String': 'data_types/string.md'
+ - 'FixedString(N)': 'data_types/fixedstring.md'
+ - 'Date': 'data_types/date.md'
+ - 'DateTime': 'data_types/datetime.md'
+ - 'Enum': 'data_types/enum.md'
+ - 'Array(T)': 'data_types/array.md'
+ - 'AggregateFunction(name, types_of_arguments...)': 'data_types/nested_data_structures/aggregatefunction.md'
+ - 'Tuple(T1, T2, ...)': 'data_types/tuple.md'
+ - 'Nested data structures':
+ - 'hidden': 'data_types/nested_data_structures/index.md'
+ - 'Nested(Name1 Type1, Name2 Type2, ...)': 'data_types/nested_data_structures/nested.md'
+ - 'Special data types':
+ - 'hidden': 'data_types/special_data_types/index.md'
+ - 'Expression': 'data_types/special_data_types/expression.md'
+ - 'Set': 'data_types/special_data_types/set.md'
+
+- 'SQL dialect':
+ - 'hidden': 'query_language/index.md'
+ - 'SELECT': 'query_language/select.md'
+ - 'INSERT INTO': 'query_language/insert_into.md'
+ - 'CREATE': 'query_language/create.md'
+ - 'ALTER': 'query_language/alter.md'
+ - 'Other kinds of queries': 'query_language/misc.md'
+ - 'Functions':
+ - 'Introduction': 'query_language/functions/index.md'
+ - 'Arithmetic functions': 'query_language/functions/arithmetic_functions.md'
+ - 'Comparison functions': 'query_language/functions/comparison_functions.md'
+ - 'Logical functions': 'query_language/functions/logical_functions.md'
+ - 'Type conversion functions': 'query_language/functions/type_conversion_functions.md'
+ - 'Functions for working with dates and times': 'query_language/functions/date_time_functions.md'
+ - 'Functions for working with strings': 'query_language/functions/string_functions.md'
+ - 'Functions for searching strings': 'query_language/functions/string_search_functions.md'
+ - 'Functions for searching and replacing in strings': 'query_language/functions/string_replace_functions.md'
+ - 'Conditional functions': 'query_language/functions/conditional_functions.md'
+ - 'Mathematical functions': 'query_language/functions/math_functions.md'
+ - 'Rounding functions': 'query_language/functions/rounding_functions.md'
+ - 'Functions for working with arrays': 'query_language/functions/array_functions.md'
+ - 'Functions for splitting and merging strings and arrays': 'query_language/functions/splitting_merging_functions.md'
+ - 'Bit functions': 'query_language/functions/bit_functions.md'
+ - 'Hash functions': 'query_language/functions/hash_functions.md'
+ - 'Functions for generating pseudo-random numbers': 'query_language/functions/random_functions.md'
+ - 'Encoding functions': 'query_language/functions/encoding_functions.md'
+ - 'Functions for working with URLs': 'query_language/functions/url_functions.md'
+ - 'Functions for working with IP addresses': 'query_language/functions/ip_address_functions.md'
+ - 'Functions for working with JSON.': 'query_language/functions/json_functions.md'
+ - 'Higher-order functions': 'query_language/functions/higher_order_functions.md'
+ - 'Other functions': 'query_language/functions/other_functions.md'
+ - 'Functions for working with external dictionaries': 'query_language/functions/ext_dict_functions.md'
+ - 'Functions for working with Yandex.Metrica dictionaries': 'query_language/functions/ym_dict_functions.md'
+ - 'Functions for implementing the IN operator': 'query_language/functions/in_functions.md'
+ - 'arrayJoin function': 'query_language/functions/array_join.md'
+ - 'Aggregate functions':
+ - 'Introduction': 'query_language/agg_functions/index.md'
+ - 'Function reference': 'query_language/agg_functions/reference.md'
+ - 'Aggregate function combinators': 'query_language/agg_functions/combinators.md'
+ - 'Parametric aggregate functions': 'query_language/agg_functions/parametric_functions.md'
+ - 'Table functions':
+ - 'Introduction': 'query_language/table_functions/index.md'
+ - 'file': 'query_language/table_functions/file.md'
+ - 'merge': 'query_language/table_functions/merge.md'
+ - 'numbers': 'query_language/table_functions/numbers.md'
+ - 'remote': 'query_language/table_functions/remote.md'
+ - 'Dictionaries':
+ - 'Introduction': 'query_language/dicts/index.md'
+ - 'External dictionaries':
+ - 'General desription': 'query_language/dicts/external_dicts.md'
+ - 'Configuring an external dictionary': 'query_language/dicts/external_dicts_dict.md'
+ - 'Storing dictionaries in memory': 'query_language/dicts/external_dicts_dict_layout.md'
+ - 'Dictionary updates': 'query_language/dicts/external_dicts_dict_lifetime.md'
+ - 'Sources of external dictionaries': 'query_language/dicts/external_dicts_dict_sources.md'
+ - 'Dictionary key and fields': 'query_language/dicts/external_dicts_dict_structure.md'
+ - 'Internal dictionaries': 'query_language/dicts/internal_dicts.md'
+ - 'Operators': 'query_language/operators.md'
+ - 'General syntax': 'query_language/syntax.md'
+
+- 'Operations':
+ - 'Operations': 'operations/index.md'
+ - 'Table engines':
+ - 'Introduction': 'operations/table_engines/index.md'
+ - 'MergeTree family':
+ - 'MergeTree': 'operations/table_engines/mergetree.md'
+ - 'Data replication': 'operations/table_engines/replication.md'
+ - 'Custom partitioning key': 'operations/table_engines/custom_partitioning_key.md'
+ - 'ReplacingMergeTree': 'operations/table_engines/replacingmergetree.md'
+ - 'SummingMergeTree': 'operations/table_engines/summingmergetree.md'
+ - 'AggregatingMergeTree': 'operations/table_engines/aggregatingmergetree.md'
+ - 'CollapsingMergeTree': 'operations/table_engines/collapsingmergetree.md'
+ - 'GraphiteMergeTree': 'operations/table_engines/graphitemergetree.md'
+ - 'For small data':
+ - 'TinyLog': 'operations/table_engines/tinylog.md'
+ - 'Log': 'operations/table_engines/log.md'
+ - 'Memory': 'operations/table_engines/memory.md'
+ - 'Buffer': 'operations/table_engines/buffer.md'
+ - 'External data': 'operations/table_engines/external_data.md'
+ - 'Special':
+ - 'Distributed': 'operations/table_engines/distributed.md'
+ - 'Dictionary': 'operations/table_engines/dictionary.md'
+ - 'Merge': 'operations/table_engines/merge.md'
+ - 'File': 'operations/table_engines/file.md'
+ - 'Null': 'operations/table_engines/null.md'
+ - 'Set': 'operations/table_engines/set.md'
+ - 'Join': 'operations/table_engines/join.md'
+ - 'View': 'operations/table_engines/view.md'
+ - 'MaterializedView': 'operations/table_engines/materializedview.md'
+ - 'Integrations':
+ - 'Kafka': 'operations/table_engines/kafka.md'
+ - 'MySQL': 'operations/table_engines/mysql.md'
+ - 'Access rights': 'operations/access_rights.md'
+ - 'Configuration files': 'operations/configuration_files.md'
+ - 'Quotas': 'operations/quotas.md'
+ - 'System tables': 'operations/system_tables.md'
+ - 'Usage recommendations': 'operations/tips.md'
+ - 'Server configuration parameters':
+ - 'Introduction': 'operations/server_settings/index.md'
+ - 'Server settings': 'operations/server_settings/settings.md'
+ - 'Settings':
+ - 'Introduction': 'operations/settings/index.md'
+ - 'Restrictions on query complexity': 'operations/settings/query_complexity.md'
+ - 'Settings': 'operations/settings/settings.md'
+ - 'Settings profiles': 'operations/settings/settings_profiles.md'
+
+ - 'Utilities':
+ - 'Overview': 'operations/utils/index.md'
+ - 'clickhouse-copier': 'operations/utils/clickhouse-copier.md'
+ - 'clickhouse-local': 'operations/utils/clickhouse-local.md'
+
+- 'ClickHouse Development':
+ - 'hidden': 'development/index.md'
+ - 'Overview of ClickHouse architecture': 'development/architecture.md'
+ - 'How to build ClickHouse on Linux': 'development/build.md'
+ - 'How to build ClickHouse on Mac OS X': 'development/build_osx.md'
+ - 'How to write C++ code': 'development/style.md'
+ - 'How to run ClickHouse tests': 'development/tests.md'
+
+- 'Roadmap': 'roadmap.md'
+- 'Changelog': 'changelog.md'
diff --git a/docs/toc_ru.yml b/docs/toc_ru.yml
new file mode 100644
index 00000000000..3d1d9da1e01
--- /dev/null
+++ b/docs/toc_ru.yml
@@ -0,0 +1,174 @@
+pages:
+- 'ClickHouse': 'index.md'
+
+- 'Введение':
+ - 'hidden': 'introduction/index.md'
+ - 'Отличительные возможности ClickHouse': 'introduction/distinctive_features.md'
+ - 'Особенности ClickHouse, которые могут считаться недостатками': 'introduction/features_considered_disadvantages.md'
+ - 'Постановка задачи в Яндекс.Метрике': 'introduction/ya_metrika_task.md'
+ - 'Возможные глупые вопросы': 'introduction/possible_silly_questions.md'
+ - 'Производительность': 'introduction/performance.md'
+
+- 'Начало работы':
+ - 'Установка и запуск': 'getting_started/index.md'
+ - 'Тестовые наборы данных':
+ - 'OnTime': 'getting_started/example_datasets/ontime.md'
+ - 'Данные о такси в Нью-Йорке': 'getting_started/example_datasets/nyc_taxi.md'
+ - 'AMPLab Big Data Benchmark': 'getting_started/example_datasets/amplab_benchmark.md'
+ - 'WikiStat': 'getting_started/example_datasets/wikistat.md'
+ - 'Терабайт логов кликов от Criteo': 'getting_started/example_datasets/criteo.md'
+ - 'Схема «Звезда»': 'getting_started/example_datasets/star_schema.md'
+
+- 'Интерфейсы':
+ - 'Введение': 'interfaces/index.md'
+ - 'Клиент командной строки': 'interfaces/cli.md'
+ - 'HTTP-интерфейс': 'interfaces/http_interface.md'
+ - 'JDBC-драйвер': 'interfaces/jdbc.md'
+ - 'Родной интерфейс (TCP)': 'interfaces/tcp.md'
+ - 'Библиотеки от сторонних разработчиков': 'interfaces/third-party_client_libraries.md'
+ - 'Визуальные интерфейсы от сторонних разработчиков': 'interfaces/third-party_gui.md'
+ - 'Форматы входных и выходных данных': 'interfaces/formats.md'
+
+- 'Типы данных':
+ - 'Введение': 'data_types/index.md'
+ - 'UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64': 'data_types/int_uint.md'
+ - 'Float32, Float64': 'data_types/float.md'
+ - 'Булевы значения': 'data_types/boolean.md'
+ - 'String': 'data_types/string.md'
+ - 'FixedString(N)': 'data_types/fixedstring.md'
+ - 'Date': 'data_types/date.md'
+ - 'DateTime': 'data_types/datetime.md'
+ - 'Enum': 'data_types/enum.md'
+ - 'Array(T)': 'data_types/array.md'
+ - 'AggregateFunction(name, types_of_arguments...)': 'data_types/nested_data_structures/aggregatefunction.md'
+ - 'Tuple(T1, T2, ...)': 'data_types/tuple.md'
+ - 'Вложенные структуры данных':
+ - 'hidden': 'data_types/nested_data_structures/index.md'
+ - 'Nested(Name1 Type1, Name2 Type2, ...)': 'data_types/nested_data_structures/nested.md'
+ - 'Служебные типы данных':
+ - 'hidden': 'data_types/special_data_types/index.md'
+ - 'Expression': 'data_types/special_data_types/expression.md'
+ - 'Set': 'data_types/special_data_types/set.md'
+
+- 'SQL диалект':
+ - 'hidden': 'query_language/index.md'
+ - 'SELECT': 'query_language/select.md'
+ - 'INSERT INTO': 'query_language/insert_into.md'
+ - 'CREATE': 'query_language/create.md'
+ - 'ALTER': 'query_language/alter.md'
+ - 'Прочие виды запросов': 'query_language/misc.md'
+ - 'Функции':
+ - 'Введение': 'query_language/functions/index.md'
+ - 'Арифметические функции': 'query_language/functions/arithmetic_functions.md'
+ - 'Функции сравнения': 'query_language/functions/comparison_functions.md'
+ - 'Логические функции': 'query_language/functions/logical_functions.md'
+ - 'Функции преобразования типов': 'query_language/functions/type_conversion_functions.md'
+ - 'Функции для работы с датами и временем': 'query_language/functions/date_time_functions.md'
+ - 'Функции для работы со строками': 'query_language/functions/string_functions.md'
+ - 'Функции поиска в строках': 'query_language/functions/string_search_functions.md'
+ - 'Функции поиска и замены в строках': 'query_language/functions/string_replace_functions.md'
+ - 'Условные функции': 'query_language/functions/conditional_functions.md'
+ - 'Математические функции': 'query_language/functions/math_functions.md'
+ - 'Функции округления': 'query_language/functions/rounding_functions.md'
+ - 'Функции по работе с массивами': 'query_language/functions/array_functions.md'
+ - 'Функции разбиения и слияния строк и массивов': 'query_language/functions/splitting_merging_functions.md'
+ - 'Битовые функции': 'query_language/functions/bit_functions.md'
+ - 'Функции хэширования': 'query_language/functions/hash_functions.md'
+ - 'Функции генерации псевдослучайных чисел': 'query_language/functions/random_functions.md'
+ - 'Функции кодирования': 'query_language/functions/encoding_functions.md'
+ - 'Функции для работы с URL': 'query_language/functions/url_functions.md'
+ - 'Функции для работы с IP-адресами': 'query_language/functions/ip_address_functions.md'
+ - 'Функции для работы с JSON.': 'query_language/functions/json_functions.md'
+ - 'Функции высшего порядка': 'query_language/functions/higher_order_functions.md'
+ - 'Прочие функции': 'query_language/functions/other_functions.md'
+ - 'Функции для работы с внешними словарями': 'query_language/functions/ext_dict_functions.md'
+ - 'Функции для работы со словарями Яндекс.Метрики': 'query_language/functions/ym_dict_functions.md'
+ - 'Функции для реализации оператора IN.': 'query_language/functions/in_functions.md'
+ - 'Функция arrayJoin': 'query_language/functions/array_join.md'
+ - 'Функции для работы с географическими координатами': 'query_language/functions/geo.md'
+
+ - 'Агрегатные функции':
+ - 'Введение': 'query_language/agg_functions/index.md'
+ - 'Справочник функций': 'query_language/agg_functions/reference.md'
+ - 'Комбинаторы агрегатных функций': 'query_language/agg_functions/combinators.md'
+ - 'Параметрические агрегатные функции': 'query_language/agg_functions/parametric_functions.md'
+ - 'Табличные функции':
+ - 'Введение': 'query_language/table_functions/index.md'
+ - 'file': 'query_language/table_functions/file.md'
+ - 'merge': 'query_language/table_functions/merge.md'
+ - 'numbers': 'query_language/table_functions/numbers.md'
+ - 'remote': 'query_language/table_functions/remote.md'
+ - 'Словари':
+ - 'Введение': 'query_language/dicts/index.md'
+ - 'Внешние словари':
+ - 'Общее описание': 'query_language/dicts/external_dicts.md'
+ - 'Настройка внешнего словаря': 'query_language/dicts/external_dicts_dict.md'
+ - 'Хранение словарей в памяти': 'query_language/dicts/external_dicts_dict_layout.md'
+ - 'Обновление словарей': 'query_language/dicts/external_dicts_dict_lifetime.md'
+ - 'Источники внешних словарей': 'query_language/dicts/external_dicts_dict_sources.md'
+ - 'Ключ и поля словаря': 'query_language/dicts/external_dicts_dict_structure.md'
+ - 'Встроенные словари': 'query_language/dicts/internal_dicts.md'
+ - 'Операторы': 'query_language/operators.md'
+ - 'Общий синтаксис': 'query_language/syntax.md'
+
+
+- 'Эксплуатация':
+ - 'hidden': 'operations/index.md'
+ - 'Движки таблиц':
+ - 'Введение': 'operations/table_engines/index.md'
+ - 'Семейство MergeTree':
+ - 'MergeTree': 'operations/table_engines/mergetree.md'
+ - 'Репликация данных': 'operations/table_engines/replication.md'
+ - 'Произвольный ключ партиционирования': 'operations/table_engines/custom_partitioning_key.md'
+ - 'ReplacingMergeTree': 'operations/table_engines/replacingmergetree.md'
+ - 'SummingMergeTree': 'operations/table_engines/summingmergetree.md'
+ - 'AggregatingMergeTree': 'operations/table_engines/aggregatingmergetree.md'
+ - 'CollapsingMergeTree': 'operations/table_engines/collapsingmergetree.md'
+ - 'GraphiteMergeTree': 'operations/table_engines/graphitemergetree.md'
+ - 'Для небольших объемов данных':
+ - 'TinyLog': 'operations/table_engines/tinylog.md'
+ - 'Log': 'operations/table_engines/log.md'
+ - 'Memory': 'operations/table_engines/memory.md'
+ - 'Buffer': 'operations/table_engines/buffer.md'
+ - 'Внешние данные': 'operations/table_engines/external_data.md'
+ - 'Особые':
+ - 'Distributed': 'operations/table_engines/distributed.md'
+ - 'Dictionary': 'operations/table_engines/dictionary.md'
+ - 'Merge': 'operations/table_engines/merge.md'
+ - 'File': 'operations/table_engines/file.md'
+ - 'Null': 'operations/table_engines/null.md'
+ - 'Set': 'operations/table_engines/set.md'
+ - 'Join': 'operations/table_engines/join.md'
+ - 'View': 'operations/table_engines/view.md'
+ - 'MaterializedView': 'operations/table_engines/materializedview.md'
+ - 'Интеграции':
+ - 'Kafka': 'operations/table_engines/kafka.md'
+ - 'MySQL': 'operations/table_engines/mysql.md'
+ - 'Права доступа': 'operations/access_rights.md'
+ - 'Конфигурационные файлы': 'operations/configuration_files.md'
+ - 'Квоты': 'operations/quotas.md'
+ - 'Системные таблицы': 'operations/system_tables.md'
+ - 'Советы по эксплуатации': 'operations/tips.md'
+ - 'Конфигурационные параметры сервера':
+ - 'Введение': 'operations/server_settings/index.md'
+ - 'Серверные настройки': 'operations/server_settings/settings.md'
+ - 'Настройки':
+ - 'Введение': 'operations/settings/index.md'
+ - 'Ограничения на сложность запроса': 'operations/settings/query_complexity.md'
+ - 'Настройки': 'operations/settings/settings.md'
+ - 'Профили настроек': 'operations/settings/settings_profiles.md'
+ - 'Утилиты':
+ - 'Введение': 'operations/utils/index.md'
+ - 'clickhouse-copier': 'operations/utils/clickhouse-copier.md'
+ - 'clickhouse-local': 'operations/utils/clickhouse-local.md'
+
+- 'Разработка ClickHouse':
+ - 'hidden': 'development/index.md'
+ - 'Overview of ClickHouse architecture': 'development/architecture.md'
+ - 'Как собрать ClickHouse на Linux': 'development/build.md'
+ - 'Как собрать ClickHouse на Mac OS X': 'development/build_osx.md'
+ - 'Как писать код на C++': 'development/style.md'
+ - 'Как запустить тесты': 'development/tests.md'
+
+- 'Roadmap': 'roadmap.md'
+- 'Changelog': 'changelog.md'
diff --git a/docs/tools/build.py b/docs/tools/build.py
index 73ebe7aaa40..7e4ffe2c067 100755
--- a/docs/tools/build.py
+++ b/docs/tools/build.py
@@ -38,7 +38,7 @@ def autoremoved_file(path):
def build_for_lang(lang, args):
logging.info('Building %s docs' % lang)
- config_path = os.path.join(args.docs_dir, 'mkdocs_%s.yml' % lang)
+ config_path = os.path.join(args.docs_dir, 'toc_%s.yml' % lang)
try:
theme_cfg = {
diff --git a/docs/tools/concatenate.py b/docs/tools/concatenate.py
index 5a10c536ced..0afa66d7adf 100755
--- a/docs/tools/concatenate.py
+++ b/docs/tools/concatenate.py
@@ -19,7 +19,7 @@ import os
def concatenate(lang, docs_path, single_page_file):
- proj_config = os.path.join(docs_path, 'mkdocs_%s.yml' % lang)
+ proj_config = os.path.join(docs_path, 'toc_%s.yml' % lang)
lang_path = os.path.join(docs_path, lang)
with open(proj_config) as cfg_file:
diff --git a/docs/tools/mkdocs-material-theme/partials/nav-item.html b/docs/tools/mkdocs-material-theme/partials/nav-item.html
index c3e0b51ba54..b1794314f12 100644
--- a/docs/tools/mkdocs-material-theme/partials/nav-item.html
+++ b/docs/tools/mkdocs-material-theme/partials/nav-item.html
@@ -1,3 +1,4 @@
+{% if nav_item.title != "hidden" %}
{% set class = "md-nav__item" %}
{% if nav_item.active %}
{% set class = "md-nav__item md-nav__item--active" %}
@@ -52,3 +53,4 @@
{% endif %}
+{% endif %}
diff --git a/libs/libcommon/include/common/LocalDate.h b/libs/libcommon/include/common/LocalDate.h
index 9127ff20fee..a063d6e98a3 100644
--- a/libs/libcommon/include/common/LocalDate.h
+++ b/libs/libcommon/include/common/LocalDate.h
@@ -165,6 +165,9 @@ public:
}
};
+static_assert(sizeof(LocalDate) == 4);
+
+
inline std::ostream & operator<< (std::ostream & ostr, const LocalDate & date)
{
return ostr << date.year()
diff --git a/libs/libcommon/include/common/LocalDateTime.h b/libs/libcommon/include/common/LocalDateTime.h
index d0c208edadc..d19d862f2ca 100644
--- a/libs/libcommon/include/common/LocalDateTime.h
+++ b/libs/libcommon/include/common/LocalDateTime.h
@@ -14,8 +14,6 @@
*
* When local time was shifted backwards (due to daylight saving time or whatever reason)
* - then to resolve the ambiguity of transforming to time_t, lowest of two possible values is selected.
- *
- * packed - for memcmp to work naturally (but because m_year is 2 bytes, on little endian, comparison is correct only before year 2047)
*/
class LocalDateTime
{
@@ -27,6 +25,10 @@ private:
unsigned char m_minute;
unsigned char m_second;
+ /// For struct to fill 8 bytes and for safe invocation of memcmp.
+ /// NOTE We may use attribute packed instead, but it is less portable.
+ unsigned char pad = 0;
+
void init(time_t time)
{
if (unlikely(time > DATE_LUT_MAX || time == 0))
@@ -50,6 +52,8 @@ private:
m_hour = date_lut.toHour(time);
m_minute = date_lut.toMinute(time);
m_second = date_lut.toSecond(time);
+
+ (void)pad; /// Suppress unused private field warning.
}
void init(const char * s, size_t length)
@@ -64,6 +68,8 @@ private:
m_hour = (s[11] - '0') * 10 + (s[12] - '0');
m_minute = (s[14] - '0') * 10 + (s[15] - '0');
m_second = (s[17] - '0') * 10 + (s[18] - '0');
+
+ (void)pad;
}
public:
@@ -160,6 +166,9 @@ public:
}
};
+static_assert(sizeof(LocalDateTime) == 8);
+
+
inline std::ostream & operator<< (std::ostream & ostr, const LocalDateTime & datetime)
{
ostr << std::setfill('0') << std::setw(4) << datetime.year();
diff --git a/libs/libcommon/src/tests/CMakeLists.txt b/libs/libcommon/src/tests/CMakeLists.txt
index c8aaf476842..8986b49dc0f 100644
--- a/libs/libcommon/src/tests/CMakeLists.txt
+++ b/libs/libcommon/src/tests/CMakeLists.txt
@@ -6,6 +6,7 @@ add_executable (date_lut3 date_lut3.cpp)
add_executable (date_lut4 date_lut4.cpp)
add_executable (date_lut_default_timezone date_lut_default_timezone.cpp)
add_executable (multi_version multi_version.cpp)
+add_executable (local_date_time_comparison local_date_time_comparison.cpp)
set(PLATFORM_LIBS ${CMAKE_DL_LIBS})
@@ -15,7 +16,9 @@ target_link_libraries (date_lut3 common ${PLATFORM_LIBS})
target_link_libraries (date_lut4 common ${PLATFORM_LIBS})
target_link_libraries (date_lut_default_timezone common ${PLATFORM_LIBS})
target_link_libraries (multi_version common)
+target_link_libraries (local_date_time_comparison common)
add_check(multi_version)
+add_check(local_date_time_comparison)
add_executable (unit_tests_libcommon gtest_json_test.cpp gtest_strong_typedef.cpp)
target_link_libraries (unit_tests_libcommon gtest_main common)
diff --git a/libs/libcommon/src/tests/local_date_time_comparison.cpp b/libs/libcommon/src/tests/local_date_time_comparison.cpp
new file mode 100644
index 00000000000..5492ec31004
--- /dev/null
+++ b/libs/libcommon/src/tests/local_date_time_comparison.cpp
@@ -0,0 +1,29 @@
+#include
+#include
+
+#include
+
+
+void fillStackWithGarbage()
+{
+ volatile uint64_t a = 0xAABBCCDDEEFF0011ULL;
+ volatile uint64_t b = 0x2233445566778899ULL;
+ std::cout << a + b << '\n';
+}
+
+void checkComparison()
+{
+ LocalDateTime a("2018-07-18 01:02:03");
+ LocalDateTime b("2018-07-18 01:02:03");
+
+ if (a != b)
+ throw std::runtime_error("Test failed");
+}
+
+
+int main(int, char **)
+{
+ fillStackWithGarbage();
+ checkComparison();
+ return 0;
+}
diff --git a/release_lib.sh b/release_lib.sh
index 86edd68da9d..8265c3afedc 100644
--- a/release_lib.sh
+++ b/release_lib.sh
@@ -44,7 +44,7 @@ function gen_revision_author {
if [ "$TYPE" == "major" ]; then
VERSION_REVISION=$(($VERSION_REVISION + 1))
VERSION_MAJOR=$(($VERSION_MAJOR + 1))
- VERSION_MINOR=0
+ VERSION_MINOR=1
VERSION_PATCH=0
elif [ "$TYPE" == "minor" ] || [ "$TYPE" == "" ]; then
VERSION_REVISION=$(($VERSION_REVISION + 1))
diff --git a/website/index.html b/website/index.html
index c67a1e96da0..9f9c75308d6 100644
--- a/website/index.html
+++ b/website/index.html
@@ -90,6 +90,11 @@
+