@clickhouse_ru

Страница 257 из 723
papa
10.09.2017
17:22:33
Как заклинание прозвучало :)
пока что так и есть, скоро будет менее хакерская функция.

Kirill
10.09.2017
17:39:07
А есть ли способ сгруппировать не только одинаковые массивы, но группировать массив и с теми что полностью в него входят, например: action | categories 1 | [1,2,3,4,5] 1 | [2,3] 2 | [1,2] 2 | [2,3] сгруппировать SELECT action, fn(categories) AS cat, COUNT() AS cnt FROM t GROUP BY action, cat и получить 1, [1,2,3,4,5], 2 2, [1,2], 1 2, [2,3], 1 ?

papa
10.09.2017
17:42:02
а вы это хотя бы на каком-то языке программирования можете написать?

например если у вас есть A, B, A and B, куда должна попасть третья строка, в первую группу или во вторую?

Google
Kirill
10.09.2017
17:50:16
да, могу, 3-й никуда не должен попасть, вобщем если по проще то, для группировки нужно чтоб дольшие массивы включали в себя меньшие, т.е. если есть [A],[B] и [A,B] то останется [A,B]

papa
10.09.2017
17:52:08
если я правильно вас понял, то вы хотите примерно вот что. у вас есть некоторое подмножество X какого-то powerset P, и вы хотите найти в нем Xmax = {x \in X| !\E a: x \subset a }, т.е. множество "максимальных" элементов X, и потом каждый элемент округлять до максимального. во-первых у вас проблема с неоднозначностью, а во-вторых, на уровне исполнения запроса это преобразование не функция отдельной строки.

Kirill
10.09.2017
17:53:27
ok, пустые не группируем

papa
10.09.2017
17:54:13
я могу непустой пример придумать.

в кх можно написать выражение включения одного массива в другой, поэтому можно просто определение которое я написал выше переписать в виде запроса, и потом на это множество еще раз поджойнить таблицу и посмотреть кто куда попадает.

Денис
10.09.2017
22:40:32
Про проблемы с негативными енумами - пардон, ложная тревога, ошибка в коде создания таблицы (в значения енума при сериализации попадал какой-то непечатный символ, который не было видно describe/show create).
Здравствуйте ,как победили баг? у меня абсолютно аналогичная ситуация, понять не могу откуда ноги растут Code: 49, e.displayText() = DB::Exception: Unknown element 'umts' for type Enum8('noservice' = 1, 'gsm' = 2, 'umts' = 3, 'lte_fdd' = 4, 'lte_tdd' = 5), e.what() = DB::Exception

Alexey
10.09.2017
23:53:06
Tima
11.09.2017
06:37:04
В ближайшем релизе появится нормальная операция конкатенации массивов и не только.
Можете уточнить, когда ожидается и в какой мере более полная поддержка JOIN? Тут https://clickhouse.yandex/docs/en/roadmap.html достаточно размыто написано

Igor
11.09.2017
07:11:04
@ckcnik У меня в коде, который создавал таблицы, затесался какой-то непечатный символ, пробел нулевой ширины или что то вроде. Он все и портил.

Tima
11.09.2017
08:39:57
Вот запрос из доки http://joxi.ru/RmzNOePtWOkvPm (примерно тут https://clickhouse.yandex/docs/ru/query_language/queries.html#id9) Что он делает, прям по UserId агрегирует что ли?

Александр
11.09.2017
08:55:18
Я так полагаю, что это было бы аналогично, если было бы написано avgIf или where userId IN

Tima
11.09.2017
09:04:09
Я так полагаю, что это было бы аналогично, если было бы написано avgIf или where userId IN
Похоже, но вопрос в том, а по какому полю считается avg?

Google
Александр
11.09.2017
09:10:18
А, видимо считается доля строк по каждому userId, хотя могу ошибаться

Хотя avg все таки считает среднее

Ну да ) Там написано "за каждый день после 17 марта считаем долю хитов, сделанных посетителями, которые заходили на сайт 17 марта"

