
Anton
18.01.2017
17:46:29
что-то вроде NVL()

Alexey
18.01.2017
18:22:36
Это частый баг репорт :(
Пока есть плохие способы через UNION ALL ещё одного запроса.

Darafei
18.01.2017
18:24:23
coalesce нет?

Alexey
18.01.2017
18:25:37
coalesce есть,
но скалярный подзапрос при отсутствии результата возвращает не NULL, а вообще ничего (после этого кидается исключение).
Только что подумал, что это легко исправить.

Google

Alexander
18.01.2017
23:28:26
Можно заменить 'dt = (select max() ... )' на 'dt in (select max() ... )' -- тогда ошибки нет, просто пустой результат

Roman
19.01.2017
04:26:55
Запрос dt in (select max() ...) не будет использовать индекс

Alexander
19.01.2017
06:11:30
Вот это куда более существенный баг, на мой взгляд.

Igor
19.01.2017
08:01:05
вместо T тип столбца в словаре
и в кавычках название словаря и атрибута
например, dictGetString('test', 'a', 1) или dictGetUInt64('test', 'a', 1)
в зависимости от того, какого типа у вас 'a' в словаре 'test'

Vladimir
19.01.2017
08:01:30
ок. понял)

Anton
19.01.2017
08:11:09

Roman
19.01.2017
08:23:50
Судя по коду должен быть задействован. Проверь ;)

Anton
19.01.2017
08:31:08
ясно :)

Andrey
19.01.2017
12:17:16
Добрый день. Подскажите в чём проблема:
Есть две таблицы:
CREATE TABLE fact (campaignId String, ...) ENGINE = Distributed(...)
CREATE MATERIALIZED VIEW campaignJoin (campaignId String, campaignName String) ENGINE = Join(ANY, LEFT, campaignId) AS ...
Пытаюсь выполнить запрос:
select campaignId, campaignName FROM (SELECT campaignId FROM fact) ANY LEFT JOIN campaignJoin USING campaignId
Получаю:
DB::Exception: Method read is not supported by storage Join
По документации, вроде корректно использовать таблицы с движком Join в качестве правой таблицы, как в запросе.

Igor
19.01.2017
15:59:58
а забрать поле по другому столцбу словаря (не id) не представляется возможным?
complex key не подходит, ибо другая часть составного ключа может быть неизвестна :(
соотв. надо несколько словарей создавать?

Виктор
19.01.2017
16:08:25
Да, несколько словарей

Алексей
19.01.2017
20:54:10
Доброго времени суток!
Подскажите пожалуйста
есть 2 таблицы,
1. переходы по ссылкам с clickID - id клика, countryID - код страны
2. успешные конверсии по переходам, clickID - id клика, payout - сумма оплаты
Нужен отчет по сумме конверсий по стране.
Для amazon redshift был такой
----------
select countryID , sum(p.payout) as payout from redirects sr, postbacks p
where sr.cid = p.cid
group by countryID
order by payout desc
------
Никак не соображу как сделать похожий запрос в clickhouse

Google

f1yegor
19.01.2017
21:01:13
select countryId, sum(p.payout) as payout from redirects ALL INNER JOIN postbacks USING (cid) group by countryID order by payout desc
надо почитать вот это https://clickhouse.yandex/reference_en.html#JOIN clause

Алексей
19.01.2017
21:07:38
спасибо))

Alexey
19.01.2017
21:07:56
Удобнее было бы, если конверсии и переходы пишутся в одну таблицу; столбец countryID заполняется у всех строк, а payout заполняется для конверсий и равен нулю для переходов.
Тогда запрос получается обычным GROUP BY, без JOIN.

f1yegor
19.01.2017
21:08:34
а есть возможность сравнить производительность redshift vs clickhouse?
@milovidov_an есть ли какие-то планы сделать explain/analyze для запросов?

