
Vladimir
08.07.2017
17:27:34
или не прав я?
там не в ML ребята поотвечали, надо прояснить ситуацию, должно заработать в итоге.
сейчас бежать надо, а то жена злая из-за потерянной субботы то еще удовольствие

papa
08.07.2017
19:20:23
интересное поведение парсера запросов:
:) select tuple(1), (1), tuple(1,2), (1,2)
SELECT
tuple(1),
1,
(1, 2),
(1, 2)
┌─tuple(1)─┬─1─┬─tuple(1, 2)─┬─tuple(1, 2)─┐
│ (1) │ 1 │ (1,2) │ (1,2) │
└──────────┴───┴─────────────┴─────────────┘
тут получается неоднозначность: либо expr := '(' expr ')', либо tuple := '(' expr* ')'. КХ в случае одного выражения предпочитает первый вариант, для второго смысла есть возможность явным образом обернуть выражение в tuple. если бы дефолтное поведение было бы считать любое выражение в скобках туплом, было бы [еще] неудобнее.
можно КЗ грамматику сочинить для этого места, но не уверен что от этого станет проще жить.

f1yegor
09.07.2017
08:59:07
cудя по этому http://www.ustream.tv/recorded/92500137 clickhouse является отличной альтернативой, примерно как мы заменили es на clickhouse

Google

Alexey
09.07.2017
12:25:29
А что там? Видео чейчас не посмотрю. 8 месяцев назад в Uber никто не знал про ClickHouse. Сейчас уже есть по крайней мере один человек, который знает. Одна из особенностей - работа с geospatial данными.

nikoinlove
09.07.2017
12:34:50
нвидиа тоже хотят кликхаус потрогать похоже
https://www.linkedin.com/jobs/view/279200146/
Conduct performance and durability research of several distributed database systems, including ClickHouse, MapD and possibly others

Roman
09.07.2017
13:12:42
осталось понять как их сливать
сливать можно через gsutils. Мы тоже применяем такой подход. Более того, есть возможность замаунтить данные из coldline storage непосредственно в КХ используя gcsfuse

Alexey
09.07.2017
13:51:47

nikoinlove
09.07.2017
13:56:10
что-то темнят) в вакансии-то написано что внедрять надо)
зато благодаря кликхаусу я узнал как теперь убеждать хостеров что видеокарты мне нужны не для майнинга - говорить что у меня mapd :)

Kirill
09.07.2017
15:20:10
Можно выставить max_rows_to_read = ..., read_overflow_mode = 'break'
так идея то была в том что бы кликхаус заканчивал читать, когда выполнен лимит на результат, а не лимит на количество прочитанных строк. допустим в запросе SELECT name FROM clients GROUP BY name LIMIT 2 по сути нужно прочитать ровно столько записей что бы к ключах для group by было 2 значения. Сколько строк прочитать потребуется - неизвестно. Но явно не все... А текущая имплементация будет читать все. И понятно, что обычно к group by прилагаются каутнеры, и тогда надо читать все. group by без каунтеров, но с лимитом хотелось использовать для предварительного запроса, что бы сказать что фильтр достаточен для того что бы результатов было адекватное количество.

Yury
09.07.2017
15:36:17
А как узнать какие строки надо прочитать и что в оставшихся не остались уникальные имена?

Kirill
09.07.2017
17:37:15

Alexey
09.07.2017
17:37:52

Kirill
09.07.2017
17:49:00
В утилиту для миграций https://github.com/mattes/migrate добавили поддержку ClickHouse

Kirill
09.07.2017
17:54:32

Alexey
09.07.2017
17:56:17
А ещё можно DISTINCT + LIMIT N или LIMIT 1 BY columns LIMIT N.

Google

Kirill
09.07.2017
18:08:57

f1yegor
10.07.2017
07:21:59
репост https://medium.com/@f1yegor/clickhouse-aggregatefunctions-and-aggregatestate-e3fd46b7be74

Shine
10.07.2017
08:25:36
Отличная статья!
а по движкам не планируется ?

M
10.07.2017
09:43:52
Добрый день, уважаемые господа!
Подскажите, как использовать движок таблиц Dictionary?
В документации пока ни слова, а уж очень интересно

Andrey
10.07.2017
09:56:17

Aleksandr
10.07.2017
10:05:17
Добрый день, господа. Не до конца понятен механизм sample. У меня есть таблица с просмотрами страниц, ключ сэмплирования - sipHash64(user_id).
Если я сделаю SAMPLE 0.1 - я получу все данные по десятой части user_id? Или часть данных по 10% user_id?
То есть по сути это аналог global in (
SELECT user_id
FROM table
SAMPLE 0.1
WHERE dt …) ?

M
10.07.2017
10:12:16

Nikolai
10.07.2017
10:25:34
Примерно так:
CREATE DATABASE dict ENGINE = Dictionary
dict - имя базы

Artem
10.07.2017
10:35:42
приветствую, а в clickhouse можно как-то проверить что с базой все ok? репликация не используется

