@clickhouse_ru

Страница 418 из 723
Артемий
12.02.2018
10:46:43
Если число соединений между серверами будет больше чем max_distributed_connections, выкинется исключение или запросы встанут в очередь?

Stanislav
12.02.2018
10:47:13
И, кстати, где их лучше смотреть?

Tima
12.02.2018
10:54:20
Если число соединений между серверами будет больше чем max_distributed_connections, выкинется исключение или запросы встанут в очередь?
Насколько я знаю, в КХ нет механизма очереди запросов, советуют использовать http://www.proxysql.com/blog/proxysql-143-clickhouse

Артемий
12.02.2018
10:58:41
Спасибо за полезную ссылку

Google
Roman
12.02.2018
11:16:36
Спасибо за полезную ссылку
Попробуйте использовать https://github.com/Vertamedia/chproxy Прокси умеет выстраивать запросы в очередь при превышении лимитов, и потом выполнять их последовательно

Alexey
12.02.2018
11:17:15
у кого последний кликхаус, у вас во внешнем словаре также? SELECT last_exception, source FROM system.dictionaries WHERE last_exception != '' ┌─last_exception─────────────────────────┬─source─┐ │ MySQL: db.table │ │ │ MySQL: db.table │ │

в last_exception у него прописано MySQL: db.table, а в source пусто

перепутано местами?

Kirill
12.02.2018
11:20:58
да, где-то уже делали правку

Alexey
12.02.2018
11:30:36
Alex
12.02.2018
12:36:38
Если число соединений между серверами будет больше чем max_distributed_connections, выкинется исключение или запросы встанут в очередь?
max_distributed_connections отвечает за количество одновременных соединений к шардам при исполнении одного Distributed запроса. Если их будет больше, запросы просто выполнятся последовательно. Дефолтное значение - 1024, что более чем достаточно даже для самых больших кластеров :) Но возможно вы имели в виду настройку max_concurrent_queries_for_user, которая как раз отвечает за максимальное количество пользовательских запросов?

Konstantin
12.02.2018
12:38:17
Подсобите пожалуйста, как понимать эту ошибку DB::Exception: Cannot parse input: expected \n before: .0\n2018-02-12\t �2 12:18:35\t6072736\t12208345\t22832753\t2140497316\t3207009083\t02a7 31a�: (at row 1)

Alexey
12.02.2018
12:45:58
в инсерте и в файлике не совпадает колво колонок

Alex
12.02.2018
12:53:28
Нет, не будет. А вы хотите его уменьшить?

Google
Alex
12.02.2018
12:57:48
Доброго утра всем, вопрос такой, был ли у кого тут опыт с CH odbc + tableau? насколько хорошо работает и какие проблемы всплывали?
На недавнем митапе был доклад: https://youtu.be/7Wcq6_9727A?t=24m59s Вкратце: в целом работает, но есть множество проблем с парсингом запросов, которые генерирует tableau. Проблемы постепенно исправляем, недавно был новый релиз odbc-драйвера: https://github.com/yandex/clickhouse-odbc/releases

Артемий
12.02.2018
12:58:20
Нет, не будет. А вы хотите его уменьшить?
Нет, я хочу правильно построить логику приложения и обработку ошибок.

Alex
12.02.2018
12:59:49
С дефолтным значением 1024 и если у вас в кластере меньше 1024 шардов, вы в этот лимит никогда не упрётесь.

Vasilij
12.02.2018
13:04:06
Так может быть, если реплики подключаются к разным кластерам ZooKeeper (например, ноды ZK сконфигурированы независимо и не собраны в кластер). Для работы Replicate таблиц конфигурировать кластера (тэг <remote_servers>) необязательно, достаточно сконфигурировать ZooKeeper.
Я первоначально так и думал. Вдобавок, после описания кластера КХ все равно ничего не работало. Но тут всплыл целый ворох проблем с Zookeeper, действительно, оказалось, что дело в ошибках в его конфигурации.

Артемий
12.02.2018
13:08:09
max_distributed_connections по умолчанию установлено в 100 (если документация актуальна). Обработка исключение в любом случае должна быть.

Alex
12.02.2018
13:12:13
Ага, значит в документации ошибка, спасибо. У себя значение можете проверить запросом select * from system.settings where name = 'max_distributed_connections'. Исключения, как я уже говорил, не будет.

Артемий
12.02.2018
13:20:49
Alex
12.02.2018
13:23:18
Результат будет правильный, но запрос будет выполнен медленнее - в меньшее число потоков. Пример: у нас 4 шарда, max_distributed_connections=2. Значит запрос будет выполнен в 2 потока, сначала на двух шардах, потом на двух оставшихся.

Alex
12.02.2018
13:46:55
День добрый, коллеги. Не могу понять как работает сжатие в CH. min_part_size и min_part_size_ratio проверяются с условием AND или OR? Перелили 700 ГБ сырых данных из Vertica с кастомным партицированием по неделям. сжалось только на 10%. В вертике сжимает В три(3) раза ? наши параметры: <clickhouse_compression> <case> <min_part_size>100000000</min_part_size> <min_part_size_ratio>0.01</min_part_size_ratio> <method>lz4</method> </case> </clickhouse_compression>
Проверяются с условием AND. По дефолту компрессия lz4, а значит такие параметры, как у вас, ничего не должны менять. Эти настройки имеет смысл устанавливать, чтобы попробовать zstd (только на больших кусках, или вообще на всех). Можно ещё попробовать покрутить схему данных (используемые типы и выражение сортировки).