Алексей
19.01.2017
21:14:39
У нас clickhouse в продакшн
Пробовали перейти на redshift, т.к. с ним куча аналитических сервисов работает, например, chartio
Споткнулись на вставке данных
тестировали
redshift cluster on 3 dc1.large machines
dc1.large has 15 Memory (GiB), 2 CPU, 160 GB SSD
clickhouse на одном DO droplet 16 GB Memory / 60 GB Disk + 200 GB
redshift не успевал обрабатывать запросы на вставку данных, нужно было мудрить с загрузкой данных сначала на s3 потом в redshift. Как-то сложно там все(( Зато кластер мышкой можно запустить через интерфейс

Alexey
19.01.2017
21:15:43

f1yegor
20.01.2017
08:44:15
доброе утро. вопрос: что случится если у меня прийдет 3 жирные query и их суммарное потребление будет больше чем на хосте?
будет очередь или фолт?
пытается ли scheduler вычислить сколько потребуется памяти для запроса?
когда я делаю
FROM (
SELECT
<right table columns>, *
FROM (
и * для <left-table columns> будут ли колонки которые не учитываются во внешней квери убраны?


Valeriy
20.01.2017
10:49:01
Не то баг, не то... баг. ClickHouse-client считает валидным подзапрос с несуществующим полем, если он указан в IN:
:) select Level from graphite_tree where Path in (select Path from graphite_tree where Version > asdfaf);
SELECT Level
FROM graphite_tree
WHERE Path IN
(
SELECT Path
FROM graphite_tree
WHERE Version > asdfaf
)
Ok.
При этом отдельно этот подзапрос выдает ошибку, конечно:
:) select Path from graphite_tree where Version > asdfaf;
SELECT Path
FROM graphite_tree
WHERE Version > asdfaf
Received exception from server:
Code: 47. DB::Exception: Received from localhost:19000, ::1. DB::Exception: Unknown identifier: asdfaf.
0 rows in set. Elapsed: 0.066 sec.

Алексей
20.01.2017
11:10:52
Господа, балуюсь с кликхаусом, поднял его в докере. понапихал данных, потыкал их перезапустил контейнер, база в которую пихал данные пропала. данные главно лежат
а в кликхаусе таблицы нету
пути все перепроверил всё должно быть

Google

Алексей
20.01.2017
11:11:21
куда смотреть ?

Dmitry
20.01.2017
11:12:23
А что в папке metadata?

Алексей
20.01.2017
11:14:02
а нету такой

Dmitry
20.01.2017
11:15:44
Ну без нее и таблиц не будет

Алексей
20.01.2017
11:16:59
ага

Dmitry
20.01.2017
11:20:35
В /opt/clickhouse/metadata лежит ddl для всех таблиц. Его кх применяет на старте

Vitaliy
20.01.2017
11:22:14
куда смотреть ?
ATTACH TABLE. Должно помочь если схемы таблиц где-то остались, если нет можно попробовать ее восстановить по /opt/clickhouse/data/<DB>/<table>/<NUMBERS>/columns.txt

Алексей
20.01.2017
12:09:51
тоесть вот так в docker-compose было мало ?
volumes:
- ./clickhouse/config:/etc/clickhouse-server
- /data/analitics/data:/opt/clickhouse/data

Dmitry
20.01.2017
12:10:18
/opt/clickhouse/metadata обязательно нужна
лучше целиком /opt/clickhouse/

Алексей
20.01.2017
12:11:02
ок
сейчас что бы данные старые вернуть можно попроьовать залить данные еще раз, получить работающий /opt/clickhouse/metadata/dbname.sql
и подсунуть старые данные
ага ?

Dmitry
20.01.2017
12:13:33
/opt/clickhouse/DB_NAME/TABLE_NAME.sql
в sql файле должен быть обычный create table, только вместо create - ATTACH

Dmitrii
20.01.2017
12:22:33
Как лучше поступить, если нужно ходить в кликхаус, расположенный на отдельной машине? открыть порт http интерфейса наружу или хайли рекоммендед закрыться nginx-ом?
планируется много записи и чтения

Константин
20.01.2017
12:29:29

Dmitry
20.01.2017
12:31:51

Google

Dmitry
20.01.2017
12:32:07

Константин
20.01.2017
12:32:30
Народ, использует ли кто http словари? Столкнулся с проблемой, если http отдал, допустим 500ю ошибку, то кликхаус не обновляет этот словарь долго и упорно.

Dmitry
20.01.2017
12:32:34
Смысла закрывать nginx не вижу

f1yegor
20.01.2017
12:33:56
кто может пояснить как делается join 3х таблиц на уровне данных? т.е. не ясен момент: в документации говорится что будет полная выборка правой таблицы и левая будет заджойнена стримом. если делаешь второй джойн, то значит все предыдущие данные должны умещаться в память?
я сейчас получаю "Memory limit (for query) exceeded: would use 9.34 GiB", знаю что могу увеличить. но надо же сначало понять

Dmitrii
20.01.2017
12:37:36
@AndreevDm Ок, спасибо!

Константин
20.01.2017
13:07:33
скажите, можно ли как-то из cli заставить clickhouse обновить словари?

Alexander
20.01.2017
13:09:52
Из клиента сейчас никак, но Яндекс собирается сделать команду
На сервере самое простое -- touch файла конфига.

Алексей
20.01.2017
13:11:01
а как сейчас можно обновить словари ?
просто тач ?

Alexander
20.01.2017
13:11:29
Да. Но вообще там стоит по дефолту раз в 5 минут обновление (в xml словаря)

Константин
20.01.2017
13:11:36
у меня http словарь

Алексей
20.01.2017
13:11:55
у меня стояло 3600 и словарь обновлялся очень давно.

Igor
20.01.2017
13:12:03
да без разницы какой источник, не?

Константин
20.01.2017
13:12:33
тогда вообще странно, так как у меня lifetime стоит min=30 max=60

Igor
20.01.2017
13:12:48
или если получил 500 от хттп источника, обновляет еще реже, чем раз в минуту?

Константин
20.01.2017
13:13:14
до сих пор выдает: Code: 86. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: Received error from remote server http://local-host/publisher_sites.php. HTTP status code: 500, body: .
если дернуть курлом ссылку, все ок

Shine
20.01.2017
13:27:55
В формате json возвращается параметр rows_before_limit_at_least. Насколько понял, он вычисляется приближенно и часто он возвращает какие-то левые значения. Подскажите, можно ли как-то получить гарантированно точное количество строк (до применения лимита) в одном запросе с применением limit ?

Google

Dmitry
20.01.2017
13:29:48
select count() ...

Алексей
20.01.2017
13:41:30

Alexander
20.01.2017
14:15:53
какие люди)

Yury
20.01.2017
14:17:35
какие люди)
Привет! :) Присматриваемся к ch для своих задач

f1yegor
20.01.2017
15:12:10
@milovidov_an кто может пояснить как делается join 3х таблиц на уровне данных? т.е. не ясен момент: в документации говорится что будет полная выборка правой таблицы и левая будет заджойнена стримом. если делаешь второй джойн, то значит все предыдущие данные должны умещаться в память?
еще как быстрое улучшение прогресса, можно добавить memory_usage в вывод?

Yury
20.01.2017
17:54:32
Подскажите, пожалуйста, кто-нибудь экспериментировал с настройкой sql ide (например datagrip) + jdbc драйвер ch ? Вообще тема рабочая?

Artem
20.01.2017
17:57:24
А неплохо было бы перевести click house на блокчейн
Реализовать нечто подобное http://www.bigchaindb.com
Но это наверное все переписывать надо

nikoinlove
20.01.2017
17:58:47
один парень хотел переписать кликхаус на блокчейн