
Tima
01.08.2017
08:28:57
Я на такое наталкивался, пришлось отказаться от прямой вставки. Можно попробовать выгрузить данные в отсортированом виде на диск, а потом с диска их вставить через clickhouse-client

Kirill
01.08.2017
08:35:04
на этот случай у нас есть свои костыли, но хочется, конечно, сделать "одним" запросом


Диана
01.08.2017
11:09:51
Привет, кто нибудь хранит в кликхаусе деревья и каким шаблоном, таблицей связей?

Google

Roman
01.08.2017
11:39:39
Не поддерживает ли формат (col1, col2, col3) IN ( (1,2,3) ) wildcard, типа (1, 2, *)?

Maxim
01.08.2017
11:41:37

Alexey
01.08.2017
11:44:12

Vladimir
01.08.2017
11:44:33
Может кто подскажет как на 3 серверах сделать распределенную таблицу с репликацией?
Сделал 3 шарды и 2 реплики
создал таблицы на нодах так
1 » shard 1 replica 1, shard 2 replica 1
2 » shard 2 replica 1, shard 1 replica 2
1 » shard 2 replica 2, shard 3 replica 2
Поверх этого сделал Распределенную таблицу с rand() в качестве ключа шардирования
Как теперь проверить что все поднялось каак мне надо?

Alexey
01.08.2017
11:45:42

Alex
01.08.2017
11:46:31

Vladimir
01.08.2017
11:46:39
спсб
у меня явно что-то не поднялось :) SELECT * FROM system.clusters
SELECT *
FROM system.clusters
Ok.
0 rows in set. Elapsed: 0.001 sec.

Alex
01.08.2017
11:46:57
https://github.com/yandex/ClickHouse/blob/c90ea346ce9ef51886875b8f3f99c24c6c19c2e0/dbms/tests/integration/test_cross_replication/test.py

Vladimir
01.08.2017
11:50:17
спсб, буду разбираться.
вопрос по распределенной таблице
1. Читать можно с любого сервера рандомно или только с того где таблицу распределенную создали?
2. Писать рандомно в низлежащие таблицы? А как оно перешардироваться будет или если в качестве ключа rand() то ляжет как положили?

Google

papa
01.08.2017
11:56:25

.
01.08.2017
11:58:30
привет, как вы с геоданными работаете в кликхаусе? например, у меня есть широта и долгота и нужно в радиусе n всех найти // пока еще не использую кликхаус

papa
01.08.2017
12:01:03
ищем в эллипсе, примерно соответствущему этому кругу в декартовых координатах.
pointInEllipses()

Nikolai
01.08.2017
12:05:32

Vladimir
01.08.2017
12:06:31
А создавать распределенную таблицу только на одном сервере и читать только с него
или можно на каждом по распределенной таблице создать и читать со всех параллельно?

Nikolai
01.08.2017
12:08:41
можно на каждом

Vladimir
01.08.2017
12:08:55
круто
спсб
не могу понять почему в кластерах пусто
cat /etc/clickhouse-server/remote_servers.xml
<yandex>
<remote_servers>
<metrics>
<shard>
<!— Optional. Wheight for writing. Default is 1. —>
<weight>1</weight>
<!— Optional. Write to only 1 replic?. By default, false - write to all replics. —>
<internal_replication>true</internal_replication>
<replica>
<host>10.1.1.251</host>
<port>9000</port>
</replica>
<replica>
<host>10.1.1.86</host>
<port>9000</port>
</replica>
</shard>
SELECT count(*)
FROM Measures_Distributed
Received exception from server:
Code: 170. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Requested cluster 'metrics' not found.
0 rows in set. Elapsed: 0.020 sec.
:)
SELECT *
FROM system.clusters
Ok.
0 rows in set. Elapsed: 0.001 sec.
:)
сервер рестартовал

Alexey
01.08.2017
12:10:29
Переместите файл remote_servers.xml в
/etc/clickhouse-server/conf.d/