Ну и например для time-series данных, оптимальные схемы компрессии пока что не реализованы.

Jen
12.02.2018
14:39:24
подскажите, где можно найти описание настроек (SETTINGS при создании таблицы/вьюшки) конкретного движка?

Kirill
12.02.2018
14:41:13
Jen
12.02.2018
14:42:57
что то я вот там не вижу настройку, в которой можно было бы указать поля для суммирования для SummingMT

Kirill
12.02.2018
14:44:26
Понял, но это не в настройках

Пример Engine = ReplicatedSummingMergeTree('/clickhouse/tables/{shard}/table', '{replica}', ( field1, field2 ... ) )

Jen
12.02.2018
14:45:41
это знаю, но не подходит

я хочу кастомный ключ партиционирования

Google
Jen
12.02.2018
14:45:55
) ENGINE = SummingMergeTree() PARTITION BY month ORDER BY (month, subscriber, service, protocol, src_ip, src_port, dest_ip, dest_port) SETTINGS ;

и как здесь указать поля теперь?

Kirill
12.02.2018
14:46:55
SummingMergeTree( (field, field2) )

Jen
12.02.2018
14:47:19
спасибо, сейчас попробую

Константин
12.02.2018
14:48:01
добрый день!

происходят какие-странности на кластере

делали бэкап

и теперь пытаюсь его накатить назад

в бэкап таблице 56млн записей

после insert from select - в конечной таблице - всего 28млн записей

что делать? в какую сторону смотреть?

Alexey
12.02.2018
14:50:34
репликация, distributed, вот это все - как настроено?

Константин
12.02.2018
14:50:55
2 шарда в каждой 2 реплики

дистрибутед таблица на всех нодах

Alexey
12.02.2018
14:51:16
может у вас в distributed 56 млн, а бэкап только 1 шарда делали, и поэтому половина?

Константин
12.02.2018
14:51:32
нет, бэкап делался с дистриба

чтобы собрать все данные

и заливается обратно в дистриб

Alexey
12.02.2018
14:52:18
а в дампе, в котором бэкап, точно 56 млн строк?

Константин
12.02.2018
14:53:26
да

Google
Alexey
12.02.2018
14:54:39
а локальные таблицы какой движок

попробуйте сделать рядом MergeTree без репликации и туда залить, будет ли там 56 млн, если да, значит по каким-то причинам отбрасываются дубли может быть

еще баг был, чинили в 54337: Исправлена работа дедупликации блоков после DROP или DETATH PARTITION. Раньше удаление партиции и вставка тех же самых данных заново не работала, так как вставленные заново блоки считались дубликатами.

Константин
12.02.2018
14:56:51
бэкап был сделан в mergetree

основная таблица Distributed поверх ReplicatedMergeTree

SELECT count() FROM vast_tracking_backup_201802 ┌──count()─┐ │ 56452175 │ └──────────┘ 1 rows in set. Elapsed: 0.017 sec. Processed 56.45 million rows, 56.45 MB (3.26 billion rows/s., 3.26 GB/s.) :) select min(date) from vast_tracking_backup_201802; SELECT min(date) FROM vast_tracking_backup_201802 ┌──min(date)─┐ │ 2018-02-01 │ └────────────┘

SELECT count() FROM vast_tracking WHERE date >= '2018-02-01' ┌──count()─┐ │ 28228926 │ └──────────┘

после восстановления

брррррр

Kirill
12.02.2018
15:00:59
А в /var/lib/clickhouse/data/vast_tracking что-нибудь есть? Там данные могут до одного шарда не доехать, можно в system.replication_queue посмотреть

Константин
12.02.2018
15:01:12
данные только на одном шарде

второй пустой

походу репликация умерла

хотя как-то странно

Kirill
12.02.2018
15:53:13
Константин
12.02.2018
16:19:06
Еще ни как...

Артемий
12.02.2018
16:32:42
Я верно понимаю, что JOIN сейчас полностью грузят "правую" таблицу при каждом запросе и ее имеет смысл помещать в движок JOIN, выделя под это необходимое количество оперативки (сейчас ее размер 2 ГБ в сжатом состоянии). В таблице хранятся строки (по типу имен пользователей), их около 100 млн, количество будет расти. JOIN идет по primary, но лог показывает, что читаются все строки, ключ не испоьзуется?

Yuran
12.02.2018
16:50:23
Я верно понимаю, что JOIN сейчас полностью грузят "правую" таблицу при каждом запросе и ее имеет смысл помещать в движок JOIN, выделя под это необходимое количество оперативки (сейчас ее размер 2 ГБ в сжатом состоянии). В таблице хранятся строки (по типу имен пользователей), их около 100 млн, количество будет расти. JOIN идет по primary, но лог показывает, что читаются все строки, ключ не испоьзуется?
PRIMARY ключ в ClickHouse всё равно не позволяет по одной строчке получать нужные значения, для этого нужно загрузить целый блок, и ещё и другие колонки прочитать. Поэтому результат запроса и читается целиком в память при выполнении JOIN. Но ИМХО лучше использовать словари, чем JOIN-таблицы, потому что их нужно каждый раз наполнять при рестарте.

