
Vladimir
14.07.2017
07:28:36
arrayUniq(arr, ...) вроде кол-во уникальных возвращает, а мне они сами нужны

Дмитрий
14.07.2017
07:28:52
arrayReduce
я саму функцию не нашел в документации, но по описанию похоже на ваш случай

Vladimir
14.07.2017
07:29:51
сча попробую

Google

Vladimir
14.07.2017
07:31:14
а вы не знаете что 2 аргументом передавать?
SELECT DISTINCT arrayReduce(tags.name)
FROM Measures
WHERE (account = 'xyz') AND (tags.value[indexOf(tags.name, 's:i')] = '4291')
Received exception from server:
Code: 42. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Number of arguments for function arrayReduce doesn't match: passed 1, should be at least 2..
0 rows in set. Elapsed: 0.236 sec.

Дмитрий
14.07.2017
07:31:50
Написано что использовать вот так: arrayReduce('groupUniqArray', arr)

Vladimir
14.07.2017
07:32:08
пробую

Aleksandr
14.07.2017
07:32:26

Alex
14.07.2017
07:35:31

Vladimir
14.07.2017
07:36:47
спсб

Vsevolod
14.07.2017
07:38:01
я бы все-таки сбоку хранил хеши
все эти джоины - это черная магия, которая может сожрать непредсказуемое количество памяти...

Vladimir
14.07.2017
07:38:39
хеши от строк в отдельном массиве?

Vsevolod
14.07.2017
07:38:47
в отдельной колонке
и не от строк, а от всего массива строк

Google

Vladimir
14.07.2017
07:39:07
так
и как потом?

Vsevolod
14.07.2017
07:39:13
('a', 'b', 'c') -> hash('abc')

Alex
14.07.2017
07:39:28
:) select a from t
SELECT a
FROM t
┌─a─────────┐
│ ['a','b'] │
│ ['c','a'] │
└────────────┘
2 rows in set. Elapsed: 0.001 sec.
:) select groupUniqArrayArray(a) from t
SELECT groupUniqArrayArray(a)
FROM t
┌─groupUniqArrayArray(a)─┐
│ ['c','a','b'] │
└─────────────────────────┘
1 rows in set. Elapsed: 0.002 sec.
:)

Vsevolod
14.07.2017
07:39:37
а потом искать distinct хеши, очевидно

Vladimir
14.07.2017
07:39:45
так
мне не надо уникальные массивы
мне надо все уникальные элементы в массивах
я туплю? дайте подумать...

Ilya
14.07.2017
07:41:08
Чуь выше тоже вариант, но результат в массиве а не отдельные значения
С groupuniquearrayarray

Vladimir
14.07.2017
07:42:28
groupuniquearrayarray сча попробую вроде подходит
а с хешами не догнал как оно мне что то я хочу даст
Всеволод не могли бы вы пояснить?
groupUniqArrayArray сработало, по производительности такое же как distinct(arrayJoin)

Vsevolod
14.07.2017
07:51:59
боюсь, что я не так понял вашу задачу

Vladimir
14.07.2017
07:52:24
спасибо за пояснение

Vsevolod
14.07.2017
07:52:49
с хешами не получится решение - только с временной таблицей, где бы эти строки были бы распакованы из массивов

Vladimir
14.07.2017
07:53:15
arrrayJoin оно и есть как мне кажется

Vsevolod
14.07.2017
07:53:54
да, но в таблице можно сделать индекс, и это все будет очень быстро

Vladimir
14.07.2017
07:54:34
а обновляться она будет автоматом? ну при вставке в невременную

Alex
14.07.2017
07:54:50

Google

Vsevolod
14.07.2017
07:55:17
у меня в Rspamd была похожая задача - сосчитать в массивах самые популярные элементы
делал через arrayjoin
но скорость была неприятна

Vladimir
14.07.2017
07:58:32
согласен, надо прочитать про временные таблицы, у меня идет постоянная вставка и не хотелось бы перестраивать эту таблицу каждые 30 сек, это накладно по видимому. а вот если оно инкрементально само апдейтится
спасибо за наводку, ушел читать

Aleksandr
14.07.2017
08:11:12
Собственно первый вариант это аналог запроса:
global in (
SELECT user_id
FROM table
SAMPLE 0.1
WHERE dt …)
То есть я выбираю 10% user_id и делаю join. Я уверен, что все данные от выбранных мной user_id приедут для обработки.

