
Kirill
29.08.2017
09:06:01
в users запихать

Maksim
29.08.2017
09:07:07
а, это позволит для каждого юзера такую опцию выставить?


Kirill
29.08.2017
09:07:40
да
<?xml version="1.0"?>
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<log_queries>1</log_queries>
<!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
<use_uncompressed_cache>0</use_uncompressed_cache>
<load_balancing>random</load_balancing>
</default>
<worker>
<log_queries>1</log_queries>
<max_memory_usage>45000000000</max_memory_usage>
<max_bytes_before_external_sort>15000000000</max_bytes_before_external_sort>
<max_bytes_before_external_group_by>15000000000</max_bytes_before_external_group_by>
<distributed_aggregation_memory_efficient>1</distributed_aggregation_memory_efficient>
<use_uncompressed_cache>0</use_uncompressed_cache>
<load_balancing>random</load_balancing>
</worker>
<api>
<log_queries>1</log_queries>
<max_memory_usage>5000000000</max_memory_usage>
<max_bytes_before_external_sort>3000000000</max_bytes_before_external_sort>
<max_bytes_before_external_group_by>3000000000</max_bytes_before_external_group_by>
<distributed_aggregation_memory_efficient>1</distributed_aggregation_memory_efficient>
<use_uncompressed_cache>1</use_uncompressed_cache>
<load_balancing>random</load_balancing>
<readonly>1</readonly>
</api>
</profiles>


Maksim
29.08.2017
09:08:28
ага

Google

Maksim
29.08.2017
09:08:35
ну мне это глобально тоже будет норм
а вот про юзеров спасибо

Vladislav
29.08.2017
09:09:31
а кто-нибудь менял метод сжатия? как работает?

Aleksey
29.08.2017
09:15:27
@kshvakov приветствую! подскажите, пожалуйста, после обновления драйвера переодически стал получать вот такую ошибку scannable dest type int with \u003e1 columns (4) in result. Использую sqlx. Это может быть связано с обновлением драйвера?

Kirill
29.08.2017
09:20:22
да, может, сейчас посмотрю
какой запрос ? Там получается что сканить нужно в int, но в результате есть 4 колонки

Oleh
29.08.2017
12:35:57
Добрый день!
Подскажите пожалуйста по-поводу хранения данных.
Я храню реквесты построчно, у каждого реквеста свой id. Так же в каждой строчке есть поле geo_country. Каждые 5 минут я делаю аггрегацию, где схлопываю все реквесты и храню только количество.
А вот как поступить с аггрегацией гео я не знаю, потому-что каждых 5 минут мы имеем например US: 100 requests, UK: 50 requests.
Какой тип данных в clickhouse можно использовать?

papa
29.08.2017
12:39:06
а вы эти данные агрегируете чтобы что с ними потом делать?

Aleksey
29.08.2017
12:39:09
@kshvakov
SELECT count() as count FROM (
SELECT DISTINCT arrayJoin(groups.id) as hash FROM table FINAL
WHERE 1=1
AND value_hash = 416243762347354
)
а в другой рутине действительно идет запрос на выборку четырех колонок.

Oleh
29.08.2017
12:39:58

Kirill
29.08.2017
12:40:16

papa
29.08.2017
12:40:48

Aleksey
29.08.2017
12:42:24
ok, попробую воспроизвести
притом, приложение нормально работает в проде в течение пары дней, потом начинаются такие проблемы. перезаливка опять нивелирует эти проблемы.

Google

Oleh
29.08.2017
12:44:01
да, таблица типа такая:
item_id, date, date_time (тут пятиминутки), requests_count, price_sum, geo_country_data, device_type_data
и получается что можно было бы сделать конечно geo_country_name и geo_country_count и писать для каждой страны свою строчку аггрегации, но добавляется так же другие поля как устройство и тд

papa
29.08.2017
12:44:46
куда добавляются другие поля?

Oleh
29.08.2017
12:46:47
все поля есть в построчной таблице, может быть например
request_id date country device
1 2017-08-29 US desktop
2 2017-08-29 UK desktop
3 2017-08-29 US mobile
4 2017-08-29 US desktop
текущий аггрегат такой:
date_time requests
2017-08-29 15:10:00 4
2017-08-29 15:15:00 15

Kirill
29.08.2017
12:47:06

Aleksey
29.08.2017
12:49:28

papa
29.08.2017
12:50:03

Kirill
29.08.2017
12:50:47

Oleh
29.08.2017
13:20:32

Dig
29.08.2017
13:52:15
Кто использует Zookepper, гляньте плиз, есть ли у вас такие пути.

Александр
29.08.2017
13:55:18
А что за GUI если не секрет?

