
Виктор
23.01.2017
11:33:28
FINAL не используется.
Когда действительно надо, делаем GROUP BY
По таблице визитов или событий
Или используются другие ущихрения.

Google

Valeriy
23.01.2017
11:34:45
Это, конечно, баг. Должен был бы ругаться. Но у меня не получается воспроизвести такое поведение. Если пришлёте схему таблиц, то будет лучше. Кстати, может быть, это проявляется только для пустой таблицы graphite_tree?
Да, только для пустой таблицы воспроизводится. Для таблицы с одной записью пишет про unknown identifier.
Схема таблицы graphite_tree как в https://github.com/lomik/carbon-clickhouse :
CREATE TABLE graphite_tree (
Date Date,
Level UInt32,
Path String,
Deleted UInt8,
Version UInt32
) ENGINE = ReplacingMergeTree(Date, (Level, Path), 8192, Version);

Abdulla
23.01.2017
11:37:07
Ребята разработчики ch, а вы в курсе что у вас в deb-пакете лежит непострипанный бинарь в 600Мб?

prll
23.01.2017
11:40:09
да, это для более лучшего дебага

Abdulla
23.01.2017
11:40:43
ну так правильнее было бы вынести всё в отдельный deb-пакет dbg ?
https://wiki.debian.org/DebugPackage

Боб
23.01.2017
11:44:44
Посетители у нас нигде не лежат
Виктор, визиты это что-то уже посчитанное или просто access-log в базе данных?
у меня при попытке сделать агрегацию через временные запросы (как в примере выше - когда надо посчитать посетителей с двумя кликами) памяти съедается примерно 10Гб/сутки. Т.е. чтобы построить статистику за месяц потребуется около 300Гб памяти.
Ощущение что я делаю что-то не так.

Виктор
23.01.2017
11:45:31
Уже посчитанное.

Боб
23.01.2017
11:47:30
А схема того как вы статистику храните внутри кликхауса это секрет или можете рассказать/показать?
Т.е. чтобы понять уже работающий эффективный метод - что лучше считать заранее, а что брать из сырых логов.

prll
23.01.2017
11:48:41


papa
23.01.2017
12:19:09
Ребят, подскажите, у меня есть поля с массивы строк, хочется, что бы мы фильтровали по этим полям с логикой И (как в постгресе есть @> - contains), т е чтобы мы условие возвращало истину ,только если все искомые элементы есть в массиве
Когда делаем так
select query_id, tags, arrayAll(x -> has(['3rd generation', '5th generation'], x), tags) as has_tags from queries_1 limit 10;
мы ограничены количеством элементов массива tags. Если количество элементов массива tags меньше, чем количество запрашиваемых элементов, то мы получим те строки массива tags, которые содержат хотя бы один элемент. А нам нужно обязательно, чтобы в результате выдавались только те строки, которые имееют все запрашиваемые теги (тут мы не фильтруем, а для теста выводим булеву колонку, но не суть)
SELECT
tags,
arrayAll(x -> has(tags, x), ['a', 'b', 'c']) AS has_tags
FROM
(
SELECT ['a', 'b', 'c', 'd'] AS tags
UNION ALL
SELECT ['a', 'b']
)
┌─tags──────────────┬─has_tags─┐
│ ['a','b','c','d'] │ 1 │
└───────────────────┴──────────┘
┌─tags──────┬─has_tags─┐
│ ['a','b'] │ 0 │
└───────────┴──────────┘


Nikita
23.01.2017
12:20:40
Вопрос: (u)int64 — это предел? Как можно работать с большими числами в Кликхаусе?

Shine
23.01.2017
12:21:39
SELECT
tags,
arrayAll(x -> has(tags, x), ['a', 'b', 'c']) AS has_tags
FROM
(
SELECT ['a', 'b', 'c', 'd'] AS tags
UNION ALL
SELECT ['a', 'b']
)
┌─tags──────────────┬─has_tags─┐
│ ['a','b','c','d'] │ 1 │
└───────────────────┴──────────┘
┌─tags──────┬─has_tags─┐
│ ['a','b'] │ 0 │
└───────────┴──────────┘
О, тоже интересный вариант, спасибо! :)

Боб
23.01.2017
12:28:32
как можно привести тип столбца к enum?
сделал таблицу с EventType String, а там всего десяток разных значений. Хотелось бы оптимизировать. Сделал новую таблицу с EventType Enum('a' =1, 'b' = 2, ...), все остальные поля оставил теми же.
При insert into log2 select * from log получаю ошибку о несовместимости типов поля EventType - стринг и enum.
функций вроде toEnum для смены типа данных не нашел.

Google

Igor
23.01.2017
12:28:59
через CAST
CAST('a' AS Enum('a'=1, 'b'=2, ...))
но так надо было раньше, должен быть проще способ (надеюсь :о)

Yury
23.01.2017
12:49:11
У меня есть каталог с bz2 архивами, внутри файлов колонки с разделителем. Как лучше загрузить их в CH?