Alexey
11.09.2017
10:52:26
Добрый день. Помогите советом. Есть задача "обновлять" имеющиеся записи в КХ (да, знаю, что апдейтов нет) Есть таблица пользователей. У каждого есть уникальный айди и много атрибутов В момент добавления записи не все атрибуты могут быть известны. По мере поступления новых данных атрибуты надо обновлять Есть работающее решение - просто инсертить новые записи, а каждый атрибут вычислять через argMax (у каждой записи есть таймстемп) группируя по user_id. Оно работает, но не очень быстро. Пользователей не очень много (сейчас около 3 миллионов, но число будет расти). Нужны они в КХ т.к. хотим по атрибутом пользователя фильтровать события (джоинить таблицы юзером в ивентов). Есть ли варианты лучше? Еще были мысли сделать "юзеров" сделать через словарь (в mysql например) не будет ли их количество проблемой?

Vsevolod
11.09.2017
11:03:53
Попробуйте вынести агрегацию в материализированное представление и оттуда с доагрегирующим запросом вытаскивать

Данное решение сократит количество строк, так как КХ потихоньку будет их схлопывать

Mariya
11.09.2017
11:11:41
Можно попробовать инкрементальный лог и CollapsingMergeTree - https://clickhouse.yandex/docs/en/table_engines/collapsingmergetree.html

Александр
11.09.2017
11:14:25
Добрый день. Помогите советом. Есть задача "обновлять" имеющиеся записи в КХ (да, знаю, что апдейтов нет) Есть таблица пользователей. У каждого есть уникальный айди и много атрибутов В момент добавления записи не все атрибуты могут быть известны. По мере поступления новых данных атрибуты надо обновлять Есть работающее решение - просто инсертить новые записи, а каждый атрибут вычислять через argMax (у каждой записи есть таймстемп) группируя по user_id. Оно работает, но не очень быстро. Пользователей не очень много (сейчас около 3 миллионов, но число будет расти). Нужны они в КХ т.к. хотим по атрибутом пользователя фильтровать события (джоинить таблицы юзером в ивентов). Есть ли варианты лучше? Еще были мысли сделать "юзеров" сделать через словарь (в mysql например) не будет ли их количество проблемой?
У нас похожая схема используется. Только мы используем ReplacingMergeTree и пишем данные сразу по всем колонкам. Они пересчитываются после получения новых эвентов о пользователе (посчитать, сагрегировать и пр. в КХ невозможно из-за особенностей бизнес-логики). Через словарь в КХ пробовал, но проблема словаря в том, что например на 250к строк есть определенный лаг, т.к. КХ почему то на каждый запрос лезет в MySQL и проверяет актуальность ключей (возможно я ошибаюсь и он берет из кеша, но все равно как то долго), поэтому вариант с MySQL у нас отвалился.

Лучше хранить где то старое состояние, например в redis, после вычисления новых данные, брать старое состояние, обновлять его и писать в КХ

Это будет куда быстрее, чем считать argMax

Firej
11.09.2017
11:30:59
Привет! скажите всетаки, как победить такую ошибку - DDLWorker: Will not execute task query-0000000066 : There is no a local address in host list

я так понимаю от зукипера приходит задание с неправильным хостом и CH-сервер не находит себя в списке хостов. А где посмотреть эти задания сами. в консоли зукипера все как будто нормально отображается

Bob
11.09.2017
12:35:25
У вас на всех узлах кластера настроен кластер?

Firej
11.09.2017
12:50:22
ну да

<remote_servers> <replicator> <shard> ...

Ilya
11.09.2017
13:00:38
Добрый день! Я ведь правильно понимаю, что при выполнении запроса: SELECT a, any(b), any(c) FROM table GROUP BY a нет гарантии что b и c будут из одной записи?

Александр
11.09.2017
13:00:54
все верно

papa
11.09.2017
13:01:28
насколько я помню, any((b,c)) = (any(b),any(c))

так что второй вариант можно использовать.

Ilya
11.09.2017
13:03:45
Спасибо

Google
Andrey
11.09.2017
13:05:47
Добрый день. Настраиваю работу 2 шардов по 2 реплики. Странное поведение: делаю вставки в distributed таблицу на 1-ом сервере, часть данных уходит на 4-ый (шардирование работает нормально), но не все данные попдают на сервер 3 с 4-го (реплики) и ничего не пишется на 2-ой (реплика первого)

в логах ReshardingWorker: no node, path: /clickhouse/task_queue/resharding/clickhouse1