Dig
29.08.2017
13:55:22
zkCli валится при попытке удалить ноду stat, команда ls /clickhouse/tables/01/stat/log тоже падает

Александр
29.08.2017
13:56:03

Igor
29.08.2017
13:58:42

Dig
29.08.2017
14:03:33

Igor
29.08.2017
14:06:06
Мы сегодня рестаротовали кластер CH - чтобы уменьшить снапшот ZK - что бы тот не упал
После перезапуска размер упал с нескольких ГБ до нескольких мега

Oleg Bazdyrev
29.08.2017
14:17:06
что может означать ошибка Duplicate interserver IO endpoint: DataPartsExchange: ?

Dig
29.08.2017
14:34:56
Кто использует Zookepper, гляньте плиз, есть ли у вас такие пути.
Получилось как- был реплицируемый мат.вью (stat) на основную таблицу. По непонятным причинам данные во вью и основной таблице разъехались. Решили дропнуть mat.view, и пересоздать. Но после drop table stat, в Zookepere осталась нода с данными вьюхи. Хотя сама таблица stat удалилась на СН серверах. Решили руками удалить эту ноду, но наткнулись на непонятный путь (* Exception *). Из-за него не возможно удалить ноду, и соответственно пересоздать вью.
Запрос "SELECT count() FROM system.zookeeper WHERE path = '/clickhouse/tables/01/stat/log' возвращает 286000

Igor
29.08.2017
15:21:51

Google


