
Alibek
10.02.2017
22:21:16
разраб сказал?
да, сказал, где-то на github он дал развернутый ответ почему он считает что message system не должна ничего хранить.

Fike
10.02.2017
22:21:47
то есть весь этот сыр-бор ради защиты чести одного разраба?

Alibek
10.02.2017
22:22:39

Fike
10.02.2017
22:23:09
боже, ну серьезно что ли

Google

Alibek
10.02.2017
22:29:12

Fike
10.02.2017
22:31:34
Я про то, что ты рьяно сражаешься за систему, которую, кхм, тебе немного профорсировали
И оперируешь явно не техническими аргументами

Alibek
10.02.2017
22:33:38


Alexey
10.02.2017
22:43:17
> @milovidov_an
> У нас более старая версия CityHash
> сохранены значения старой версии CityHash, поэтому мы не можем её обновить
Алексей, cпасибо за подробный ответ, мы этого и боялись что CityHash может меняться, нам нужно было партировать на наших клиентов: с++,java,php,js - реализацию как в CH, чтобы клиенты могли такой-же вычислять хеш как и CH и это было бы не изменно)
Еще пару вопросов, хочу реализовать в CHgui, просмотр процессов с возможностью Kill и реализовать получение информации о ходе выполнения запроса ( сделать недо подобие clickhouse-client через http) :
Насколько опасно в запросы из CHgui подставлять комментарий в виде /*__QUID__*/ в начале каждого запроса, где QUID=sha1(), насколько я смог понять из кода/документации самого CH комменты вырезаются и придумать/смоделировать, когда однострочный комментарий перед/в конце SELECT может вызвать проблему - не реально ?
Насколько корректно отправлять KILL на запрос, через отправку запроса "SELECT 1" в GET указывая query_id ?
И как можно убить запрос в кластере ?
Не смог разобраться/понять зачем initial_query_id, получается это ID запроса в ноде которая породила запросы в кластер ?
Комментарий в начало запроса подставлять безопасно.
Также у нас была старая не реализованная идея - сделать в HTTP запросе параметр comment, который пробрасывался бы в processlist и в query_log.
В master ветке ClickHouse и в следующем релизе есть запрос KILL QUERY специально для остановки запросов.
Он убивает запрос, в том числе, и на всём кластере - достаточно задать на инициирующем сервере.
initial_query_id - идентификатор запроса на инициирующем сервере. Предназначен для трассировки распределённых запросов, чтобы SELECT-ом из распределённого query_log-а можно было получить дерево запрсов на всех серверах.


Alibek
10.02.2017
22:55:08

Slach
11.02.2017
04:50:33
https://github.com/coreos/zetcd
Если и кто то заведет это для кликхаус дайте знать?

Dmitry
11.02.2017
06:48:52
а на скока я понимаю, нет пока дб провайдера для .net?

Ilya
11.02.2017
06:49:54

Anatoly
11.02.2017
06:50:36

Dmitry
11.02.2017
06:57:54
так вот как раз - утро, суббота, думаю чем бы заняться))

Google

Dmitry
11.02.2017
06:57:54
там есть odbc. там http протокол не сложный. можно сесть и написать :)

Alexey
11.02.2017
08:24:18

Konstantin
11.02.2017
09:03:58
Да, интересная ссылка, надо бы попробовать
Я не помню, здесь или живьём где-то рассказывал, что Zookeeper невозможно собрать только из исходников, без блобов (или хотя бы только с блобами-сборщиками типа maven, grable и тп).
Это к вопросу понимания того, что используешь
Там есть две крайне старые библиотеки, исходные коды которых существуют только в виде форков, найти из именно тот код, из которого были собраны jar во всяких репах — получается, невозможно
В одной из них, кстати, на сколько я понял, реализован свой SSL (зачем?-то) образца нескольколетней давности
С sslv3.
Не знаю, уж можно ли в зукипере каким-нибудь коннекшином инициировать уязвимое соединение или нет, но всё равно, это очень грустно

