
Alexey
13.08.2017
22:39:57
Запросы одинаковым образом используют индекс. Но сравнение date с константной проще, чем вычисление месяца.

Vladislav
13.08.2017
22:40:48
логично. Еще раз спасибо!:)

Andrey
14.08.2017
06:47:43
Подскажите, пожалуйста, по коду: вот у меня есть Block полученный от сервера, как мне его проще всего нарезать на строчки типа char**. Парсить то, что было на входе WriteBuffer?

Alex
14.08.2017
07:46:33

Google

Igor
14.08.2017
08:30:46
Подскажите по session_id ( хочу в драйвере прикрутить ) и TEMPORARY TABLE
- Эти таблицы можно удалить через DROP TABLE ? У меня не получается - посылаю запрос на CREATE , потом на DROP с указанием session_id - ошибка
- Из доки : "- временные таблицы исчезают после завершения сессии; в том числе, при обрыве соединения" - получается нельзя использовать несколько соединений подряд с одним session_id , нужно постоянно держать connection ?

Kirill
14.08.2017
08:34:33
присоединяюсь к вопросу, т.к. при работе с нативным протоколом таже проблема, нет возможности удалять временные таблицы, а разрывать соединение каждый раз не очень удобно


Alexey
14.08.2017
08:48:11
Привет. Про LEFT JOIN. Может, кому пригодится.
Вложенные запросы пришлось написать вместо просто таблиц, т.к. алиасы не работают так, как в MySQL.
✅ Так работает (вывожу регионы и страны с айдишниками):
:) SELECT region_id, region_name, country_id, country_name FROM (SELECT region_id, name_ru as region_name, country_id FROM _regions_log WHERE 1=1 LIMIT 0,10) ANY LEFT JOIN (SELECT country_id, name_ru as country_name FROM _countries) USING(country_id) ORDER BY region_name LIMIT 0,10
SELECT
region_id,
region_name,
country_id,
country_name
FROM
(
SELECT
region_id,
name_ru AS region_name,
country_id
FROM _regions_log
WHERE 1 = 1
LIMIT 0, 10
)
ANY LEFT JOIN
(
SELECT
country_id,
name_ru AS country_name
FROM _countries
) USING (country_id)
ORDER BY region_name ASC
LIMIT 0, 10
┌─region_id─┬─region_name────────────┬─country_id─┬─country_name─┐
│ 2763 │ Chongqing Municipality │ 97 │ Китай │
│ 20573 │ Dornod Aymag │ 130 │ Монголия │
│ 875 │ Imo State │ 137 │ Нигерия │
│ 13330 │ Ogun State │ 137 │ Нигерия │
│ 2188 │ Pune │ 80 │ Индия │
│ 1000001 │ Адыгея │ 1 │ Россия │
│ 1000236 │ Архангельская область │ 1 │ Россия │
│ 1004118 │ Астраханская область │ 1 │ Россия │
│ 1004565 │ Башкортостан │ 1 │ Россия │
│ 1009404 │ Белгородская область │ 1 │ Россия │
└───────────┴────────────────────────┴────────────┴──────────────┘
10 rows in set. Elapsed: 0.005 sec. Processed 3.96 thousand rows, 140.74 KB (756.70 thousand rows/s., 26.93 MB/s.)
Кстати, звёздочка во внешнем селекте выводила только столбцы, соответствующие первому вложенному селекту. Перечисление всех - сработало.
А вот, с чего начал терять время на преобразования:
? Так - не работает (в отличие от MySQL):
:) SELECT r.region_id as region_id, r.name_ru as region_name, r.country_id as country_id, c.name_ru as country_name FROM geodata._regions_log as r LEFT JOIN geodata._countries as c USING(country_id) WHERE 1=1 ORDER BY r.name_ru LIMIT 0,10
SELECT
r.region_id AS region_id,
r.name_ru AS region_name,
r.country_id AS country_id,
c.name_ru AS country_name
FROM geodata._regions_log AS r
LEFT JOIN geodata._countries AS c USING (country_id)
WHERE 1 = 1
ORDER BY r.name_ru ASC
LIMIT 0, 10
Received exception from server:
Code: 60. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Table geodata.geodata._countries doesn't exist..
0 rows in set. Elapsed: 0.034 sec.
? Задвоенная БД? - убираем ваще. Но и так - не работает:
:) SELECT r.region_id as region_id, r.name_ru as region_name, r.country_id as country_id, c.name_ru as country_name FROM _regions_log as r LEFT JOIN _countries as c USING(country_id) WHERE 1=1 ORDER BY r.name_ru LIMIT 0,10
SELECT
r.region_id AS region_id,
r.name_ru AS region_name,
r.country_id AS country_id,
c.name_ru AS country_name
FROM _regions_log AS r
LEFT JOIN _countries AS c USING (country_id)
WHERE 1 = 1
ORDER BY r.name_ru ASC
LIMIT 0, 10
Received exception from server:
Code: 47. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Unknown identifier: c.name_ru.
0 rows in set. Elapsed: 0.021 sec.
Спасибо за внимание