Vladimir
01.08.2017
12:11:09
понял, видимо пропустил в документации
ура спсб
SELECT *
FROM system.clusters
┌─cluster─┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name──┬─host_address─┬─port─┬─is_local─┬─user────┬─default_database─┐
│ metrics │ 1 │ 1 │ 1 │ 10.1.1.251 │ 10.1.1.251 │ 9000 │ 1 │ default │ │
│ metrics │ 1 │ 1 │ 2 │ 10.1.1.86 │ 10.1.1.86 │ 9000 │ 1 │ default │ │
│ metrics │ 2 │ 1 │ 1 │ 10.1.1.251 │ 10.1.1.251 │ 9000 │ 1 │ default │ │
│ metrics │ 2 │ 1 │ 2 │ 10.1.1.145 │ 10.1.1.145 │ 9000 │ 1 │ default │ │
│ metrics │ 3 │ 1 │ 1 │ 10.1.1.86 │ 10.1.1.86 │ 9000 │ 0 │ default │ │
│ metrics │ 3 │ 1 │ 2 │ 10.1.1.145 │ 10.1.1.145 │ 9000 │ 0 │ default │ │
└─────────┴───────────┴──────────────┴─────────────┴────────────┴──────────────┴──────┴──────────┴─────────┴──────────────────┘
6 rows in set. Elapsed: 0.004 sec.

Igor
01.08.2017
12:14:23

Evgeny
01.08.2017
13:22:33
Подскажите, есть 2 сервера конфигурация 2 шарда и 2 реплики - хочу чтобы чтение было с обоих серверов. В таком конфиге ведь чтение не обязательно будет идти с обоих серверов, как задать и возможно ли чтобы чтение было с двух серверов по возможности ?
<yandex>
<remote_servers>
<graphite>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>node1</host>
<port>9000</port>
</replica>
<replica>
<host>node2</host>
<port>9000</port>
</replica>
</shard>
</graphite>
</remote_servers>
</yandex>

Google

Nikolai
01.08.2017
13:28:16

Aleksander
01.08.2017
13:33:30
А у меня такой вопрос. Вот есть движок ReplacingMergeTree, а есть ли для него Replicated эквивалент? Для всего семейства движков MergeTree кроме Replacing нашёл упоминание в доке

Alex
01.08.2017
13:35:16

Aleksander
01.08.2017
13:36:09
ReplicatedReplacingMergeTree?

Alex
01.08.2017
13:38:22
так точно

Evgeny
01.08.2017
13:43:08
вроде как есть параметр load_balancing и in_order - не очень понятно как правильно прописать их

Vladimir
01.08.2017
13:56:30
Всем привет, используем таблицу ReplicatedReplacingMergeTree для схлопывания строк, и вот интересно, может ли она схлопывать записи с одинаковыми версиями? На практике видим, что не схлопывает, так и задумано? Или это будет меняться?

Oleksandr
01.08.2017
14:23:46

Tima
01.08.2017
14:25:34

Oleksandr
01.08.2017
14:26:04

Vladimir
01.08.2017
14:26:09
Да, испольузем dateTime - но в одну секунду может быть две записи

Evgeny
01.08.2017
14:26:17

Oleksandr
01.08.2017
14:27:13

Tima
01.08.2017
14:28:18

Vladimir
01.08.2017
14:28:42
нет миллисекунд у КХ :(

Oleksandr
01.08.2017
14:28:42

Tima
01.08.2017
14:30:20
А куда сюда http://joxi.ru/zANGZyRilwRdZr записывать отдельно? Я бы попробовал заменить DateTime на UInt64 и переводить дату вставки в дату в милисекундах

Vladimir
01.08.2017
14:30:38
Если только использовать UInt в качестве версии где оно равно timestamp*1000
Но опять же, а если эти значения одинаковые, вот вставили мы дубль случайно в терабайты данных?

Google

Vladimir
01.08.2017
14:31:57
все, группировать по уникальности только?

Tima
01.08.2017
14:33:13
UInt64 может такое хранить https://clickhouse.yandex/docs/ru/data_types/int_uint.html#uint
Т.е. можно конечно попробовать timestamp*1000 + что-то ещё зависящее от времени или версии строки

Виталий
01.08.2017
14:49:25
доброго дня, не смог найти самостоятельно, а есть ли в кликхауз аналог уникального автоинкрементируемого поля?

Tima
01.08.2017
14:50:33
Только если на уровне приложение его генерировать и там же проверять уникальность. Сам CH никак не умеется автоинкреемнтить. Так же не отслеживается уникальность строк по какому-либо полю. Исключение - движки семейства MergeTree - ReplaceMergeTree, CollapsingMergeTree и т.п. Но они не делают в прямом смысле то, что ожидается от уникального поля

Admin
ERROR: S client not available

Виталий
01.08.2017
14:55:29
спасибо за подробный ответ

Roman
01.08.2017
14:55:39
Я ловил что не схлопывает только в случае когда в КХ заинсертили всего один раз. Тогда у него всего один чанк, он ничего ни с чем не мерджит, соотвественно и схлопывания одинаковых ключей не происходит

Alex
01.08.2017
14:58:35

Roman
01.08.2017
14:58:43
да

Alex
01.08.2017
14:59:56
красиво, спасибо за информацию!

Nikolai
01.08.2017
15:01:10

Vladimir
01.08.2017
15:01:14

Roman
01.08.2017
15:02:41
со своим месяцем

Vladimir
01.08.2017
15:06:07

Nikolai
01.08.2017
15:08:34

Roman
01.08.2017
15:09:25
и положить кластер)
Ну вы же хотите убедиться что схлопнет записи с одинаковой версией? Иначе ждите штатного мерджа