Alibek
11.02.2017
09:21:30

Konstantin
11.02.2017
09:34:18
Ну и если вынуждены использовать java, особенно в крупных компаниях, не качайте бинарники от оракла
https://m.theregister.co.uk/2016/12/16/oracle_targets_java_users_non_compliance/

Slach
11.02.2017
10:28:00
я правильно опнимаю что UUID лучше всего хранить в FixedString(16) через UUIDStringToNum ??
substring(s, offset, length)
Возвращает подстроку, начиная с байта по индексу offset, длины length байт. Индексация символов - начиная с единицы (как в стандартном SQL). Аргументы offset и length должны быть константами.
хм.... это значит что нельзя динамически вычислить чтото ???
лучше пользовать extract ??

Alexey
11.02.2017
11:11:44

Andrey
11.02.2017
11:24:34
Не совсем в тему, года 2 назад у Яндекса был доклад про Кафку, они на её основе сделали надстройку и хотели выложить в опенсорс. Не знаете есть какие подвижки в этом?

Alexey
11.02.2017
11:26:49
Надстройка (которая называется LogBroker) существует, используется. А вот про актуальность планов про open-source сказать не могу. Может быть Алексей Башкеев (он есть в этом чате) подскажет.

Daniel
11.02.2017
11:28:30
тогда вопрос еще в чем отличие от кафки

Alexey
11.02.2017
11:30:28
Я не смогу ответить на это вопрос достаточно полно. Посмотрите, тут кое-что есть, наверное: https://habrahabr.ru/company/yandex/blog/239823/

Daniel
11.02.2017
11:30:53
Спасибо!

Andrey
11.02.2017
11:36:20
https://m.youtube.com/watch?v=nzEwTsbJvTo

Google

Slach
11.02.2017
11:43:22
Да, поддерживаются только константные offset, length.
extract использовать можно.
то есть вот так лучше не делать?
screen_resolution String,
dvce_screenwidth ALIAS substring(screen_resolution, 1, CAST((screen_resolution, 'x') - 1) AS UInt16),
dvce_screenheight ALIAS ыubstring(screen_resolution, CAST(position(screen_resolution,'x')+1 AS UInt16), CAST(length(screen_resolution) - position(screen_resolution,'x') AS UInt16)),
??? работать не будет?

Alexey
11.02.2017
11:44:22
Не будет из-за неконстантного offset. Я рекомендую сделать два столбца: ResolutionWidth UInt16, ResolutionHeight UInt16.

Maksim
11.02.2017
11:47:01

Slach
11.02.2017
11:50:26
я не уверен что мне как раз нужны будут для анализа размеры а не оригинальное 1024x786
ок. спасибо пока попробую extract

Alexey
11.02.2017
11:51:12
Если есть два отдельных столбца, то нет проблем использовать для анализа оба одновременно.

Alexey
11.02.2017
12:51:02
тогда вопрос еще в чем отличие от кафки
Ну Кафка не exactly once. Наша настройка как раз это делает, и апи при этом другое. В оупенсорс пока не планируем, не понятно куда сама Кафка в этом смысле идёт - может из коробки уметь будет.
А вот трудности испытываем. На наших объемах не то чтобы все хорошо, планы что с этим делать тоже - но это уже тема целого доклада

Daniel
11.02.2017
12:57:26

Alexey
11.02.2017
13:00:55
Видели, смотрим куда это приведёт.
Но сама Кафка на 100+ серверах это уже сама по себе экзотика. Может быть мы её заменим, но т.к. основное апи над ней у нас внутри своё, пользователи могут и не заметить :)

Daniel
11.02.2017
13:08:04
у вас есть уже какие-то идеи куда бы вы могли двигаться?
для меня выглядит магически exactly once, это же по сути задача о двух генералах
а на большем числе серверов так и количество согласований растет сильно
в итоге наверняка придется же делать какие-то допущения и чем-то жертвовать?