Aloneibreak
14.08.2017
08:50:00
Добрый день. Подскажите почему не рекомендуется хранить float в таблицах?

Игорь
14.08.2017
08:51:08
0.2 + 0.1 = 0.30000000000000004
вот поэтому

Aloneibreak
14.08.2017
08:52:04
Спасибо

Andrew
14.08.2017
09:03:07
Добрый день. Обнаружил интересную особенность поведения внешних словарей CH 1.1.54245
Во всех конфигурационных файлах словарей прописаны значение параметра "Периодичность обновления для полностью загружаемых словарей":
<lifetime>
<min>3000</min>
<max>4200</max>
</lifetime>
<layout>
<hashed/>
</layout>
В основном конфиг файле config.xml СН параметр dictionaries_lazy_load не указан.
Не могли бы подсказать почему внешние словари не обновляются в период, который указан в lifetime?
А обновление всех словарей происходит только тогда, когда производится запрос к одному из словарей.
Ошибок в логах нет.
Словари висят в памяти определенное время, а потом удаляются.
Заранее спасибо


Vladislav
14.08.2017
09:21:28
Здравствуйте. Никто не сталкивался с проблемой на очень маленьких данных (10 мб) — очень большое число parts в partition и следовательно размер partition в несколько раз больше (60 мб) чем данных в ней. Используем granularity 512, но когда закачивали основной сет размером в 6 гб таких проблем не получали.

Vladislav
14.08.2017
09:51:05

Sergey
14.08.2017
10:09:01
Привет. Подскажите, как я могу сконкатенировать массивы?

Igor
14.08.2017
10:09:13

Google

Александр
14.08.2017
10:12:19

Alexandr
14.08.2017
10:19:32
добрый день, вопрос актуален
Alexandr Bocharov, [11.08.17 15:37]
при прочих равных - SummingMergeTree vs AggregatingMergeTree
у какого движка будет выше производительность, лучше потребление памяти, другие ньюансы/недостатки использования?
может есть бенчмарки?

Alexey
14.08.2017
10:22:41
всем привет! папака /local/zookeeper/version-2 занимает 440Gb и в ней 15к файлов. Это нормально? Почистить можно ее?

Maxim
14.08.2017
10:23:03
Привет всем. Ребят а как яндекс реализует отправку батчем в метрики, там же клик это одно событие, где они хранят события перед отправкой?

Дмитрий
14.08.2017
10:24:16
может в RAM?

Roman
14.08.2017
10:24:19
где-нибудь типа RabbitMQ?

Aleksandr
14.08.2017
10:26:20
Возможно ли использование поля из словаря в выражении WHERE?
SELECT * FROM
(
SELECT
foo1, foo2, foo3,
dictGetString('my_dict', 'dict_foo', tuple(toInt32(bar1), bar2))
FROM
my_table
WHERE
date = '2017-05-11'
) AS t1
WHERE dict_foo != 'smth'
LIMIT 10

Maxim
14.08.2017
10:26:41
у меня была идея либо в kafka, redis или просто RAM, но от мне интересно как это в яндексе устроенно

Александр
14.08.2017
10:27:15

Maxim
14.08.2017
10:27:54

Александр
14.08.2017
10:28:07
Алексей не так давно рассказывал про то как этот буфер устроен и как им пользоваться. Плюсы и минусы. Если постараться, то можно в истории чатика найти )

Alexey
14.08.2017
10:38:29

Igor
14.08.2017
10:40:24

Alexey
14.08.2017
10:42:29
а блин, в доке же есть
спс =)