Alexey
29.08.2017
17:33:57
Блин, второй день бьюсь - понять не могу. Собираю кластер с такими конфигами
https://gist.github.com/count0ru/e0bb494634b3edaaf68fad948a811e03
делаю базу на одной из нод
create database test;
Потом пытаюсь добавить таблицу шардированную
CREATE TABLE test.testTable_sharded
(
event_date Date DEFAULT toDate(event_time),
event_time DateTime DEFAULT now(),
body_id Int32,
viwes Int32
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/test/testTable_sharded', '02', event_date, (event_time, body_id), 1892);
пишет что
Can't create replicated table without ZooKeeper
что не так? Запрос на CREATE TABLE, или у меня действительно зукипер не работет просто?
Это значит, что конфигурация zookeeper некорректная - либо в нужном месте в конфиге вовсе нет описания zookeeper, либо сервер не может к нему подключиться.
Для начала, посмотрите в config-preprocessed.xml. Там должна быть подставленная конфигурация zookeeper, вида:
<zookeeper optional="true">
<node>
<host>zoo01.example.net</host>
<port>2181</port>
</node>
<node>
<host>zoo02.example.net</host>
<port>2181</port>
</node>
<node>
<host>zoo03.example.net</host>
<port>2181</port>
</node>
</zookeeper>
Потом посмотрите в лог. Если сервер не может подключиться к ZK, он это напишет.


Dmitry
29.08.2017
17:38:16
Спасибо
Собственно, не подхватывался конфиг


Alexey
29.08.2017
17:39:44
У кого есть опыт хранения айпишников в clickhouse.... В каком типе вы их храните?
В Яндекс.Метрике мы храним IPv6 в FixedString16. Если заход был с IPv4 адреса, то в это поле записывается адрес, отображённый на IPv6.
Также дополнительно у нас есть отдельный столбец, в котором хранится только IPv4 в UInt32. Если заход был с IPv6, то туда пишется ноль. В случаях, когда нужно показывать только IPv4 адреса, использование этого столбца достаточно.


Igor
29.08.2017
17:51:30

Alexey
29.08.2017
17:55:29

Andrew
29.08.2017
17:59:51

Yurij
29.08.2017
18:00:32
Добрый день. хочу рассмотреть clickhouse как column oriented dbms для проекта. у нас будет большая таблица и около 260-520 колонок. но вот по этим колонкам нужно уметь выбирать (где то в запросах будут учавствовать 16-32 колонок, причём от запроса к запросу набор колонок разный, определяется в runtime). собственно хочется для большого набора отдельных колонок иметь отдельные индексы. есть по этому поводу какой нибудь engine? или с такими запросами не к clickhouse


Alexey
29.08.2017
18:09:15
Получилось как- был реплицируемый мат.вью (stat) на основную таблицу. По непонятным причинам данные во вью и основной таблице разъехались. Решили дропнуть mat.view, и пересоздать. Но после drop table stat, в Zookepere осталась нода с данными вьюхи. Хотя сама таблица stat удалилась на СН серверах. Решили руками удалить эту ноду, но наткнулись на непонятный путь (* Exception *). Из-за него не возможно удалить ноду, и соответственно пересоздать вью.
Запрос "SELECT count() FROM system.zookeeper WHERE path = '/clickhouse/tables/01/stat/log' возвращает 286000
Много узлов в log накапливается, если одна из реплик долго находится в неактивном состоянии. Эти ноды сохраняются для того, чтобы эта реплика могла подняться и синхронизироваться.
То есть, если у вас было несколько реплик, а потом один из серверов просто перестал работать, то до поднятия упавшей реплики, будут накапливаться ноды. Если реплика упала навсегда, то её придётся удалить из ZK вручную.
(Это одна из неудобных особенностей. С изменениями в версии 1.1.54276 это не связано.)
Вы пытаетесь сделать это в некотором интерфейсе, но он кидает исключение. Потому что не может получить большой список нод. Это проблема того интерфейса, с помощью которого вы пытаетесь удалить ноды.
Чтобы всё-таки всё по-нормальному сделать, придётся воспользоваться каким-то другим интерфейсом. Через zkCli.sh получается?
На крайний случай у нас есть специальная программа, которая может быстро удалить список нод... Если понадобится - расскажем, как воспользоваться.

Google

Alexey
29.08.2017
18:19:48


Evgeniy
29.08.2017
18:23:18
Привет! Пробую новый тип UUID. Имею следующие проблемы.
> select distinct(uuid) from (
> select toUUID(1) as uuid union all select toUUID(1)
> )
DB::Exception: Logical error: numeric column has sizeOfField not in 1, 2, 4, 8.
> select uniqExact(uuid) from (
> select toUUID(1) as uuid union all select toUUID(1)
> )
DB::Exception: Illegal type UUID of argument for aggregate function uniqExact
Есть какое то решение?

Alexey
29.08.2017
18:29:28

Алексей
29.08.2017
18:29:58
Господа, а где бы почитать какие настройки требуют обязательного рестарта кликхауса?
есть некоторое ощущение фрагментированности этого момента

Alexey
29.08.2017
18:33:36
Проще перечислить, какие настройки не требуют перезапуска:
- конфиги словарей;
- описания кластеров;
- настройки в users.xml (кроме отдельных, которые имеют эффект при старте сервера - background_pool_size);


Alexandr
29.08.2017
18:34:59
есть таблица src и Summing MV на неё src_country
CREATE TABLE default.src (
date Date,
datetime DateTime,
userId UInt64,
countryId UInt8,
typeId UInt8
) ENGINE = MergeTree(date, (userId, datetime), 8192)
CREATE MATERIALIZED VIEW default.src_country
(
date Date,
datetime DateTime,
userId UInt64,
recordsByCountryMap Nested(
countryId UInt8,
records UInt64
)
)
ENGINE = SummingMergeTree(date, (date, datetime, userId), 8192)
AS
SELECT
date,
toStartOfMinute(datetime) AS datetime,
userId,
[countryId] as recordsByCountryMap.countryId,
[count()] AS recordsByCountryMap.records
FROM default.src
GROUP BY
date,
datetime,
userId,
countryId
В документации движка SummingMergeTree указано, что производится суммирование для столбцов заканчивающихся на 'Map'.
Но если данные вставлены в разных пачках, то их суммирует только optimize либо они сами "когда-то" просуммируются.
Вопрос - есть ли агрегирующая функция, которая сложит соотвествующие значения по ключам? Или до-агрегацию в таком случае производить на стороне клиента в коде?
Пример:
SELECT *
FROM src_country
┌───────date─┬────────────datetime─┬─userId─┬─recordsByCountryMap.countryId─┬─recordsByCountryMap.records─┐
│ 2017-01-01 │ 2017-01-01 00:00:00 │ 1 │ [10] │ [4] │
└────────────┴─────────────────────┴────────┴───────────────────────────────┴─────────────────────────────┘
┌───────date─┬────────────datetime─┬─userId─┬─recordsByCountryMap.countryId─┬─recordsByCountryMap.records─┐
│ 2017-01-01 │ 2017-01-01 00:00:00 │ 1 │ [10] │ [4] │
└────────────┴─────────────────────┴────────┴───────────────────────────────┴─────────────────────────────┘
┌───────date─┬────────────datetime─┬─userId─┬─recordsByCountryMap.countryId─┬─recordsByCountryMap.records─┐
│ 2017-01-01 │ 2017-01-01 00:00:00 │ 1 │ [10,11] │ [4,3] │
└────────────┴─────────────────────┴────────┴───────────────────────────────┴─────────────────────────────┘
SELECT
datetime,
groupArray(recordsByCountryMap.countryId),
groupArray(recordsByCountryMap.records)
FROM src_country
WHERE userId = 1
GROUP BY datetime
┌────────────datetime─┬─groupArray(recordsByCountryMap.countryId)─┬─groupArray(recordsByCountryMap.records)─┐
│ 2017-01-01 00:00:00 │ [[10],[10],[10,11]] │ [[4],[4],[4,3]] │
└─────────────────────┴───────────────────────────────────────────┴─────────────────────────────────────────┘
@milovidov_an можете с этим помочь? Нашел в исходниках хитрый *ForEach модификатор, попробовал с sumForEach, делает почти то, что нужно, но вероятно не учитывает по каким ключам происходит суммирование.
Смотрел также на groupArrayInsertAt, sequenceMatch но похоже не то.


papa
29.08.2017
18:37:50
суммирование происходит не по ключам, а по индексам в массиве

Alexey
29.08.2017
18:38:33
Вопрос в том, какой агрегатной функцией можно просуммировать пару массивов, в первом из которых записаны "ключи", а во втором "счётчики".
Проще всего сначала сделать ARRAY JOIN recordsByCountryMap, далее GROUP BY recordsByCountryMap.countryId и считать sum(recordsByCountryMap.records).
Так вы получите результаты в развёрнутом виде.

Алексей
29.08.2017
18:39:44

Alexandr
29.08.2017
18:41:40
В таблице 7 столбцов Nested map, array join не прокатит, он только для одного сработает.

Alexey
29.08.2017
18:41:55

Алексей
29.08.2017
18:42:35
да я понял логику. просто в процедуру раската не просто занунуть такую кастомную логику.

Alexey
29.08.2017
18:43:30

Алексей
29.08.2017
18:43:45
да мой случай.

Alexey
29.08.2017
18:44:06

Александр
29.08.2017
20:35:06
Блин...
SELECT
toDate(passedDate) AS passedDate,
count() AS learners
FROM
(
SELECT *
FROM learners
WHERE (learnerId = 2) AND (passed = 1)
ORDER BY version DESC
LIMIT 1 BY version
)
GROUP BY passedDate
ORDER BY passedDate ASC
Received exception from server:
Code: 10. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Not found column version in block. There are only columns: passedDate.
Простой запрос, а боли много ))
Причем не важно, меняю я звездочку на passedDate, version или нет, все равно такая же ошибка

