Merge branch 'master' into null-as-default-default

This commit is contained in:
Alexey Milovidov 2020-11-29 13:47:43 +03:00
commit 0b6cf00b59
21 changed files with 164 additions and 142 deletions

View File

@ -50,7 +50,7 @@ services:
- label:disable
kafka_kerberos:
image: yandex/clickhouse-kerberos-kdc:${DOCKER_KERBEROS_KDC_TAG}
image: yandex/clickhouse-kerberos-kdc:${DOCKER_KERBEROS_KDC_TAG:-latest}
hostname: kafka_kerberos
volumes:
- ${KERBERIZED_KAFKA_DIR}/secrets:/tmp/keytab

View File

@ -1,6 +1,6 @@
version: '2.3'
services:
golang1:
image: yandex/clickhouse-mysql-golang-client:${DOCKER_MYSQL_GOLANG_CLIENT_TAG}
image: yandex/clickhouse-mysql-golang-client:${DOCKER_MYSQL_GOLANG_CLIENT_TAG:-latest}
# to keep container running
command: sleep infinity

View File

@ -1,6 +1,6 @@
version: '2.3'
services:
java1:
image: yandex/clickhouse-mysql-java-client:${DOCKER_MYSQL_JAVA_CLIENT_TAG}
image: yandex/clickhouse-mysql-java-client:${DOCKER_MYSQL_JAVA_CLIENT_TAG:-latest}
# to keep container running
command: sleep infinity

View File

@ -1,6 +1,6 @@
version: '2.3'
services:
mysqljs1:
image: yandex/clickhouse-mysql-js-client:${DOCKER_MYSQL_JS_CLIENT_TAG}
image: yandex/clickhouse-mysql-js-client:${DOCKER_MYSQL_JS_CLIENT_TAG:-latest}
# to keep container running
command: sleep infinity

View File

@ -1,6 +1,6 @@
version: '2.3'
services:
php1:
image: yandex/clickhouse-mysql-php-client:${DOCKER_MYSQL_PHP_CLIENT_TAG}
image: yandex/clickhouse-mysql-php-client:${DOCKER_MYSQL_PHP_CLIENT_TAG:-latest}
# to keep container running
command: sleep infinity

View File

@ -1,6 +1,6 @@
version: '2.2'
services:
java:
image: yandex/clickhouse-postgresql-java-client:${DOCKER_POSTGRESQL_JAVA_CLIENT_TAG}
image: yandex/clickhouse-postgresql-java-client:${DOCKER_POSTGRESQL_JAVA_CLIENT_TAG:-latest}
# to keep container running
command: sleep infinity

View File