Vladimir
14.07.2017
08:17:00
я так понимаю что если ваш sample key это userId то 10% от каждого попадет в итог (10 от одного и 1 от другого)
для этого sample key и предназначен

Alex
14.07.2017
08:22:16
(тут мы полагаемся на то, что хэш равномерно распределит значения)

Vladimir
14.07.2017
08:24:02
1/10 пользователей или 1/10 данных каждого пользователя?

Alex
14.07.2017
08:26:07
1/10 пользователей, если ключ сэмплирования intHash32(UserID)

Vladimir
14.07.2017
08:29:45
спсб
думал по другому

Vladimir
14.07.2017
08:46:10
Всем привет.
Подскажите ответы на пару вопросов:
1. Как поведёт себя CH при закончившемся месте на диске? При вставке и при merge.
2. Какой самый правильный способ ограничить потребление места на диске clickhouse'ом, когда места осталось чуть-чуть?

Vladimir
14.07.2017
08:47:47
и вроде как вставки на этот сервер работать не будут (будет такой эксепшн на инсерты)

Vladimir
14.07.2017
08:48:48
Будет возвращать клиентам эти ошибки и не будет при этом падать, да? Звучит хорошо.

Vladimir
14.07.2017
08:50:23

Vladimir
14.07.2017
08:50:55
Ок, спасибо. На первый взгляд выглядит как то, что надо. Проверим ещё на всякий случай.

Andrey
14.07.2017
09:57:29
Место ведь может закончится в процессе мёржа и без клиентских соединений?

Aleksandr
14.07.2017
10:06:43

Google

Vsevolod
14.07.2017
10:24:36
что-то непонятно мне с drop partition: хочется грохнуть данные за заданный день, а не месяц
и в system.parts видны нужные куски
а фиг там - удаляй за месяц или GTFO
нет, простое решение-то понятно

Vladimir
14.07.2017
10:27:11
@cebka партиционирование пока только помесячное, они обещают сделать произвольное

Admin
ERROR: S client not available

Vsevolod
14.07.2017
10:27:16
называть таблицу в виде tbl-yymmdd
но это адски тупо
так еще одно: join по ключам, которые слева и справа имеют разное имя
все, приехали?
нет, можно опять же сделать subquery, но это такая же боль...
и вдогонку select * from t1 any left join (select *,kt2 as kt1 from t2) using kt1; показывает все поля t1
но поля t2 остаются где-то в стороне
при этом, если попросить выдать select ft2 from ..., (указав явно поле из t2), то оно магическим образом всплывает

f1yegor
14.07.2017
10:56:18
Это известное поведение, экспортятся столбцы из левой таблицы

Vsevolod
14.07.2017
10:56:40
ну это полная жопа же
какой тогда вообще смысл в таком джоине?

f1yegor
14.07.2017
10:56:55
Из правой - только явно объявленные

Vsevolod
14.07.2017
10:57:11
нет, ну я могу это обойти, конечно
просто тут попробовал в лоб select * from t1,t2 where kt1 == kt2; так что бы вы думали: unknown combination of JOIN

Google

Vsevolod
14.07.2017
10:57:52
(кажется, я уже когда-то такое видел)
эти ограничения очень странные и неприятные

f1yegor
14.07.2017
11:00:01
Пока так, под конец года это планируется изменить

Vsevolod
14.07.2017
11:11:21
ну, видимо, я буду по работе много работать с кликхаусом - похоже, мне удалось убедить использовать его вместо kdb
вопрос в том, насколько охотно принимаются патчи
или нам работать со своим форком

Andrey
14.07.2017
11:20:55
Патчи очень охотно принимаются, по крайней мере пока.

Vsevolod
14.07.2017
11:22:16
ну, пока мне не было дано разрешение над работой над кликхаусом в рабочее время. а в поездах я работаю над Rspamd :) Но в выходные я постараюсь что-нибудь родить
тогда и посмотрим

papa
14.07.2017
12:09:12

Vsevolod
14.07.2017
12:17:48
Мне хочется джойна по полям с разным именем

papa
14.07.2017
12:18:52
а мне хочется чтобы count() пустоты был равен нулю.
давайте напишем Леше письмо, и он обязательно нам поможет.

Tima
14.07.2017
12:19:54

Vsevolod
14.07.2017
13:37:41
ничего не понимаю: toUnixTimestamp(today()) возвращает unix timestamp из 70-х годов 20-го века
это норма?