CREATE TABLE video ( ... ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/video', '{replica}', EventDate, cityHash64(URL), 8192); CREATE TABLE video_distributed AS video ENGINE = Distributed(statistics, default, video, cityHash64(domainWithoutWWW(URL)));

в конфигах <macros incl="macros"> <shard>1</shard> <replica>clickhouse1-1</replica> </macros> <macros incl="macros"> <shard>1</shard> <replica>clickhouse1-2</replica> </macros> <macros incl="macros"> <shard>2</shard> <replica>clickhouse2-1</replica> </macros> <macros incl="macros"> <shard>2</shard> <replica>clickhouse2-2</replica> </macros>

Alexey
11.09.2017
13:16:33
Можете уточнить, когда ожидается и в какой мере более полная поддержка JOIN? Тут https://clickhouse.yandex/docs/en/roadmap.html достаточно размыто написано
В Q4. Можно будет делать JOIN-ы без необходимости оборачивания всего в подзапросы и с обычным синтаксисом.

Kirill
11.09.2017
13:17:39
Минимальной датой в DateTime тоже является 1970-01-01 как в Date ?

hulponot
11.09.2017
13:23:50
Добрый день, подскажите пожалуйста по внешнему словарю. complex_key_cache смотрит в постгрес. Когда не находит записи по ключу, то кидает "RecordSet contains 0 columns while 5 expected", а в постгресе вижу висит запрост PREPARE ... с этим ключем. Вопрос примерно: почему иногда он умеет доставать несуществующую запись и заполнять дефолтными значениями, а иногда отваливается?

Tima
11.09.2017
13:27:29
В Q4. Можно будет делать JOIN-ы без необходимости оборачивания всего в подзапросы и с обычным синтаксисом.
Спасибо за ответ. А стоит ожидать появление этого функционала до конца года? Или Q4 - дата начала разработки?

hulponot
11.09.2017
13:39:40
>Результат у этого запроса непустой? Если с постгреса приходит пустой ответ (0 rows) на простой dictGetString('xxx', 'attr', tuple(guid,id)), так будет работать?

Александр
11.09.2017
13:58:53
Есть дата и время, например 2017-09-11 14:44:01, ее как то функциями для работы с датами можно преобразовать в 2017-09-11 23:59:59? )

Tima
11.09.2017
14:00:09
Александр
11.09.2017
14:01:06
Мне нужно собрать общую продолжительность эвентов с группировкой по дням. Есть дата начала эвента и дата завершения эвента. Если эвент растянулся на пару дней, то нужно за эти несколько дней на каждый день посчитать продолжительность.

Александр
11.09.2017
14:03:02
Можно проецировать на визиты. Есть время визита, например визит длился 15 минут. Начался визит 2017-09-10 23:55:00 а кончился 2017-09-11 00:10:00. И вот результат запроса должен быть типа 2017-09-10 - 300 2017-09-11 - 600

Хм, хотя я могу использовать timeSlots

Tima
11.09.2017
14:04:13
Округлить до даты можно так: 1. toDate(date) 2. substring(date, 1, 10) А что такое 300 и 600 в примере? Продолжительнось в секундах?

Александр
11.09.2017
14:04:49
Да

Admin
ERROR: S client not available

Александр
11.09.2017
14:05:11
Мне не округлить до даты нужно ) Мне нужно зная дату поставить ей время в 23.59.59 )

papa
11.09.2017
14:05:20
toStartOfDay()

Александр
11.09.2017
14:05:21
Хотя это костыль. Сейчас попробую через timeSolts попробовать

Google
Александр
11.09.2017
14:05:42
Блин, точно....забыл про них совсем! Сори, что дернул глупым вопросом!

Vladislav
11.09.2017
14:27:55
А нормально делать представление у реплицируемой таблицы тоже реплицированным? Синхронизация от этого не поломается?

Kirill
11.09.2017
14:42:08
Нет, не поломается