Google

Александр
29.08.2017
20:35:48
Таблица ReplacingMergeTree
Структура таблицы такая CREATE TABLE default.learners ( fakePartitionKey Date, courseId UInt32, learnerId UInt32, progress Float32, result Float32, passed UInt8, passedDate DateTime, version DateTime) ENGINE = ReplacingMergeTree(fakePartitionKey, (courseId, learnerId), 8192, version)
А вот такой запрос уже работает.
SELECT
count(version),
toDate(passedDate) AS passedDate,
count() AS learners
FROM
(
SELECT *
FROM learners
WHERE (learnerId = 2) AND (passed = 1)
ORDER BY version DESC
LIMIT 1 BY version
)
GROUP BY passedDate
ORDER BY passedDate ASC
Сервер версии 1.1.54282

Alexey
29.08.2017
20:40:51
Действительно - неправильное удаление ненужных столбцов из подзапроса.

Александр
29.08.2017
20:41:12
Там правда не совсем правильный limit by ) там должен быть learnerId вместо version, но это ничего не меняет по сути )
Впринципе планируется всегда считать learnerId поэтому limit 1 by learnerId по этой колонке все спасает, но факт будут кейсы, когда такой номер не пройдет )

Alexey
29.08.2017
20:42:24
Да, у нас баг. Воспроизвёл таким запросом:
SELECT sum(x) FROM (SELECT x, y FROM (SELECT number AS x, number + 1 AS y FROM system.numbers LIMIT 10) ORDER BY y LIMIT 1 BY y)

Александр
29.08.2017
20:55:35
Да, я давно про него знаю :) Писал issue в github'e ) Просто в очередной раз напоролся ( Я помню, что вы говоили, что его достаточно объемно фиксить

Alexey
29.08.2017
20:57:07
Вот эту вещь вроде бы просто исправить.

Александр
29.08.2017
20:59:45
Нашел :)
http://img.facedsid.ru/0skgs.jpg
Мне показалось, что там много работы )

Alexey
29.08.2017
21:00:10
Я сейчас выяснил, что это другая ошибка.

Александр
29.08.2017
21:00:31
:) Запостить issue?

Alexey
29.08.2017
21:01:40
Можно, хотя я уже создал внутри...

Александр
29.08.2017
21:03:25
Спасибо большое! Будем с нетерпением ждать фикса.

Dmitrii
29.08.2017
21:03:57
quick question: есть ли критические отличия, версии 1.1.54284 от предыдущей 283-й? стоит обновиться асап?

Alexey
29.08.2017
21:15:50
В 54283 на самом деле не было исправлено удаление нод. Исправлено только в 1.1.54284.