Roman
10.07.2017
10:36:19
также есть системные метрики в бд system

Dmitry
10.07.2017
10:36:49
/stat@combot

Combot
10.07.2017
10:36:50
combot.org/chat/-1001080295593

Dmitry
10.07.2017
10:36:53
/stat@combot

Combot
10.07.2017
10:36:53
combot.org/chat/-1001080295593

Roman
10.07.2017
10:37:34

Artem
10.07.2017
10:38:38

Roman
10.07.2017
10:40:25
Не уверен. Просмотрите логи и сделайте какой-нибудь SELECT count() за длительный период

Artem
10.07.2017
10:41:28

Google


Roman
10.07.2017
10:54:58
хотелось бы понять насколько оптимальна запись в AggregatingMergeTree, если хочется собирать данные по часам - везде в примерах по датам
И насколько там адекватно использовать GROUP BY во вложенных запросах,
Насколько адекватным будет использование такой VIEW:
CREATE MATERIALIZED VIEW default.AggregatedEvent
ENGINE = AggregatingMergeTree(date, (hour, eventId, suid, date), 8192)
AS SELECT
toStartOfHour( toDateTime( time ) ) hour
eventId,
suid,
any(date) date,
countState() count,
uniqState(ufa) AS unique,
avgState(metric1) AS metric1,
avgState(metric2) AS metric2,
avgState(metric3) AS metric3
FROM (
SELECT sessionId, time, eventId, date, metric1, metric2, metric3 FROM
(
SELECT sessionId, time, eventId, date FROM Event
) ANY LEFT JOIN (
SELECT sessionId, avg(metric1) metric1, avg(metric2) metric2, avg(metric3) metric3 FROM Flow
GROUP BY sessionId
) USING sessionId
) ANY LEFT JOIN (
SELECT id sessionId, suid, ufa FROM Init
) USING sessionId
GROUP BY hour, eventId, suid;


Vladimir
10.07.2017
12:12:44
Добрый день. Кликхаус еще не поддерживает решардинг?

Alexander
10.07.2017
12:22:23

Virus
10.07.2017
12:32:56
По состоянию на июнь 2016, перешардирование находится в состоянии “бета”: тестировалось лишь на небольшом объёме данных - до 5 ТБ.

Andrey
10.07.2017
13:51:40
Ребят, а cityHash64 возвращает UInt64 ?

papa
10.07.2017
13:52:46
SELECT toTypeName(cityHash64(1))
┌─toTypeName(cityHash64(1))─┐
│ UInt64 │
└───────────────────────────┘

Andrey
10.07.2017
13:54:37
Спасибо, до toTypeName то я и не догадался)