Alexey
11.02.2017
13:38:08
Это тема отдельного большого разговора, припасу её до следующего ивента, например. Но по нашему текущему плану можно без жертв, практически :)

Andrey
11.02.2017
13:50:36
Отказываться от Кафки ? А вместо неё что? Что-то своё или ?

Alexey
11.02.2017
14:05:41
Своё

Alexander
11.02.2017
16:10:03
Мы внимательно смотрели в сторону Кафки, но она не вытягивает по производительности на наших объемах, в частности из-за плохой компрессии потока.

Alexey
11.02.2017
16:40:55
и на чем остановились, если не секрет?
тож что-то свое?

Alexander
11.02.2017
18:48:32
У нас свое, сделанное почти 10 лет назад. Чем-то похоже на Apache Flume

Fike
12.02.2017
00:36:25

Evgeniy
12.02.2017
02:58:32
exactly once возможен, но смотря насколько end-to-end рассматривать

Fike
12.02.2017
02:59:04
поподробнее, пожалуйста

Evgeniy
12.02.2017
03:13:40
ну если у тебя есть например кафка с этлист ванс, ты хранишь стейт в консюмере
потом он пишет например в базу
и там тоже можно прикапывать офсет мутации, но не всегда
а потом у тебя еще есть ебанина которая из бд читает

Google

Evgeniy
12.02.2017
03:13:44
на так далее
насколько в цепочке ты хочешь exactly once

Fike
12.02.2017
03:14:31
во всей, конечно

Evgeniy
12.02.2017
03:14:55
ну вот в абстрактной всей цепочке это невозможно)

Fike
12.02.2017
03:15:14
но это тоже не exactly-once, это обход через at-least-once с идемпотентной операцией (записью в базу)

Evgeniy
12.02.2017
03:16:04
слава богу что мы живем в мире "и так сойдет"

Daniel
12.02.2017
08:50:28

Иван
12.02.2017
10:08:14
Всем доброго времени суток! Рубрика: "вопросы от дилетантов". Для таблиц mergeTree необходим столбец типа date. Но у меня csv файлы с фактами формируются с типом datetime. Поток данных настолько велик, что нет никакой возможности осущетсвлять предобработку и выделять отдельно дату. Есть ли какая-нибудь возможность вычислять значения столбца с датой во время загрузки csv файла?

Slach
12.02.2017
10:09:08
tstamp_sent UInt32,
date_sent MATERIALIZED toDate(tstamp_sent),
вот так можно
ну или там tstamp datetime, date MATERIALIZED toDate(tstamp)
и вставлять только tstamp

Иван
12.02.2017
10:12:09
Есчо вопрос, можно ли как-то мэпить структуру загружаеммых файлов, чтобы например какие-либо столбцы csv файлов игнорировались при загрузке?

Yury
12.02.2017
11:00:39
Можно загнать это в табличку на движке Log, предварительно её пересоздать, полученный результат уже в кх загнать в целевую на движке MergeThree

Sergey
12.02.2017
12:14:22
После optimize таблица размер данных на диске вырос на 7 ГБ, прошло уже больше часа, а место высвобождение не было. С чем это может быть связано?
Как получить размеры всех таблиц в Бд? Только через сумму активных частей в system.parts?

Dmitry
12.02.2017
12:23:36
что-то не могу найти в документации, как получить тип UInt64.
использую dictGetT, где третий аргумент должен быть типа UInt64
dictGetString('dict_name', 'name', 394)
получаю ошибку:
Code: 43. DB::Exception: Received from xxx.xxx.xxx.xxx:9000. DB::Exception: Illegal type UInt16 of third argument of function dictGetString, must be UInt64 or tuple(...)..

Alex
12.02.2017
12:33:57
toUInt64(394)

Dmitry
12.02.2017
12:34:34