Igor
23.01.2017
12:54:06
bz2cat path/to/logfile.bz2 | clickhouse-client -q 'INSERT INTO ...'?
(или bzcat, зависит от ОС)

Yury
23.01.2017
12:59:07
А через запрос к внешним данным не будет быстрее? Или неверно когда с CH работаешь?
хотя с stdin красиво выглядит

Andrey
23.01.2017
13:43:09
Добрый вечер. Есть ли возможность переименовать столбец в таблице? В документации нашёл только как тип поменять и выражение по умолчанию.

Igor
23.01.2017
13:43:42
нельзя
можно сделать новую таблицу, сделать insert into select, грохнуть старую таблицу

Andrey
23.01.2017
13:44:02
Спасибо

Dmitry
23.01.2017
14:18:56

Andrey
23.01.2017
14:21:29
@AndreevDm Спасибо. Уже запустил create as select. Вообще странно, что тип у столбца можно поменять, значение по умолчанию - тоже, а вот переименовать - нет.

Боб
23.01.2017
16:49:11
Есть числовые оценки погрешности разных вариантов uniq?

Valeriy
23.01.2017
16:49:22
Меньше процента.
На 15-60 млн уников.

Боб
23.01.2017
16:50:50
Это во всех вариантах меньше процента получается?

Valeriy
23.01.2017
16:51:38
Да. Ну, в моих экспериментах тах. Зачастую сильно меньше процента, 0.1% или даже 0.02%.
Максимум видел 0.75%.
На uniqHLL12

Боб
23.01.2017
16:52:22
Хорошо, спасибо.

Google

Valeriy
23.01.2017
16:52:32
Но мои эксперименты - это всего три датасета, этого мало наверное.

Боб
23.01.2017
16:53:20
Для себя я еще проверю на своих данных, сейчас просто порядок примерности понять хотелось
погонял на разных данных.
Щас вот попал что uniqHLL12 дала погрешность 2% на 71 млн. уников
на 268 млн.уников:
uniq: 0.83%
uniqCombined: 3.1%
uniqHLL12: 1.27%
на 280млн уников: (другой набор данных)
ошибки
uniq: 0.87%
uniqCombined: 3.4%
uniqHLL12: 3.83%
так что документация ошибается на счет того что uniqCombined в несколько раз точнее uniq
источник данных - результат от sipHash64(строка)


Alexey
23.01.2017
18:57:20
У нас есть всякие графики на этот счёт. Но их много, они непонятные, и я уже забыл про них.
В качестве измерения интересует распределение вероятности погрешности в зависимости от количества значений, на некоторых реальных наборах данных. Там получается трёхмерная диаграмма или набор из кучи линий.
Функцию uniqCombined мы изначально задумывали, как вариант, который в несколько раз более точный, чем uniq. Может быть, изначальная задумка уже не актуальна.
Провёл несколько измерений. В двух из трёх случаев, uniqCombined оказался точнее uniq. Это мало о чём говорит.


Боб
24.01.2017
07:07:41
А есть оценки максимальных погрешностей?
т.е. например: с вероятностью 0.99999 при количестве разных значений до 1 млрд. ошибка будет укладываться в 5% для такой-то функции, 1% для другой
и для распределений например для осмысленных строк (email, login, ФИО), упорядоченных чисел (id натуральные, которые выдаются более-менее по-порядку) и для бессмысленных хорошо распределенных чисел - хешей sip, md5, md5half

Fike
24.01.2017
07:46:59
Можно просто подсмотреть формулы в спеках по алгоритмам http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf

Боб
24.01.2017
10:15:02
Про индексы, разбиения на куски я правильно понял что если сделать например разбиение по EventDate, в внутри индекса например только Timestamp, то при фильтру по Timestamp
кликхаус просто для каждого кусочка посмотрит граничные значения Timestamp и целиком этот столбец для фильтрации доставать уже не будет?

Алексей
24.01.2017
10:18:31
Добрый день!
Когда подключаешь внешние данные из словарей на mongodb параметры <lifetime>
<min>300</min> <max>360</max></lifetime> влияют на что-то?
И в какой момент clickhouse обновляет данные из такого словаря?

Боб
24.01.2017
10:18:45
Альтернативу я вижу задавать индекс по EventDate,Timestamp, но тогда придется писать каждый раз доп. условия на дату и всегда будет доставаться доп. столбец.

f1yegor
24.01.2017
10:20:14

Igor
24.01.2017
11:01:54

Алексей
24.01.2017
11:26:18

Алексей
24.01.2017
11:28:05
у нас тоже указано обновлять раз в час, но увы.