Александр
10.07.2017
15:34:50
Ребят, в логе вот такое сыпит...
2017.07.10 18:26:26.863597 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160823_20160823_41_41_0 from ZooKeeper: no node
2017.07.10 18:26:26.865027 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160713_20160725_65_65_0 from ZooKeeper: no node
2017.07.10 18:26:26.866409 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160607_20160607_73_73_0 from ZooKeeper: no node
2017.07.10 18:26:26.867537 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160531_20160531_123_123_0 from ZooKeeper: no node
2017.07.10 18:26:26.868712 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160408_20160426_113_113_0 from ZooKeeper: no node
2017.07.10 18:29:56.969884 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160801_20160801_43_43_0 from ZooKeeper: no node
2017.07.10 18:29:56.970923 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160701_20160727_67_67_0 from ZooKeeper: no node
2017.07.10 18:29:56.971951 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160609_20160610_75_75_0 from ZooKeeper: no node
2017.07.10 18:29:56.972878 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160506_20160516_125_125_0 from ZooKeeper: no node
2017.07.10 18:29:56.973902 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160408_20160409_115_115_0 from ZooKeeper: no node
2017.07.10 18:30:56.984354 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170207_20170207_531_531_0 from ZooKeeper: no node
2017.07.10 18:30:56.985260 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170130_20170130_643_643_0 from ZooKeeper: no node
2017.07.10 18:30:56.986052 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20161109_20161109_1047_1047_0 from ZooKeeper: no node
2017.07.10 18:30:56.986892 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160523_20160523_127_127_0 from ZooKeeper: no node
2017.07.10 18:30:56.987757 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160411_20160411_117_117_0 from ZooKeeper: no node
2017.07.10 18:31:26.989589 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170424_20170424_6035_6035_0 from ZooKeeper: no node
2017.07.10 18:31:26.990801 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170313_20170330_1817_1817_0 from ZooKeeper: no node
2017.07.10 18:31:26.991890 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160912_20160929_27_27_0 from ZooKeeper: no node
2017.07.10 18:31:26.992787 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160802_20160802_45_45_0 from ZooKeeper: no node
2017.07.10 18:31:26.993745 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160712_20160714_69_69_0 from ZooKeeper: no node
2017.07.10 18:31:26.994727 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160606_20160615_77_77_0 from ZooKeeper: no node
2017.07.10 18:31:26.995676 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160526_20160526_129_129_0 from ZooKeeper: no node
2017.07.10 18:32:57.098041 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160526_20160527_131_131_0 from ZooKeeper: no node
2017.07.10 18:32:57.099395 [ 35 ] <Warning> cursometr.r_statements (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20160407_20160407_119_119_0 from ZooKeeper: no node
Это я так понял какие то проблемы с репликацией?
Два метра таких логов лежит


Alexey
10.07.2017
15:44:56
у меня такое же сыпит
и проблем вроде нет
если проверять через count или подобное

Aleksandr
10.07.2017
15:48:13

Alexander
10.07.2017
16:34:23
Вот была статья недавно на эту тему: http://www.3manuek.com/clickhousesample

Evgeniy
10.07.2017
17:14:17
Доброго времени суток!
Скажите, это нормально что запрос на 30% проц забивает. А 10 одновременных ложит Кликхаус. Может надо что то донастроить. В какую сторону смотреть?

Tima
10.07.2017
17:17:43

Evgeniy
10.07.2017
17:18:52
SELECT date_added, count() as visits, sum(cost) as cost, sum(income) as incm, sum(income>0) as conv
FROM roiorbit_visit
ALL LEFT JOIN roiorbit_conversion
USING hash

Google

Tima
10.07.2017
17:29:35
А где тут секция GROUP BY?
И без вводных (структура таблиц, кол-во строк, параметры сервера) - сложно чем-то помочь


Evgeniy
10.07.2017
17:41:03
GROUP BY date_added
CREATE TABLE IF NOT EXISTS roiorbit_visit (
date_added Date DEFAULT toDate(event_time),
event_time DateTime,
user_id UInt64,
campaign_id UInt64,
offer_id UInt64,
prelanding_id UInt64,
adnetwork_id UInt64,
source String,
promo String,
country String,
device_type UInt8,
os String,
osversion String,
browser String,
browser_version UInt8,
device_brand String,
device_model String,
hash String,
cost Float64
)
ENGINE = MergeTree(date_added, (hash), 8192)
CREATE TABLE IF NOT EXISTS roiorbit_conversion (
date_added_c Date DEFAULT toDate(event_time_c),
event_time_c DateTime,
hash String,
conversion UInt8,
income Float64
)
ENGINE = MergeTree(date_added_c, (event_time_c, hash, conversion), 8192)
первая таблица около 150 млн строк
вторая 1.5 млн строк
четырехядерный Xeon E5-1620 v2 CPU 3.70GHz, 64GD RAM, 3*300 SSD, 500 mbps

Alexey
10.07.2017
18:12:51

Александр
10.07.2017
18:13:27

Alexey
10.07.2017
18:14:32


Name
10.07.2017
19:29:40
Привет.
Короткий вопрос разработчикам: какую роль выполняет zookeeper?
В доке написано :
To enable replication ZooKeeper is required. ClickHouse will take care of data consistency on all replicas and run restore procedure after failure automatically. It's recommended to deploy ZooKeeper cluster to separate servers.
`
Короче для использования репликации подключить зукипер. в зукипере просто хранятся настройки реплик или зукипер делает что то еще для репликации?

papa
10.07.2017
19:30:34
зукипер делает что-то еще.

Alexey
10.07.2017
19:31:33
ZooKeeper хранит метаданные - о том, какие куски данных должны быть на репликах, хранит очередь репликации и используется для синхронизации реплик.

Name
10.07.2017
19:40:12

Alexey
10.07.2017
19:47:58
Метаданные. Информация о том, что появился кусок данных - с каким-то названием, чексуммой и т. п.

Александр
10.07.2017
20:05:42
DB::Exception: Cannot read from istream, e.what() = DB::Exception - а вот такое вообще откуда берется? )
Пишу примерно 6 миллионов строк в минуту, батчи разных размеров от 10 строк до 10 000 строк

Alexey
10.07.2017
20:08:29

Александр
10.07.2017
20:08:51
Т.е. проблема в сети получается?

Google

Alexey
10.07.2017
20:09:17
Либо в сети, либо в клиенте.

Александр
10.07.2017
20:09:55
Странно, но у меня канал в сторону кликхауса не загружен даже на 5 мегабит. Ладно, буду клиент колупать

Tima
10.07.2017
20:10:02

Александр
10.07.2017
20:10:39
По другому пока никак ( Руки не дошли напилить вставку через буффер

Alexey
10.07.2017
20:11:46
На GitHub есть готовый батчер для ClickHouse. Сам не проверял, как он работает.

Александр
10.07.2017
20:12:48
А можно ссылочку?

Alexey
10.07.2017
20:15:30
Сейчас поищу...

Александр
10.07.2017
20:16:10
Я просто не нашел ничего (

Alexey
10.07.2017
20:18:31
Вчера видел, но почему-то не могу легко найти на Github...
https://github.com/nikepan/clickhouse-bulk

Александр
10.07.2017
20:59:36
Спасибо большое за ссылку!

Alexander
10.07.2017
21:32:24
А зачем батчер? Почему не buffer?