papa
14.08.2017
11:17:34
Привет. Подскажите, как я могу сконкатенировать массивы?
SELECT
[1, 2] AS x,
[3, 4] AS y,
arrayReduce('groupArrayArray', [x, y]) AS xy
┌─x─────┬─y─────┬─xy────────┐
│ [1,2] │ [3,4] │ [1,2,3,4] │
└───────┴───────┴───────────┘

Sergey
14.08.2017
11:34:36
Спасибо, а можно ли как-то над каждым элементом одного массива произвести изменение по какой-то функции и получить на выходе масссив: Например, ['x', 'y'] -> ['xx', 'yy'] ?

Roman
14.08.2017
11:36:02
https://clickhouse.yandex/docs/ru/single/index.html#arraymap-func-arr1

Sergey
14.08.2017
11:37:50
Спасибо, проглядел!

Google

Andrey
14.08.2017
13:04:40


Alexey
14.08.2017
14:21:51
А вот, с чего начал терять время на преобразования:
? Так - не работает (в отличие от MySQL):
:) SELECT r.region_id as region_id, r.name_ru as region_name, r.country_id as country_id, c.name_ru as country_name FROM geodata._regions_log as r LEFT JOIN geodata._countries as c USING(country_id) WHERE 1=1 ORDER BY r.name_ru LIMIT 0,10
SELECT
r.region_id AS region_id,
r.name_ru AS region_name,
r.country_id AS country_id,
c.name_ru AS country_name
FROM geodata._regions_log AS r
LEFT JOIN geodata._countries AS c USING (country_id)
WHERE 1 = 1
ORDER BY r.name_ru ASC
LIMIT 0, 10
Received exception from server:
Code: 60. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Table geodata.geodata._countries doesn't exist..
0 rows in set. Elapsed: 0.034 sec.
? Задвоенная БД? - убираем ваще. Но и так - не работает:
:) SELECT r.region_id as region_id, r.name_ru as region_name, r.country_id as country_id, c.name_ru as country_name FROM _regions_log as r LEFT JOIN _countries as c USING(country_id) WHERE 1=1 ORDER BY r.name_ru LIMIT 0,10
SELECT
r.region_id AS region_id,
r.name_ru AS region_name,
r.country_id AS country_id,
c.name_ru AS country_name
FROM _regions_log AS r
LEFT JOIN _countries AS c USING (country_id)
WHERE 1 = 1
ORDER BY r.name_ru ASC
LIMIT 0, 10
Received exception from server:
Code: 47. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Unknown identifier: c.name_ru.
0 rows in set. Elapsed: 0.021 sec.
Спасибо за внимание
Спасибо за примеры! Это старая проблема, нам давно пора это исправить. Постепенно делаем.


Sergei
14.08.2017
14:26:51
Подскажите пожалуйста, вижок AggregatingMergeTree как-то сокращает объем таблицы и или нет? Вообще какие могут быть области его применения? Спасибо

Alexey
14.08.2017
14:27:51

Dmitrii
14.08.2017
14:28:17
/stat@combot

Combot
14.08.2017
14:28:18
combot.org/chat/-1001080295593

Igor
14.08.2017
14:29:10

Vsevolod
14.08.2017
14:29:25
@milovidov_an за исключением того, что они будут шуметь и фигово компрессироваться
@milovidov_an при том, что в большинстве случаев точность даже float для всего допустимого диапазона значений не особо нужна

Aloneibreak
14.08.2017
14:31:02

Vsevolod
14.08.2017
14:31:48
ну и atod/dtoa - это боль

Andrey
14.08.2017
14:31:51

Alexey
14.08.2017
14:32:08


Alexandr
14.08.2017
14:35:54
спасибо.

Alexey
14.08.2017
14:37:39

Google

Alexey
14.08.2017
14:39:18
SELECT
[1, 2] AS x,
[3, 4] AS y,
arrayReduce('groupArrayArray', [x, y]) AS xy
┌─x─────┬─y─────┬─xy────────┐
│ [1,2] │ [3,4] │ [1,2,3,4] │
└───────┴───────┴───────────┘
Сейчас наконец-то запланирована задача, где конкатенация массивов делается по-нормальному.

Andrey
14.08.2017
14:55:05

Alexey
14.08.2017
14:56:36