@ -9,24 +9,4 @@ toc_title: IN Operator
See the section [IN operators](../../sql-reference/operators/in.md#select-in-operators).
## tuple(x, y, …), operator (x, y, …) {#tuplex-y-operator-x-y}
A function that allows grouping multiple columns.
For columns with the types T1, T2, …, it returns a Tuple(T1, T2, …) type tuple containing these columns. There is no cost to execute the function.
Tuples are normally used as intermediate values for an argument of IN operators, or for creating a list of formal parameters of lambda functions. Tuples cant be written to a table.
**See Also**
- [Tuple](../../sql-reference/functions/tuple-functions.md#tuple)
## tupleElement(tuple, n), operator x.N {#tupleelementtuple-n-operator-x-n}
A function that allows getting a column from a tuple.
N is the column index, starting from 1. N must be a constant. N must be a constant. N must be a strict postive integer no greater than the size of the tuple.
There is no cost to execute the function.
**See Also**
- [TupleElement](../../sql-reference/functions/tuple-functions.md#tupleelement)
[Original article](https://clickhouse.tech/docs/en/query_language/functions/in_functions/) <!--hide-->

View File

@ -5,39 +5,35 @@ toc_title: Tuples
# Functions for Working with Tuples {#tuple-functions}
## Tuple {#tuple}
## tuple {#tuple}
A function that allows grouping multiple columns.
For columns with the types T1, T2, …, it returns a Tuple(T1, T2, …) type tuple containing these columns. There is no cost to execute the function.
Tuples are normally used as intermediate values for an argument of IN operators, or for creating a list of formal parameters of lambda functions. Tuples cant be written to a table.
The function implements the operator `(x, y, …)`.
**Syntax**
``` sql
tuple(x, y, …)
```
**See Also**
- [Operator (x, y, …)](../../sql-reference/functions/in-functions.md#tuplex-y-operator-x-y)
## TupleElement {#tupleelement}
## tupleElement {#tupleelement}
A function that allows getting a column from a tuple.
N is the column index, starting from 1. N must be a constant. N must be a constant. N must be a strict postive integer no greater than the size of the tuple.
There is no cost to execute the function.
The function implements the operator `x.N`.
**Syntax**
``` sql
tupleElement(tuple, n)
```
**See Also**
- [Operator x.N](../../sql-reference/functions/in-functions.md#tupleelementtuple-n-operator-x-n)
## Untuple {#untuple}
## untuple {#untuple}
Performs syntactic substitution of [tuple](../../sql-reference/data-types/tuple.md#tuplet1-t2) elements in the call location.

View File

@ -21,10 +21,10 @@ The following operations with [partitions](../../../engines/table-engines/merget
<!-- -->
## DETACH PARTITION {#alter_detach-partition}
## DETACH PARTITION\|PART {#alter_detach-partition}
``` sql
ALTER TABLE table_name DETACH PARTITION partition_expr
ALTER TABLE table_name DETACH PARTITION|PART partition_expr
```
Moves all data for the specified partition to the `detached` directory. The server forgets about the detached data partition as if it does not exist. The server will not know about this data until you make the [ATTACH](#alter_attach-partition) query.
@ -32,7 +32,8 @@ Moves all data for the specified partition to the `detached` directory. The serv
Example:
``` sql
ALTER TABLE visits DETACH PARTITION 201901
ALTER TABLE mt DETACH PARTITION '2020-11-21';
ALTER TABLE mt DETACH PART 'all_2_2_0';
```
Read about setting the partition expression in a section [How to specify the partition expression](#alter-how-to-specify-part-expr).
@ -41,10 +42,10 @@ After the query is executed, you can do whatever you want with the data in the `
This query is replicated it moves the data to the `detached` directory on all replicas. Note that you can execute this query only on a leader replica. To find out if a replica is a leader, perform the `SELECT` query to the [system.replicas](../../../operations/system-tables/replicas.md#system_tables-replicas) table. Alternatively, it is easier to make a `DETACH` query on all replicas - all the replicas throw an exception, except the leader replica.
## DROP PARTITION {#alter_drop-partition}
## DROP PARTITION\|PART {#alter_drop-partition}
``` sql
ALTER TABLE table_name DROP PARTITION partition_expr
ALTER TABLE table_name DROP PARTITION|PART partition_expr
```
Deletes the specified partition from the table. This query tags the partition as inactive and deletes data completely, approximately in 10 minutes.
@ -53,6 +54,13 @@ Read about setting the partition expression in a section [How to specify the par
The query is replicated it deletes data on all replicas.
Example:
``` sql
ALTER TABLE mt DROP PARTITION '2020-11-21';
ALTER TABLE mt DROP PART 'all_4_4_0';
```
## DROP DETACHED PARTITION\|PART {#alter_drop-detached}
``` sql

View File

@ -9,24 +9,4 @@ toc_title: "\u0424\u0443\u043d\u043a\u0446\u0438\u0438\u0020\u0434\u043b\u044f\u
Смотрите раздел [Операторы IN](../operators/in.md#select-in-operators).
## tuple(x, y, …), оператор (x, y, …) {#tuplex-y-operator-x-y}
Функция, позволяющая сгруппировать несколько столбцов.
Для столбцов, имеющих типы T1, T2, … возвращает кортеж типа Tuple(T1, T2, …), содержащий эти столбцы. Выполнение функции ничего не стоит.
Кортежи обычно используются как промежуточное значение в качестве аргумента операторов IN, или для создания списка формальных параметров лямбда-функций. Кортежи не могут быть записаны в таблицу.
**Смотрите также**
- [Tuple](../../sql-reference/functions/tuple-functions.md#tuple)
## tupleElement(tuple, n), оператор x.N {#tupleelementtuple-n-operator-x-n}
Функция, позволяющая достать столбец из кортежа.
N - индекс столбца начиная с 1. N должно быть константой. N должно быть целым строго положительным числом не большим размера кортежа.
Выполнение функции ничего не стоит.
**Смотрите также**
- [TupleElement](../../sql-reference/functions/tuple-functions.md#tupleelement)
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/in_functions/) <!--hide-->

View File

@ -5,39 +5,35 @@ toc_title: Функции для работы с кортежами
# Функции для работы с кортежами {#tuple-functions}
## Tuple {#tuple}
## tuple {#tuple}
Функция, позволяющая сгруппировать несколько столбцов.
Для столбцов, имеющих типы T1, T2, … возвращает кортеж типа Tuple(T1, T2, …), содержащий эти столбцы. Выполнение функции ничего не стоит.
Кортежи обычно используются как промежуточное значение в качестве аргумента операторов IN, или для создания списка формальных параметров лямбда-функций. Кортежи не могут быть записаны в таблицу.
С помощью функции реализуется оператор `(x, y, …)`.
**Синтаксис**
``` sql
tuple(x, y, …)
```
**Смотрите также**
- [Оператор (x, y, …)](../../sql-reference/functions/in-functions.md#tuplex-y-operator-x-y)
## TupleElement {#tupleelement}
## tupleElement {#tupleelement}
Функция, позволяющая достать столбец из кортежа.
N - индекс столбца начиная с 1. N должно быть константой. N должно быть целым строго положительным числом не большим размера кортежа.
Выполнение функции ничего не стоит.
С помощью функции реализуется оператор `x.N`.
**Синтаксис**
``` sql
tupleElement(tuple, n)
```
**Смотрите также**
- [Оператор x.N](../../sql-reference/functions/in-functions.md#tupleelementtuple-n-operator-x-n)
## Untuple {#untuple}
## untuple {#untuple}
Выполняет синтаксическую подстановку элементов [кортежа](../../sql-reference/data-types/tuple.md#tuplet1-t2) в место вызова.

View File

@ -19,10 +19,10 @@ toc_title: PARTITION
- [FETCH PARTITION](#alter_fetch-partition) — скачать партицию с другого сервера;
- [MOVE PARTITION\|PART](#alter_move-partition) — переместить партицию/кускок на другой диск или том.
## DETACH PARTITION {#alter_detach-partition}
## DETACH PARTITION\|PART {#alter_detach-partition}
``` sql
ALTER TABLE table_name DETACH PARTITION partition_expr
ALTER TABLE table_name DETACH PARTITION|PART partition_expr
```
Перемещает заданную партицию в директорию `detached`. Сервер не будет знать об этой партиции до тех пор, пока вы не выполните запрос [ATTACH](#alter_attach-partition).
@ -30,7 +30,8 @@ ALTER TABLE table_name DETACH PARTITION partition_expr
Пример:
``` sql
ALTER TABLE visits DETACH PARTITION 201901
ALTER TABLE mt DETACH PARTITION '2020-11-21';
ALTER TABLE mt DETACH PART 'all_2_2_0';
```
Подробнее о том, как корректно задать имя партиции, см. в разделе [Как задавать имя партиции в запросах ALTER](#alter-how-to-specify-part-expr).
@ -39,10 +40,10 @@ ALTER TABLE visits DETACH PARTITION 201901
Запрос реплицируется — данные будут перенесены в директорию `detached` и забыты на всех репликах. Обратите внимание, запрос может быть отправлен только на реплику-лидер. Чтобы узнать, является ли реплика лидером, выполните запрос `SELECT` к системной таблице [system.replicas](../../../operations/system-tables/replicas.md#system_tables-replicas). Либо можно выполнить запрос `DETACH` на всех репликах — тогда на всех репликах, кроме реплики-лидера, запрос вернет ошибку.
## DROP PARTITION {#alter_drop-partition}
## DROP PARTITION\|PART {#alter_drop-partition}
``` sql
ALTER TABLE table_name DROP PARTITION partition_expr
ALTER TABLE table_name DROP PARTITION|PART partition_expr
```
Удаляет партицию. Партиция помечается как неактивная и будет полностью удалена примерно через 10 минут.
@ -51,6 +52,13 @@ ALTER TABLE table_name DROP PARTITION partition_expr
Запрос реплицируется — данные будут удалены на всех репликах.
Пример:
``` sql
ALTER TABLE mt DROP PARTITION '2020-11-21';
ALTER TABLE mt DROP PART 'all_4_4_0';
```
## DROP DETACHED PARTITION\|PART {#alter_drop-detached}
``` sql

View File

@ -15,8 +15,6 @@
Задача «normalized z-Order curve» в перспективе может быть полезна для БК и Метрики, так как позволяет смешивать OrderID и PageID и избежать дублирования данных.
В задаче также вводится способ индексации путём обращения функции нескольких аргументов на интервале, что имеет смысл для дальнейшего развития.
[Андрей Чулков](https://github.com/achulkov2), ВШЭ.
### 1.2. + Wait-free каталог баз данных {#wait-free-katalog-baz-dannykh}
Q2. Делает [Александр Токмаков](https://github.com/tavplubix), первый рабочий вариант в декабре 2019. Нужно для DataLens и Яндекс.Метрики.
@ -292,7 +290,8 @@ Upd. Иван Блинков сделал эту задачу путём зам
### 4.1. Уменьшение числа потоков при распределённых запросах {#umenshenie-chisla-potokov-pri-raspredelionnykh-zaprosakh}
Весна 2020. Upd. Есть прототип. Upd. Он не работает. Upd. Человек отказался от задачи, теперь сроки не определены.
Upd. Есть прототип. Upd. Он не работает. Upd. Человек отказался от задачи, теперь сроки не определены.
Upd. Павел Круглов, весна 2021.
### 4.2. Спекулятивное выполнение запросов на нескольких репликах {#spekuliativnoe-vypolnenie-zaprosov-na-neskolkikh-replikakh}
@ -306,6 +305,8 @@ Upd. Иван Блинков сделал эту задачу путём зам
Upd. Сейчас обсуждается, как сделать другую задачу вместо этой.
Павел Круглов, весна 2021.
### 4.3. Ограничение числа одновременных скачиваний с реплик {#ogranichenie-chisla-odnovremennykh-skachivanii-s-replik}
Изначально делал Олег Алексеенков, но пока решение не готово, хотя там не так уж много доделывать.
@ -320,9 +321,10 @@ Upd. Сейчас обсуждается, как сделать другую з
### 4.7. Ленивая загрузка множеств для IN и JOIN с помощью k/v запросов {#lenivaia-zagruzka-mnozhestv-dlia-in-i-join-s-pomoshchiu-kv-zaprosov}
### 4.8. Разделить background pool для fetch и merge {#razdelit-background-pool-dlia-fetch-i-merge}
### 4.8. + Разделить background pool для fetch и merge {#razdelit-background-pool-dlia-fetch-i-merge}
В очереди. Исправить проблему, что восстанавливающаяся реплика перестаёт мержить. Частично компенсируется 4.3.
Исправить проблему, что восстанавливающаяся реплика перестаёт мержить. Частично компенсируется 4.3.
Ура, готово! Сделал Александр Сапин.
## 5. Операции {#operatsii}
@ -381,6 +383,7 @@ Upd. Появилась вторая версия LTS - 20.3.
### 6.5. Эксперименты с LLVM X-Ray {#eksperimenty-s-llvm-x-ray}
Требует 2.2.
Перенос на 2021 или отмена.
### 6.6. + Стек трейс для любых исключений {#stek-treis-dlia-liubykh-iskliuchenii}
@ -401,6 +404,8 @@ Upd. В разработке.
### 6.10. Сбор общих системных метрик {#sbor-obshchikh-sistemnykh-metrik}
Перенос на весну 2021.
## 7. Сопровождение разработки {#soprovozhdenie-razrabotki}
@ -461,7 +466,7 @@ UBSan включен в функциональных тестах, но не в
### 7.12. Показывать тестовое покрытие нового кода в PR {#pokazyvat-testovoe-pokrytie-novogo-koda-v-pr}
Пока есть просто показ тестового покрытия всего кода.
Отложено.
Отложено на весну 2021.
### 7.13. + Включение аналога -Weverything в gcc {#vkliuchenie-analoga-weverything-v-gcc}
@ -512,6 +517,7 @@ Upd. Минимальная подсветка добавлена, а все о
Поводом использования libressl послужило желание нашего хорошего друга из известной компании несколько лет назад. Но сейчас ситуация состоит в том, что openssl продолжает развиваться, а libressl не особо, и можно спокойно менять обратно.
Нужно для Яндекс.Облака для поддержки TLS 1.3.
Теперь нужно заменить OpenSSL на BoringSSL.
### 7.16. + tzdata внутри бинарника {#tzdata-vnutri-binarnika}
@ -612,7 +618,7 @@ Upd. Эльдар Заитов добавляет OSS Fuzz.
Upd. Сделаны randomString, randomFixedString.
Upd. Сделаны fuzzBits.
### 7.24. Fuzzing лексера и парсера запросов; кодеков и форматов {#fuzzing-leksera-i-parsera-zaprosov-kodekov-i-formatov}
### 7.24. + Fuzzing лексера и парсера запросов; кодеков и форматов {#fuzzing-leksera-i-parsera-zaprosov-kodekov-i-formatov}
Продолжение 7.23.
@ -656,6 +662,7 @@ Upd. В Аркадии частично работает небольшая ча
### 7.30. Возможность переключения бинарных файлов на продакшене без выкладки пакетов {#vozmozhnost-perekliucheniia-binarnykh-failov-na-prodakshene-bez-vykladki-paketov}
Низкий приоритет.
Сделали файл clickhouse.old.
### 7.31. Зеркалирование нагрузки между серверами {#zerkalirovanie-nagruzki-mezhdu-serverami}
@ -737,7 +744,7 @@ Upd. Задача взята в работу.
### 8.6. Kerberos аутентификация для HDFS и Kafka {#kerberos-autentifikatsiia-dlia-hdfs-i-kafka}
Андрей Коняев, ArenaData. Он куда-то пропал.
Upd. В процессе работа для Kafka.
Для Kafka готово, для HDFS в процессе.
### 8.7. + Исправление мелочи HDFS на очень старых ядрах Linux {#ispravlenie-melochi-hdfs-na-ochen-starykh-iadrakh-linux}
@ -1024,14 +1031,14 @@ Upd. Сделано хранение прав. До готового к испо
[Виталий Баранов](https://github.com/vitlibar). Финальная стадия разработки, рабочая версия в декабре 2019.
Q1. Сделано управление правами полностью, но не реализовано их хранение, см. 12.1.
### 12.3. Подключение справочника пользователей и прав доступа из LDAP {#podkliuchenie-spravochnika-polzovatelei-i-prav-dostupa-iz-ldap}
### 12.3. + Подключение справочника пользователей и прав доступа из LDAP {#podkliuchenie-spravochnika-polzovatelei-i-prav-dostupa-iz-ldap}
Аутентификация через LDAP - Денис Глазачев.
[Виталий Баранов](https://github.com/vitlibar) и Денис Глазачев, Altinity. Требует 12.1.
Q3.
Upd. Pull request на финальной стадии.
### 12.4. Подключение IDM системы Яндекса как справочника пользователей и прав доступа {#podkliuchenie-idm-sistemy-iandeksa-kak-spravochnika-polzovatelei-i-prav-dostupa}
### 12.4. - Подключение IDM системы Яндекса как справочника пользователей и прав доступа {#podkliuchenie-idm-sistemy-iandeksa-kak-spravochnika-polzovatelei-i-prav-dostupa}
Пока низкий приоритет. Нужно для Метрики. Требует 12.3.
Отложено.
@ -1051,7 +1058,7 @@ Upd. Есть pull request.
### 13.1. Overcommit запросов по памяти и вытеснение {#overcommit-zaprosov-po-pamiati-i-vytesnenie}
Требует 2.1. Способ реализации обсуждается. Александр Казаков.
Требует 2.1. Способ реализации обсуждается.
### 13.2. Общий конвейер выполнения на сервер {#obshchii-konveier-vypolneniia-na-server}
@ -1059,8 +1066,6 @@ Upd. Есть pull request.
### 13.3. Пулы ресурсов {#puly-resursov}
Александр Казаков.
Требует 13.2 или сможем сделать более неудобную реализацию раньше.
Обсуждается вариант неудобной реализации. Пока средний приоритет, целимся на Q1/Q2.
Вариант реализации выбрал Александр Казаков.
@ -1068,6 +1073,7 @@ Upd. Не уследили, и задачу стали обсуждать мен
Upd. Задачу смотрит Александр Казаков.
Upd. Задача взята в работу.
Upd. Задача как будто взята в работу.
Upd. Задачу не сделал.
## 14. Диалект SQL {#dialekt-sql}
@ -1082,19 +1088,18 @@ Upd. Задача как будто взята в работу.
### 14.3. Поддержка подстановок для множеств в правой части IN {#podderzhka-podstanovok-dlia-mnozhestv-v-pravoi-chasti-in}
### 14.4. Поддержка подстановок для идентификаторов (имён) в SQL запросе {#podderzhka-podstanovok-dlia-identifikatorov-imion-v-sql-zaprose}
### 14.4. + Поддержка подстановок для идентификаторов (имён) в SQL запросе {#podderzhka-podstanovok-dlia-identifikatorov-imion-v-sql-zaprose}
zhang2014
Задача на паузе.
Amos Bird сделал.
### 14.5. + Поддержка задания множества как массива в правой части секции IN {#podderzhka-zadaniia-mnozhestva-kak-massiva-v-pravoi-chasti-sektsii-in}
Василий Немков, Altinity, делал эту задачу, но забросил её в пользу других задач.
В результате, сейчас доделывает Антон Попов.
### 14.6. Глобальный scope для WITH {#globalnyi-scope-dlia-with}
### 14.6. + Глобальный scope для WITH {#globalnyi-scope-dlia-with}
В обсуждении. Amos Bird.
Amos Bird сделал.
### 14.7. Nullable для WITH ROLLUP, WITH CUBE, WITH TOTALS {#nullable-dlia-with-rollup-with-cube-with-totals}
@ -1148,13 +1153,13 @@ Upd. Есть pull request. Готово.
### 14.17. + Ввести понятие stateful функций {#vvesti-poniatie-stateful-funktsii}
zhang2014.
Для runningDifference, neighbour - их учёт в оптимизаторе запросов.
В интерфейсе уже сделано. Надо проверить, что учитывается в нужных местах (например, что работает predicate pushdown сквозь ORDER BY, если таких функций нет).
Александр Кузьменков.
### 14.18. UNION DISTINCT и возможность включить его по-умолчанию {#union-distinct-i-vozmozhnost-vkliuchit-ego-po-umolchaniiu}
### 14.18. + UNION DISTINCT и возможность включить его по-умолчанию {#union-distinct-i-vozmozhnost-vkliuchit-ego-po-umolchaniiu}
Для BI систем.
Для BI систем. flynn ucasFL.
### 14.19. + Совместимость парсера типов данных с SQL {#sovmestimost-parsera-tipov-dannykh-s-sql}
@ -1278,7 +1283,7 @@ Upd. Есть pull request.
Исправление фундаментальной проблемы - есть PR.
Фундаментальная проблема решена.
### 18.2. Агрегатные функции для статистических тестов {#agregatnye-funktsii-dlia-statisticheskikh-testov}
### 18.2. + Агрегатные функции для статистических тестов {#agregatnye-funktsii-dlia-statisticheskikh-testov}
Артём Цыганов, Руденский Константин Игоревич, Семёнов Денис, ВШЭ.
@ -1286,6 +1291,7 @@ Upd. Есть pull request.
Сделали прототип двух тестов, есть pull request. Также есть pull request для корелляции рангов.
Upd. Помержили корелляцию рангов, но ещё не помержили сравнение t-test, u-test.
Upd. Всё доделал Никита Михайлов.
### 18.3. Инфраструктура для тренировки моделей в ClickHouse {#infrastruktura-dlia-trenirovki-modelei-v-clickhouse}
@ -1295,7 +1301,7 @@ Upd. Помержили корелляцию рангов, но ещё не по
## 19. Улучшение работы кластера {#uluchshenie-raboty-klastera}
### 19.1. Параллельные кворумные вставки без линеаризуемости {#parallelnye-kvorumnye-vstavki-bez-linearizuemosti}
### 19.1. + Параллельные кворумные вставки без линеаризуемости {#parallelnye-kvorumnye-vstavki-bez-linearizuemosti}
Upd. В работе, ожидается в начале октября.
@ -1361,6 +1367,8 @@ Upd. Задача в разработке.
### 20.2. Поддержка DELETE путём преобразования множества ключей в множество row_numbers на реплике, столбца флагов и индекса по диапазонам {#podderzhka-delete-putiom-preobrazovaniia-mnozhestva-kliuchei-v-mnozhestvo-row-numbers-na-replike-stolbtsa-flagov-i-indeksa-po-diapazonam}
Задача назначена на 2021.
### 20.3. Поддержка ленивых DELETE путём запоминания выражений и преобразования к множеству ключей в фоне {#podderzhka-lenivykh-delete-putiom-zapominaniia-vyrazhenii-i-preobrazovaniia-k-mnozhestvu-kliuchei-v-fone}
### 20.4. Поддержка UPDATE с помощью преобразования в DELETE и вставок {#podderzhka-update-s-pomoshchiu-preobrazovaniia-v-delete-i-vstavok}
@ -1413,6 +1421,7 @@ ucasFL, в разработке. Готово.
[Achimbab](https://github.com/achimbab).
Есть pull request. Но это не совсем то.
Upd. В обсуждении.
Upd. Назначено на 2021.
### 21.8. Взаимная интеграция аллокатора и кэша {#vzaimnaia-integratsiia-allokatora-i-kesha}
@ -1427,6 +1436,7 @@ Upd. В обсуждении.
Upd. Есть нерабочий прототип, скорее всего будет отложено.
Upd. Отложено до осени.
Upd. Отложено до.
Upd. Отложено.
### 21.8.1. Отдельный аллокатор для кэшей с ASLR {#otdelnyi-allokator-dlia-keshei-s-aslr}
@ -1517,7 +1527,7 @@ Upd. Сделаны самые существенные из предложен
Для сортировки по кортежам используется обычная сортировка с компаратором, который в цикле по элементам кортежа делает виртуальные вызовы `IColumn::compareAt`. Это неоптимально - как из-за короткого цикла по неизвестному в compile-time количеству элементов, так и из-за виртуальных вызовов. Чтобы обойтись без виртуальных вызовов, есть метод `IColumn::getPermutation`. Он используется в случае сортировки по одному столбцу. Есть вариант, что в случае сортировки по кортежу, что-то похожее тоже можно применить… например, сделать метод `updatePermutation`, принимающий аргументы offset и limit, и допереставляющий перестановку в диапазоне значений, в которых предыдущий столбец имел равные значения.
3. RadixSort для сортировки.
\+ 3. RadixSort для сортировки.
Один наш знакомый начал делать задачу по попытке использования RadixSort для сортировки столбцов. Был сделан вариант indirect сортировки (для `getPermutation`), но не оптимизирован до конца - есть лишние ненужные перекладывания элементов. Для того, чтобы его оптимизировать, придётся добавить немного шаблонной магии (на последнем шаге что-то не копировать, вместо перекладывания индексов - складывать их в готовое место). Также этот человек добавил метод MSD Radix Sort для реализации radix partial sort. Но даже не проверил производительность.
@ -1527,7 +1537,9 @@ Upd. Сделаны самые существенные из предложен
Виртуальный метод `compareAt` возвращает -1, 0, 1. Но алгоритмы сортировки сравнениями обычно рассчитаны на `operator<` и не могут получить преимущества от three-way comparison. А можно ли написать так, чтобы преимущество было?
5. pdq partial sort
\+ 5. pdq partial sort
Upd. Данила Кутенин решил эту задачу ультимативно, используя FloydRivest алгоритм.
Хороший алгоритм сортировки сравнениями `pdqsort` не имеет варианта partial sort. Заметим, что на практике, почти все сортировки в запросах ClickHouse являются partial_sort, так как `ORDER BY` почти всегда идёт с `LIMIT`. Кстати, Данила Кутенин уже попробовал это и показал, что в тривиальном случае преимущества нет. Но не очевидно, что нельзя сделать лучше.
@ -1619,6 +1631,7 @@ Upd. Добавили таймауты.
Altinity.
Я не в курсе, какой статус.
Там предлагают очень сложное решение вместо простого.
### 22.16. + Исправление низкой производительности кодека DoubleDelta {#ispravlenie-nizkoi-proizvoditelnosti-kodeka-doubledelta}
@ -1656,15 +1669,15 @@ Upd. Готово.
Нужно для Метрики. Алексей Миловидов.
### 22.25. Избавиться от библиотеки btrie {#izbavitsia-ot-biblioteki-btrie}
### 22.25. + Избавиться от библиотеки btrie {#izbavitsia-ot-biblioteki-btrie}
Алексей Миловидов. Низкий приоритет.
Владимир Черкасов сделал эту задачу.
### 22.26. Плохая производительность quantileTDigest {#plokhaia-proizvoditelnost-quantiletdigest}
[#2668](https://github.com/ClickHouse/ClickHouse/issues/2668)
Алексей Миловидов или будет переназначено.
Павел Круглов и Илья Щербак (ВК).
### 22.27. Проверить несколько PR, которые были закрыты zhang2014 и sundy-li {#proverit-neskolko-pr-kotorye-byli-zakryty-zhang2014-i-sundy-li}
@ -1766,7 +1779,7 @@ Upd. Отменено.
Виталий Баранов.
Отложено, после бэкапов.
### 24.5. Поддержка функций шифрования для отдельных значений {#podderzhka-funktsii-shifrovaniia-dlia-otdelnykh-znachenii}
### 24.5. + Поддержка функций шифрования для отдельных значений {#podderzhka-funktsii-shifrovaniia-dlia-otdelnykh-znachenii}
Смотрите также 24.5.
@ -1775,6 +1788,7 @@ Upd. Отменено.
Делает Василий Немков, Altinity
Есть pull request в процессе ревью, исправляем проблемы производительности.
Сейчас в состоянии, что уже добавлено в продакшен, но производительность всё ещё низкая (тех долг).
### 24.6. Userspace RAID {#userspace-raid}
@ -1825,7 +1839,7 @@ RAID позволяет одновременно увеличить надёжн
Upd. Есть pull request. В стадии ревью. Готово.
### 24.10. Поддержка типов half/bfloat16/unum {#podderzhka-tipov-halfbfloat16unum}
### 24.10. - Поддержка типов half/bfloat16/unum {#podderzhka-tipov-halfbfloat16unum}
[#7657](https://github.com/ClickHouse/ClickHouse/issues/7657)
@ -1833,6 +1847,7 @@ Upd. Есть pull request. В стадии ревью. Готово.
Есть pull request на промежуточной стадии.
Отложено.
Отменено.
### 24.11. User Defined Functions {#user-defined-functions}
@ -1882,10 +1897,12 @@ Upd. Прототип bitonic sort помержен, но целесообраз
Требует 2.1.
Upd. Есть два прототипа от внешних контрибьюторов.
Александр Кузьменков.
### 24.15. Поддержка полуструктурированных данных {#podderzhka-polustrukturirovannykh-dannykh}
Требует 1.14 и 2.10.
Антон Попов.
### 24.16. Улучшение эвристики слияний {#uluchshenie-evristiki-sliianii}
@ -1915,6 +1932,7 @@ Upd. Есть pull request - в большинстве случаев однов
### 24.21. Реализация в ClickHouse протокола распределённого консенсуса {#realizatsiia-v-clickhouse-protokola-raspredelionnogo-konsensusa}
Имеет смысл только после 19.2.
Александр Сапин.
### 24.22. Вывод типов по блоку данных. Вывод формата данных по примеру {#vyvod-tipov-po-bloku-dannykh-vyvod-formata-dannykh-po-primeru}
@ -1955,13 +1973,14 @@ ClickHouse также может использоваться для быстр
Михаил Филитов, ВШЭ.
Upd. Есть pull request. Нужно ещё чистить код библиотеки.
### 24.26. Поддержка open tracing или аналогов {#podderzhka-open-tracing-ili-analogov}
### 24.26. + Поддержка open tracing или аналогов {#podderzhka-open-tracing-ili-analogov}
[#5182](https://github.com/ClickHouse/ClickHouse/issues/5182)
Александр Кожихов, ВШЭ и Яндекс.YT.
Upd. Есть pull request с прототипом.
Upd. Александ Кузьменков взял задачу в работу.
Сделано.
### 24.27. Реализация алгоритмов min-hash, sim-hash для нечёткого поиска полудубликатов {#realizatsiia-algoritmov-min-hash-sim-hash-dlia-nechiotkogo-poiska-poludublikatov}
@ -1995,7 +2014,7 @@ Amos Bird, но его решение слишком громоздкое и п
Перепиcывание в JOIN. Не раньше 21.11, 21.12, 21.9. Низкий приоритет.
Отложено.
### 24.32. Поддержка GRPC {#podderzhka-grpc}
### 24.32. + Поддержка GRPC {#podderzhka-grpc}
Мария Конькова, ВШЭ и Яндекс.
Также смотрите 24.29.
@ -2009,6 +2028,7 @@ Amos Bird, но его решение слишком громоздкое и п
Задача в работе, есть pull request. [#10136](https://github.com/ClickHouse/ClickHouse/pull/10136)
Upd. Задачу взял в работу Виталий Баранов.
Сделано.
## 25. DevRel {#devrel}
@ -2067,13 +2087,14 @@ Upd. Задачу взял в работу Виталий Баранов.
Алексей Миловидов и все подготовленные докладчики.
Upd. Участвуем.
### 25.14. Конференции в России: все HighLoad, возможно CodeFest, DUMP или UWDC, возможно C++ Russia {#konferentsii-v-rossii-vse-highload-vozmozhno-codefest-dump-ili-uwdc-vozmozhno-c-russia}
### 25.14. + Конференции в России: все HighLoad, возможно CodeFest, DUMP или UWDC, возможно C++ Russia {#konferentsii-v-rossii-vse-highload-vozmozhno-codefest-dump-ili-uwdc-vozmozhno-c-russia}
Алексей Миловидов и все подготовленные докладчики.
Upd. Есть Saint HighLoad online.
Upd. Есть C++ Russia.
CodeFest, DUMP, UWDC отменились.
Upd. Добавились Highload Fwdays, Матемаркетинг.
Upd. Добавились подкасты C++ Russia.
### 25.15. Конференции зарубежные: Percona, DataOps, попытка попасть на более крупные {#konferentsii-zarubezhnye-percona-dataops-popytka-popast-na-bolee-krupnye}
@ -2096,6 +2117,7 @@ DataOps отменилась.
Есть минимальный прототип. Сделал Илья Яцишин. Этот прототип не позволяет делиться ссылками на результаты запросов.
Upd. На финальной стадии инструмент для экспериментирования с разными версиями ClickHouse.
Upd. По факту, задача считается не сделанной (готово только 99%, не 100%).
### 25.17. Взаимодействие с ВУЗами: ВШЭ, УрФУ, ICT Beijing {#vzaimodeistvie-s-vuzami-vshe-urfu-ict-beijing}
@ -2103,6 +2125,7 @@ Upd. На финальной стадии инструмент для экспе
Благодаря Robert Hodges добавлен CMU.
Upd. Взаимодействие с ВШЭ 2019/2020 успешно выполнено.
Upd. Идёт подготовка к 2020/2021.
Upd. Уже взяли несколько десятков человек на 2020/2021.
### 25.18. - Лекция в ШАД {#lektsiia-v-shad}

View File

@ -202,7 +202,11 @@ def build(args):
if __name__ == '__main__':
os.chdir(os.path.join(os.path.dirname(__file__), '..'))
website_dir = os.path.join('..', 'website')
# A root path to ClickHouse source code.
src_dir = '..'
website_dir = os.path.join(src_dir, 'website')
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('--lang', default='en,es,fr,ru,zh,ja,tr,fa')
@ -210,6 +214,7 @@ if __name__ == '__main__':
arg_parser.add_argument('--docs-dir', default='.')
arg_parser.add_argument('--theme-dir', default=website_dir)
arg_parser.add_argument('--website-dir', default=website_dir)
arg_parser.add_argument('--src-dir', default=src_dir)
arg_parser.add_argument('--blog-dir', default=os.path.join(website_dir, 'blog'))
arg_parser.add_argument('--output-dir', default='build')
arg_parser.add_argument('--enable-stable-releases', action='store_true')

View File

@ -145,13 +145,19 @@ def build_website(args):
'public',
'node_modules',
'templates',
'locale'
'locale',
'.gitkeep'
)
)
# This file can be requested to check for available ClickHouse releases.
shutil.copy2(
os.path.join(args.src_dir, 'utils', 'list-versions', 'version_date.tsv'),
os.path.join(args.output_dir, 'data', 'version_date.tsv'))
shutil.copy2(
os.path.join(args.website_dir, 'js', 'embedd.min.js'),
os.path.join(args.output_dir, 'js', 'embedd.min.js')
)
os.path.join(args.output_dir, 'js', 'embedd.min.js'))
for root, _, filenames in os.walk(args.output_dir):
for filename in filenames:

View File

@ -21,10 +21,12 @@ namespace DB
/// Estimate of number of bytes in cache for marks.
struct MarksWeightFunction
{
/// We spent additional bytes on key in hashmap, linked lists, shared pointers, etc ...
static constexpr size_t MARK_CACHE_OVERHEAD = 128;
size_t operator()(const MarksInCompressedFile & marks) const
{
/// NOTE Could add extra 100 bytes for overhead of std::vector, cache structures and allocator.
return marks.size() * sizeof(MarkInCompressedFile);
return marks.size() * sizeof(MarkInCompressedFile) + MARK_CACHE_OVERHEAD;
}
};

View File

@ -179,16 +179,19 @@ class _NetworkManager:
except docker.errors.NotFound:
pass
# for some reason docker api may hang if image doesn't exist, so we download it
# before running
for i in range(5):
try:
subprocess.check_call("docker pull yandex/clickhouse-integration-helper", shell=True)
break
except:
time.sleep(i)
else:
raise Exception("Cannot pull yandex/clickhouse-integration-helper image")
image = subprocess.check_output("docker images -q yandex/clickhouse-integration-helper 2>/dev/null", shell=True)
if not image.strip():
print("No network image helper, will try download")
# for some reason docker api may hang if image doesn't exist, so we download it
# before running
for i in range(5):
try:
subprocess.check_call("docker pull yandex/clickhouse-integration-helper", shell=True)
break
except:
time.sleep(i)
else:
raise Exception("Cannot pull yandex/clickhouse-integration-helper image")
self._container = self._docker_client.containers.run('yandex/clickhouse-integration-helper',
auto_remove=True,

View File

@ -57,6 +57,7 @@ def test_reload_zookeeper(start_cluster):
</yandex >
"""
node.replace_config("/etc/clickhouse-server/conf.d/zookeeper.xml", new_config)
node.query("SYSTEM RELOAD CONFIG")
## config reloads, but can still work
assert_eq_with_retry(node, "SELECT COUNT() FROM test_table", '1000', retry_count=120, sleep_time=0.5)
@ -86,6 +87,7 @@ def test_reload_zookeeper(start_cluster):
</yandex>
"""
node.replace_config("/etc/clickhouse-server/conf.d/zookeeper.xml", new_config)
node.query("SYSTEM RELOAD CONFIG")
assert_eq_with_retry(node, "SELECT COUNT() FROM test_table", '1000', retry_count=120, sleep_time=0.5)

View File

@ -17,19 +17,14 @@ distributed = cluster.add_instance('distributed', main_configs=["configs/config.
def started_cluster():
try:
cluster.start()
for node in [node1, node2]:
node.query("CREATE TABLE sometable (date Date, id UInt32, value Int32) ENGINE = MergeTree() ORDER BY id;")
node.query("INSERT INTO sometable VALUES (toDate('2010-01-10'), 1, 1)")
node.query("CREATE USER shard")
node.query("GRANT ALL ON *.* TO shard")
distributed.query(
"CREATE TABLE proxy (date Date, id UInt32, value Int32) ENGINE = Distributed(test_cluster, default, sometable, toUInt64(date));")
distributed.query(
"CREATE TABLE shard_settings (name String, value String) ENGINE = Distributed(test_cluster, system, settings);")
distributed.query("CREATE ROLE admin")
distributed.query("GRANT ALL ON *.* TO admin")
distributed.query(
"CREATE TABLE shard_settings (name String, value String) ENGINE = Distributed(test_cluster, system, settings);")
yield cluster
@ -46,6 +41,14 @@ def restart_distributed():
def test_select_clamps_settings():
for node in [node1, node2]:
node.query("CREATE TABLE sometable_select (date Date, id UInt32, value Int32) ENGINE = MergeTree() ORDER BY id;")
node.query("INSERT INTO sometable_select VALUES (toDate('2010-01-10'), 1, 1)")
distributed.query(
"CREATE TABLE proxy_select (date Date, id UInt32, value Int32) ENGINE = Distributed(test_cluster, default, sometable_select, toUInt64(date));")
distributed.query("CREATE USER normal DEFAULT ROLE admin SETTINGS max_memory_usage = 80000000")
distributed.query("CREATE USER wasteful DEFAULT ROLE admin SETTINGS max_memory_usage = 2000000000")
distributed.query("CREATE USER readonly DEFAULT ROLE admin SETTINGS readonly = 1")
@ -53,7 +56,7 @@ def test_select_clamps_settings():
node2.query("ALTER USER shard SETTINGS readonly = 1")
# Check that shards doesn't throw exceptions on constraints violation
query = "SELECT COUNT() FROM proxy"
query = "SELECT COUNT() FROM proxy_select"
assert distributed.query(query) == '2\n'
assert distributed.query(query, user='normal') == '2\n'
assert distributed.query(query, user='wasteful') == '2\n'
@ -62,7 +65,7 @@ def test_select_clamps_settings():
assert distributed.query(query, settings={"max_memory_usage": 40000000, "readonly": 2}) == '2\n'
assert distributed.query(query, settings={"max_memory_usage": 3000000000, "readonly": 2}) == '2\n'
query = "SELECT COUNT() FROM remote('node{1,2}', 'default', 'sometable')"
query = "SELECT COUNT() FROM remote('node{1,2}', 'default', 'sometable_select')"
assert distributed.query(query) == '2\n'
assert distributed.query(query, user='normal') == '2\n'
assert distributed.query(query, user='wasteful') == '2\n'
@ -103,10 +106,17 @@ def test_select_clamps_settings():
def test_insert_clamps_settings():
for node in [node1, node2]:
node.query("CREATE TABLE sometable_insert (date Date, id UInt32, value Int32) ENGINE = MergeTree() ORDER BY id;")
node.query("INSERT INTO sometable_insert VALUES (toDate('2010-01-10'), 1, 1)")
distributed.query(
"CREATE TABLE proxy_insert (date Date, id UInt32, value Int32) ENGINE = Distributed(test_cluster, default, sometable_insert, toUInt64(date));")
node1.query("ALTER USER shard SETTINGS max_memory_usage = 50000000 MIN 11111111 MAX 99999999")
node2.query("ALTER USER shard SETTINGS max_memory_usage = 50000000 MIN 11111111 MAX 99999999")
distributed.query("INSERT INTO proxy VALUES (toDate('2020-02-20'), 2, 2)")
distributed.query("INSERT INTO proxy VALUES (toDate('2020-02-21'), 2, 2)", settings={"max_memory_usage": 5000000})
distributed.query("SYSTEM FLUSH DISTRIBUTED proxy")
assert_eq_with_retry(distributed, "SELECT COUNT() FROM proxy", "4")
distributed.query("INSERT INTO proxy_insert VALUES (toDate('2020-02-20'), 2, 2)")
distributed.query("INSERT INTO proxy_insert VALUES (toDate('2020-02-21'), 2, 2)", settings={"max_memory_usage": 5000000})
distributed.query("SYSTEM FLUSH DISTRIBUTED proxy_insert")
assert_eq_with_retry(distributed, "SELECT COUNT() FROM proxy_insert", "4")

View File

@ -24,7 +24,8 @@ do
if ! kill -0 -- $bg_query
then
>&2 echo "The SELECT sleep(1) query finished earlier that we could grep for it in the process list, but it should have run for at least one second. Looks like a bug"
# The SELECT sleep(1) query finished earlier that we could grep for it in the process list, but it should have run for at least one second. It is Ok.
break
fi
done
@ -47,7 +48,8 @@ do
if ! kill -0 -- $bg_query
then
>&2 echo "The SELECT sleep(1) query finished earlier that we could grep for it in the process list, but it should have run for at least one second. Looks like a bug"
# The SELECT sleep(1) query finished earlier that we could grep for it in the process list, but it should have run for at least one second. It is Ok.
break
fi
done

1
website/data/.gitkeep Normal file
View File

@ -0,0 +1 @@
# This directory will contain miscellaneous data files on ClickHouse website