Александр
11.09.2017
14:43:38
Вобщем разобрался ) Если кому будет интересно как например растянуть эвент и посчитать время эвента по дням, учитывая время начала и время окончания эвента, то можно вот так) SELECT toDate(started) + days as date, if (started > toStartOfDay(toDateTime(date)), started, toStartOfDay(toDateTime(date))) as dateStarted, if (toStartOfDay(toDateTime(date)) + 86399 > ended, ended, toStartOfDay(toDateTime(date)) + 86399) as dateEnded, started as oStarted, ended as oEnded, if (toDate(oStarted) != toDate(dateEnded), dateEnded - dateStarted + 1, dateEnded - dateStarted) as dateDuration FROM ( SELECT toDateTime('2017-09-09 23:55:00') AS started, toDateTime('2017-09-12 14:00:00') AS ended, range(toUInt8(if(toDate(started) != toDate(ended), (toDate(ended) - toDate(started)) + 1, 1))) AS days, 223500 as duration ) ARRAY JOIN days

В финале должно получиться что-то вроде https://img.facedsid.ru/f2brp.jpg

Firej
11.09.2017
15:58:22
разобрались - в конфиге реплик был не правильный порт указан. Нужен 9000, а я обычный http порт прописал

prll
11.09.2017
15:58:41
Petr
11.09.2017
18:24:15
Привет всем, как импортитровать пустую строку из csv? Там в таком виде data,,,data, как бы два столбца пустые

Petr
11.09.2017
18:31:07
cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";

Tima
11.09.2017
18:41:41
И что пишет, когда выполняете эту команду?

Petr
11.09.2017
18:56:31
И что пишет, когда выполняете эту команду?
Все нормально, со структроро не совпадало, спасибо

Lexa
11.09.2017
19:08:28
Добрый вечер. Наткнулся на непонятное поведение Enum. :) select * from Order where Rebill='yes'; SELECT * FROM Order WHERE Rebill = 'yes' Received exception from server: Code: 49. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Unknown element 'yes' for type Enum8('no' = 0, 'yes' = 1). 0 rows in set. Elapsed: 0.068 sec. :) select Rebill,Count(*) from Order group by Rebill; SELECT Rebill, Count(*) FROM Order GROUP BY Rebill ┌─Rebill─┬─Count()─┐ │ no │ 390136 │ │ yes │ 302973 │ └────────┴─────────┘ 2 rows in set. Elapsed: 0.011 sec. Processed 693.11 thousand rows, 693.11 KB (61.00 million rows/s., 61.00 MB/s.) Что может быть?

Lexa
11.09.2017
19:32:23
при описании таблицы задаются значения enum. они при группировке присутсвуют. но при выборке вылетает эта ошибка. поменял поле в таблице на строку и запрос работает.

Felixoid
11.09.2017
20:04:06
ну, таки интересно https://pastebin.com/TEu0pu42 @milovidov_an эмм, там прямо хеши разные

Денис
11.09.2017
20:04:17
у меня подобная проблема и она не решилась, у меня эта бага вылетает во время инсерта через infi.clickhouse_orm, причем баг мигающий какой-то

silencer
12.09.2017
04:15:39
@miptgirl @milovidov_an @the_real_jkee clean time

Konstantin
12.09.2017
07:08:39
Всем привет! Если есть народ использующий в работе Microsoft PowerBI - создал голосвание на добавление коннектора к КХ: https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/31355041-add-connector-to-clickhouse p.s. если сами не используете, но знаете аналитиков которые используют - тоже киньте им ссылочку на голосование =)

Yurij
12.09.2017
08:56:43
Интересует по опыту, допустим, нет агрегаций в запросах и не планируется. Имеет ли смысл для репликации во избежание проблем со статическим dns использовать кафку а у подписчика будет простой инстанс КХ уже без репликаций. ( если рассмотреть для начала схему совсем утрированно, то льем данные на 2 сервера, а забираем с одного )

Google
Kotbegemot
12.09.2017
09:51:40
@milovidov_an спасибо за odbc драйвер

N
12.09.2017
10:00:59
Доброго дня! Подскажите, пожалуйста, "testdb.test1 20170701_20170731_698330_700900_322" - первое и второе число понятно что, а остальные?

hulponot
12.09.2017
10:03:40
Рассмотрим по порядку имя первого куска: 20140317_20140323_2_2_0. 20140317 - минимальная дата данных куска 20140323 - максимальная дата данных куска 2 - минимальный номер блока данных 2 - максимальный номер блока данных 0 - уровень куска - глубина дерева слияний, которыми он образован (из доки)

Страница 257 из 723