Kirill
24.01.2017
12:02:32
Всем привет, если кому-нибудь вдруг понадобится еще один клиент для CH на Go https://github.com/kshvakov/clickhouse
из отличий от клиента Roistat (https://github.com/roistat/go-clickhouse):
* совместим со стандартным database/sql, т.е. можно использовать как с "сырым" sql.Open("clickhouse", dsn), так и с более удобными "обвязками" вроде sqlх (https://github.com/jmoiron/sqlx)
* использует нативный протокол
на данный момент поддерживаются типы:
* UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
* Float32, Float64
* String
* FixedString(N)
* Date
* DateTime
* Array(T)
из планов на будущее:
* поддержка нового интерфейса database/sql в Go 1.8 (https://docs.google.com/document/d/1F778e7ZSNiSmbju3jsEWzShcb8lIO4kDyfKDNm4PNd8/edit#)
* поддержка сжатия


Igor
24.01.2017
12:17:06
Может кого-то из сообщества заинтересует, идея сделать MySQL Federated->CH, есть проект "Federated mysql compatible proxy to elasticsearch, mongo, kube-apis, big-table, google datastore" , пытался сам сделать но моих знаний GO не хватило )
https://github.com/dataux/dataux

Dmitrii
24.01.2017
12:19:31

Google

Dmitry
24.01.2017
12:21:44
В секцию с пользователем
<allow_databases>
<database>DB_NAME</database>
</allow_databases>

Dmitrii
24.01.2017
12:29:56
круто, спс!

Kirill
24.01.2017
12:35:34
Может кого-то из сообщества заинтересует, идея сделать MySQL Federated->CH, есть проект "Federated mysql compatible proxy to elasticsearch, mongo, kube-apis, big-table, google datastore" , пытался сам сделать но моих знаний GO не хватило )
https://github.com/dataux/dataux
интересная штуковина, у автора есть вот такая классная библиотека https://github.com/araddon/qlbridge . У нас вот нет MySql, поэтому, возможно, FDW для Postgres появится )


f1yegor
24.01.2017
13:39:59
делаю
insert into session_promotions (
ts, container_id, promotion_id, visitor_id, session_id, session_ts
)
select * from (select promotion_ts, container_id, promotion_id, visitor_id, session_id, ts
from sessions ALL LEFT JOIN (
select
ts AS promotion_ts, container_id, promotion_id, visitor_id, session_id from promotions
) USING (session_id) WHERE date = '2017-01-20' limit 4);
получаю DB::Exception: There is no column with name promotion_ts.
т.е. селект с переименованием колонки выполняется нормально, а вот вставка по позициям не идет

Igor
24.01.2017
13:42:23
INSERT INTO session_promotions (ts, ...)
SELECT * FROM (SELECT promotion_ts AS ts, ...)
так не получится?
и ts AS session_ts, соответственно
т.е. имена столбцов совпадать должны
тоже недавно на этом напоролся

f1yegor
24.01.2017
13:44:35
ага, спасибо,
вообщем проблема понятно, заведу багу
дальше будет проблема потому что в кликхаусе можно переиспользовать столбец спереди: select promotion_ts AS ts, session_id, ts AS session_ts
т.е. если столбцы будут совпадать в двух таблицах, то очень костыльно

papa
24.01.2017
13:51:50

Dmitry
24.01.2017
13:51:59

f1yegor
24.01.2017
13:52:30
дмитрий, а вы из yandex?

Dmitry
24.01.2017
13:52:39
Да, но не из команды КХ

f1yegor
24.01.2017
13:52:54
в смысле я вас услышал, но багу заведу

Google

Igor
24.01.2017
13:53:00
:D

f1yegor
24.01.2017
14:07:05
а еще плохо что нельзя поменять даже выражение у колонки в ключе alter table session_promotions MODIFY COLUMN date Date MATERIALIZED toDate(toDateTime(ts / 1000));

Dmitry
24.01.2017
15:40:05
default_expr менять можно же

Dmitrii
24.01.2017
16:39:46
Кажется странным, что кликхаус возвращает 500 при попытке обратиться через ридонли пользователя с запросом типа insert или к базе, до которой пользователь не допущен. что-то типа 403 было бы логичнее.
*ответчает, а не возвращает
Прочитал Pinned message - захотелось нафлудить ?

prll
24.01.2017
16:47:52

Fike
24.01.2017
17:09:31

Dmitrii
24.01.2017
17:11:06

Константин
24.01.2017
18:14:15
Добрый вечер! Видел тут мелькал DataSource для Grafana
установил, не могу разобраться как можно переименовать count() во что-нибудь понятное
сейчас все выглядит как-то так:
https://yadi.sk/i/TDqzG-Jq3Ahqx5
пробовол уже в запрос добавлять count() as blablabla
но не помогает....

Vladimir
24.01.2017
19:15:12

Roman
24.01.2017
19:22:50
Константин Митюрин, [Jan 24, 2017, 20:15]:
пробовол уже в запрос добавлять count() as blablabla
Вам необходимо переключиться в режим редактора запросов и там использовать "as blabla". В режиме конструктора и правда игнорируется ручной ввод.