Google

Evgeny
01.08.2017
15:10:37

Ilya
01.08.2017
15:44:12
Привет!
Есть задача:
Хранить в clickhouse как оперативные данные (на серверах с SSD), так и архивные (серваки с HDD). Как это правильно реализовать? Как-то использовать Distributed-движок?


Vladimir
01.08.2017
16:32:59
Скажите это нормально?
Запросы к 3 локальным таблицам
1 rows in set. Elapsed: 0.381 sec. Processed 3.26 billion rows, 6.51 GB (8.53 billion rows/s., 17.07 GB/s.)
1 rows in set. Elapsed: 0.372 sec. Processed 2.99 billion rows, 5.99 GB (8.05 billion rows/s., 16.11 GB/s.)
1 rows in set. Elapsed: 0.513 sec. Processed 4.18 billion rows, 8.35 GB (8.14 billion rows/s., 16.28 GB/s.)
3.26+2.99+4.18=10.43
Запрос к распределенной
1 rows in set. Elapsed: 1.176 sec. Processed 11.60 billion rows, 23.20 GB (9.86 billion rows/s., 19.73 GB/s.)
10.43 != 11.60
+ Еще один вопрос.
backgroung threads поставил в 16 в настройках потому как сластер начал отваливаться с too many parts
смотрю в system.merges 0-2 записи, в parts 5000 или 7000 и растет а процессор не загружен
почему КХ не мержит в 16 потков в срочном порядке?


Андрей Михайлович
01.08.2017
18:51:50
один инсерт с множеством VALUES
Я, конечно, не знаю, что такое батчи. Можете ткнуть в меня ссылкой. Но таки получается, что если я буду делать живую аналитику на тыкдоме, то приложенько, которое будет у меня вызывать 20к вставок в секунду, просто положит сервер и всё. А обещалось как раз быстро вставлять.
Таки а где ж оптимизатор умный, который будет там складывать, скажем в буфер, а потом вносить данные?

Vladimir
01.08.2017
18:53:44
батчи=пачками по 20000 в вашем случае
и да есть Buffer в КХ, но лучше делать самому подготовку пачки на стороне приложения по краиней мере документация Buffer не рекомендует почему-то

Андрей Михайлович
01.08.2017
18:55:22
Ну, скажем, приложенько на пхп так едва ли сможет (готовить пачку). Не все ж могут себе купить чего-нибудь.
Чот яндекс опять наврал.

Alexander
01.08.2017
18:55:57
Тут упомянули ещё какие-то внешние решения, которые собирают батчи, но желания не возникло пробовать. В целом буффер именно для этого.
Вставлял ~500к в секунду.
Помимо того, что вставлять в буфер, ещё удобно вставлять чанками через http
Получается так сказать два буфера , там уже за 3млн переваливает легко.
Это на буфере и простом mergetree

Андрей Михайлович
01.08.2017
18:59:42
ну так буфер ж не рекомендован. А я б не стал использовать то, что не рекомендовано производителем.
Хотя... Я вообще не знаю, зачем писать о чём-то в доке, если есть предупреждение "не использовать"

Alexander
01.08.2017
19:00:18
Я точно не помню, но там вроде были описаны кейсы когда он не рекомендуется.