f1yegor
12.02.2017
17:44:37
Добрый вечер, друзья. Я очень долго не мог перевести ответ @milovidov_an про composite primary key, но наконец-то это сделал. Если найдутся желающие прочитать черновик до публикации - будет замечательно https://medium.com/@f1yegor/clickhouse-primary-keys-2cf2a45d7324

Google

Alexey
12.02.2017
18:50:17
Спасибо, всё отлично :) Есть только мелкие недочёты.
Milovidov(creator
columns(for SummingMergeTree)
values(until full
- нет пробела.
Также нет пробелов вокруг тире.
mark ranges [0, 3) и [6, 8).
- не переведено "и"
allows to skip part of data).
- закрывающая скобка без открывающей.
missing values of all columns will be replaced with default values(until full support of NULL values)
- технически с поддержкой NULL ничего не меняется, так как для Nullable столбцов по-умолчанию DEFAULT - это NULL.
Как будто есть шероховатости с английским языком.
Но не уверен, так как сам плохо пишу.
Data is sorted by primary key. That way they are more compressable.
Number of columns into primary key
that’s why a bit of additional column

papa
12.02.2017
18:55:18
посчитанный через parts размер не учитывает таблицы, движки которых не имеют parts.

Alexey
12.02.2017
18:55:25
После optimize таблица размер данных на диске вырос на 7 ГБ, прошло уже больше часа, а место высвобождение не было. С чем это может быть связано?
Интересно, какой это процент от всех данных.
Также посмотрите в system.parts, правда ли это активные куски.
Есть два варианта:
1. Ранее были добавлены новые столбцы. Сразу при добавлении, значения по-умолчанию для них физически не записываются, но при слиянии они записываются. Это вряд ли приводит к большому расходу места, так как обычно значения по-умолчанию - константы, и они очень хорошо сжимаются.
2. Первичный ключ может быть выбран так, что при сортировке по нему, данные сжимаются хуже. Это тоже маловероятно, но бывает.

Shine
12.02.2017
19:15:33
Увидел, что починили сортировку нуллов. Подскажите, а nulls last/first пока не поддерживается ?

Alexey
12.02.2017
19:16:33
Пока нет. Будем добавлять в ближайшее время.
PS. Замечу, сортировку починили буквально только что. Она войдёт не в следующий stable пакет, а через один.

Shine
12.02.2017
19:16:53
ага, отлично! Спасибо

f1yegor
13.02.2017
01:05:01

Рулон
13.02.2017
06:29:47
Доброе утро! Минимальный набор символов, которых вам необходимо экранировать в строковых литералах: ' and \.
А есть полный список?

Vladimir
13.02.2017
10:49:49
Добрый день, вот такая задачка
В таблице хранятся A, B и C. И есть еще динамическое D, которое зависит от A и B и известно только во время запроса. Запрос выглядит таким образом:
SELECT A, B, countIf(C <= hereWeSomehowGetDfromAandB(A, B)) FROM mytable
какой самый православный способ это делать?
пробовал положить A, B, D во временную табличку через external data, но почему-то такой запрос не работает:
SELECT A, B, countIf(C <= (SELECT D FROM tempTable WHERE tempA = A AND tempB = B)) FROM myTable
при этом такой работает:
SELECT A, B, countIf(C <= (SELECT D FROM tempTable WHERE tempA = 1 AND tempB = 1)) FROM myTable
что делаю не так? куда копать?

papa
13.02.2017
10:56:34
а Д - это функция от А Б которую можно задать кликхаусным выражением, или А,Б,Д можно считать еще одной таблицей и ничего кроме попадания в эту таблицу их не объединяет?
коррелированные подзапросы не работают, возможно вам нужен джойн using(a,b)

Vladimir
13.02.2017
10:59:43
D нельзя представить как функцию от A и B. но можно их всех положить в еще одну временную таблицу
похоже получилось, всем спасибо