Konstantin
12.02.2018
16:51:34
Подсобите пожалуйста, как понимать эту ошибку DB::Exception: Cannot parse input: expected \n before: .0\n2018-02-12\t �2 12:18:35\t6072736\t12208345\t22832753\t2140497316\t3207009083\t02a7 31a�: (at row 1)
Оказалось следующее. Я работаю через clickhouse-jdbc. Создаю PreparedStatement и пишу в базу батчи - в этом случае, если в UInt32 колонку пытаться сохранить Double - ругается вот таким сообщением, которое я вставил выше

Yuran
12.02.2018
16:52:48
@milovidov_an может быть ограничить максимальный размер запроса, который может быть обработан полноценным парсером, чтобы избежать ошибок, как указано выше?

Google
Konstantin
12.02.2018
16:53:08
Если без батча, просто инсертить, сохраняется без ошибки

И через терминальный клиент тоже сохраняется

Это повод написать баг репорт ?

Yuran
12.02.2018
16:54:25
Если без батча, просто инсертить, сохраняется без ошибки
А вы через HTTP инсертите? Попробуйте добавить опцию input_format_values_interpret_expressions=0 в GET-параметрах, будут такие же ошибки?

Konstantin
12.02.2018
17:14:31
@Yuran нет, через JDBC и через терминальный клиент

http не пробовал

подытоживаю, вставляю Double в UInt32 колонку. Единичными инсертами через клиент командной строки и через JDBC сохраняется без проблем, а вот батчами (через JDBC) возникает ошибка, которую не легко с ходу прочесть и понять Caused by: java.lang.Throwable: d���U������R������WCode: 27, e.displayText() = DB::Exception: Cannot parse input: expected \n before: .0\n: (at row 1)

Roman
12.02.2018
17:25:44
Добрый день. При попытке экспорта даже с 1 строкой из CSVWithNames вида: "time","eventId","bannerId","idfa","platformId","hostId","ghostId","showId","userIp","param","gparam","answers","userAgent","referer","watchId","videoId","gparam2","date" 1486680824,3102,1881,"1486680749_5573035",2,248320,7617,14866808026836266,3116063728,"",30000138,"","","","","","","2017-02-09" 1486640392,3021,1881,"1486620643_2969813",2,248320,7617,148664039161868380,3116063696,"","","","","","","","","2017-02-09" Падает с ошибкой Code: 27. DB::Exception: Cannot parse input: expected , before: \n1486680824,3102 Больше ничего информативного в логах нет, в чем может быть еще проблема?

Константин
12.02.2018
17:28:59
Смогли оживить?
2018.02.12 20:25:46.818979 [ 35 ] <Error> vast_tracking.Distributed.DirectoryMonitor: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof, e.what()

лог на этой ноде усыпан такими ошибками

Roman
12.02.2018
17:30:12
Вы видимо импортируете CSV в Clickhouse. И у вас в CSV меньше полей, чем в таблице.
да, не экспорт конечно, а импорт. Обязательно все поля указывать? дефолтные значения не установит?

Vladimir
12.02.2018
17:33:16
да, не экспорт конечно, а импорт. Обязательно все поля указывать? дефолтные значения не установит?
Тогда нужно явно указать в какие столбцы вы планируте вставлять имеющиеся данные insert into table (f1, f2, f3)

Константин
12.02.2018
17:40:21
@milovidov_an поможете разобраться? При заливе в дистрибьютед таблицу - данные сторятся только на той шарде - куда был сделана вставка

Roman
12.02.2018
17:41:06
Тогда нужно явно указать в какие столбцы вы планируте вставлять имеющиеся данные insert into table (f1, f2, f3)
Спасибо, вроде помогло, осталось теперь с эксейпами корректными разобраться

Kirill
12.02.2018
17:49:26
@Yuran нет, через JDBC и через терминальный клиент
JDBC через HTTP ходит, а вот клиент использует нативный формат

Константин
12.02.2018
17:50:08
вот накопал такую информацию из лога

2018.02.12 20:50:08.804323 [ 19 ] <Trace> vast_tracking.Distributed.DirectoryMonitor: Started processing /var/lib/clickhouse/data/default/vast_tracking/default@192%2E168%2E0%2E22:9000/55884.bin 2018.02.12 20:50:08.845003 [ 19 ] <Error> vast_tracking.Distributed.DirectoryMonitor: Code: 32, e.displayText() = DB::Exception: Attempt to read after eof, e.what() = DB::Exception, Stack trace:

лог с нода в первом шарде

/default@192%2E168%2E0%2E22:9000 - это нода второго шарда

я зашел сюда: /var/lib/clickhouse/data/default/vast_tracking/default@192%2E168%2E0%2E22:9000/

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