@clickhouse_ru

Страница 244 из 723
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
а вы эти данные агрегируете чтобы что с ними потом делать?
делать запросы по ним. Например сколько за месяц мы получили запросов из конкретных стран

papa
29.08.2017
12:40:48
делать запросы по ним. Например сколько за месяц мы получили запросов из конкретных стран
то есть это у вас такая таблица с колонками "5минут" "страна" "количество"?

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
притом, приложение нормально работает в проде в течение пары дней, потом начинаются такие проблемы. перезаливка опять нивелирует эти проблемы.
можете куда-нибудь выложить пример того как у вас там запросы обрабатываютя, прям куском кода чтоб было видно где Query открываются и в горутины распихиваются, если делать query от Tx в разных горутинах то может быть все что угодно

papa
29.08.2017
12:50:03
все поля есть в построчной таблице, может быть например 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
если вы хотите а) группировать по какому-то набору колонок б) фильтровать по какому-то набору колонок в) непременно положить все в агрегированную табличку, то в этой табличке должны быть данные, агрегированные по всем потенциально используемым колонкам. или у вас должно быть какое-то множество таблиц, с нужными подмножествами из них.

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
Exhibitor
Спасибо!

Igor
29.08.2017
13:58:42
Кто использует Zookepper, гляньте плиз, есть ли у вас такие пути.
Если так спросить SELECT * FROM system.zookeeper WHERE path = '/clickhouse/tables/01/model/block_views_sharded/log' and name not like '%log%' limit 40 пусто

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

Google
Alexey
29.08.2017
17:33:57
Господа, в конфиге кх есть строки про компрессию <!— Uncomment if you want data to be compressed 30-100% better. Don't do that if you just started using ClickHouse. —> чем мотивирована вторая строка ?
Это мотивировано тем, что если для данных используется более сильное сжатие, то скорость выполнения простых запросов будет несколько меньше, в случае, если данные помещаются в page cache или если используется хорошая дисковая подсистема. То есть, для максимальной скорости, лучше не включать zstd безусловно, а только для старых данных.

Блин, второй день бьюсь - понять не могу. Собираю кластер с такими конфигами 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, он это напишет.

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

Назревает ситуация, когда имеющего объёма стораджа под кликхаус перестанет хватать и до апгрейда не дотянуть. Прокатит ли такой костыльный выход: отцепить N старых помесячных партиций (через detach?), складировать их файлы до лучших времён на других серваках, а после апгрейда вернуть на место? Все таблицы - MergeTree на одном сервере. Или есть более подходящие рецепты?
Да, если вы не будете делать ALTER MODIFY COLUMN. Также, если вы можете перенести партиции на другой сервер, то вы наверное также можете поставить на этот сервер ClickHouse и затем создать Distributed таблицу, которая смотрит на оба сервера. А если вы можете использовать шардирование (создать Distributed таблицы), то вы можете писать новые данные на новый шард, а старые никуда не переносить.

пробовал в глобальную секцию вставлять и в <default>
Настройки по-умолчанию задаются в users.xml в yandex/profiles/default.

Alexey
29.08.2017
17:55:29
а кто-нибудь менял метод сжатия? как работает?
Мы поменяли на одном из кластеров. Работает, сжимает...

Andrew
29.08.2017
17:59:51
Привет! Никто ещё не сделал kernel или magic для jupyter для ClickHouse? Я немного потерялся, вроде очевидная вещь, но ничего не нашел)
попытаю удачу и апну вопрос про Jupyter. https://github.com/catherinedevlin/ipython-sql ругается на то, что в запросе дописывается comit после запроса и до формата

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
что может означать ошибка Duplicate interserver IO endpoint: DataPartsExchange: ?
Возможно, вы случайно задали пустым параметр - путь в ZooKeeper, или задали его одинаковым для нескольких таблиц.

Получилось как- был реплицируемый мат.вью (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 Есть какое то решение?

Алексей
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). Так вы получите результаты в развёрнутом виде.

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

Alexey
29.08.2017
18:41:55
спасибо. тоесть в целом лучше сделать рестарт при изменениях в конфигурации чем не сделать его ?
Если можете сделать рестарт, то Ок. Но если меняете, например, настройки пользователей в users.xml, то не обязательно. Разве что можно иметь ввиду - настройки пользователей применяются к новым сессиям.

В таблице 7 столбцов Nested map, array join не прокатит, он только для одного сработает.
Непосредственно агрегатной функции для суммирования таких отображений в паре массивов, нет.

Алексей
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
В таблице 7 столбцов Nested map, array join не прокатит, он только для одного сработает.
Есть FINAL, но он мне не нравится, так как медленно работает.

Александр
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.

Страница 244 из 723