Andrey
14.08.2017
14:58:36
Ну, я сейчас делаю PoC чтобы сравнить скорость python+http с plainC+native

Admin
ERROR: S client not available

Andrey
14.08.2017
14:59:05
Если от С будет выхлоп - буду делать хорошо и правильно

Vladislav
14.08.2017
16:17:12

Тефтеля
14.08.2017
16:40:19
В кх вставки по 20к лучше делать? или можно больше?

Vladimir
14.08.2017
16:41:26

Тефтеля
14.08.2017
16:41:55
можно то можно) а оптимально как?

Vladimir
14.08.2017
16:42:25
А размер одного инсерта был большой

Alan
14.08.2017
18:58:15
а чем буферизируют в golang ? или вручную?

Alex
14.08.2017
19:04:37

Roman
14.08.2017
19:14:01
есть еще https://github.com/nikepan/clickhouse-bulk

Alex
14.08.2017
19:14:13
Из самых годных вариантов как по мне - это обойтись возможностями клик хауса
https://clickhouse.yandex/docs/ru/table_engines/buffer.html

Alan
14.08.2017
19:44:03
там написано что даже в буффер лучше слать пачками

Google

Roman
15.08.2017
05:22:16
/stat@combot

Combot
15.08.2017
05:22:16
combot.org/chat/-1001080295593

Dmitriy
15.08.2017
08:56:00
Привет Всем.
Подскажите такой вопрос
как можно обрывать выполнения запроса в случае если запрос приходит через http но соединение периодически обрывается?
т.е. у нас получается что запрос запустился а сооединение отвалилось а запрос остался выполнятся. фигня в том что кол. данных которые перебирается уже большое и из-за таких обрывов растет загрузка на сервере и соответственно время выполнение запросов.

Евгений
15.08.2017
10:20:49
Скажите, пожалуйста, а можно как-то повлиять на количество parts, при превышении которого КХ начинает кидаться ошибкой "Code: 252, e.displayText() = DB::Exception: Too much parts. Merges are processing significantly slower than inserts."?

Andrey
15.08.2017
10:22:14

Евгений
15.08.2017
10:26:00
медленнее лить.) Это означает что мержи неуспевают за инсертами
Проблема в том, что даже если ничего не лить, это количество сейас около 300. OPTIMIZE TABLE с FINAL отрабатывает моментально и ничего не делает. Вероятно это из-за того, что выполняю ее на не ведомой реплике. Но на лидирующей количество в 4 раза меньше. Проверил все варианты о которых писали, откуда такое может идти, ни одно не потвердилось. Мне бы сейчас потушить эту проблему и нормально разбраться.

Andrey
15.08.2017
10:26:45

Евгений
15.08.2017
10:27:52
А как этот параметр называется?

Диана
15.08.2017
12:39:30
Подскажите, пожалуйста, с помощью чего просуммировать математически элементы Array(UInt64), sumArray как я поняла, предназначен ля агрегации

papa
15.08.2017
12:44:33
arrayReduce

Aleksandr
15.08.2017
12:47:05
Привет всем!
Кто-нибудь делал импорт в CH из Parquet файлов?

Диана
15.08.2017
12:50:39
спасибо большое

Alexey
15.08.2017
12:52:06
А как этот параметр называется?
Ограничение на максимальный размер куска - max_bytes_to_merge_at_max_space_in_pool. Настраивается в config.xml, в секции merge_tree.
Количество кусков, после которого кидается исключение о том, что кусков слишком много - parts_to_throw_insert. Обычно увеличивать не имеет смысла, так как причина часто не в том, что куски не успевают мержатся, а в том, что они не мержатся вообще, из-за каких-либо проблем.

Евгений
15.08.2017
12:53:04
Спасибо!

Alexey
15.08.2017
12:53:29

Aleksandr
15.08.2017
12:56:12
Встроенного конвертера из Parquet нет, а очень бы хотелось сделать, только не очень понятно в какой формат делать конвертацию? В Native? это самый "родной" формат для CH и самый дешевый для импорта?

Alexey
15.08.2017
12:57:28
Да, Native самый оптимальный. Но его труднее сформировать вручную. Второй по простоте - RowBinary. Хотя сам Parquet больше всего похож на Native, и я думаю, что родную поддержку Parquet рано или поздно придётся сделать.

Евгений
15.08.2017
12:57:36