
Aliaksandr
09.10.2017
13:31:28

Dasha
09.10.2017
14:20:21
Привет! Подскажите пожалуйста, как подключить Tableau к CLickHouse. Я видела, что кому-то удалось. В Tableau есть Connection->More->ODBC, но дальше не совсем понятно, что делать. В строке Driver прописать путь до clickhouse-odbc.so?

Navern
09.10.2017
15:22:15
Привет=)
тоже возник вопрос. Кликхаус сервер упал с сегфолтом, после чего запрос к вьюшке отваливается:
DB::Exception: Unknown identifier (in GROUP BY): seller.
причем точно такая же пересозданная вьюшка работает нормально, и сам запрос из вьюшки корректно отрабатывается.
Где найти вьюшку на диске и как такое вообще можно подебажить?
на диске нашел только SQL файл

Google

Navern
09.10.2017
15:30:40
он это в памяти как то делает?

Artem
09.10.2017
15:32:33
Коллеги, раз вопрос пошел про BI может кто-то уже подсоеденял Qlik Sense или Qlik View к ClickHouse. Есть опыт, кейсы?

Bulat
09.10.2017
15:59:26
подскажите пожалуйста, а как в след запросе выставить условие на оригинальную дату:
SELECT toStartOfMonth(date) AS date FROM target.events_local WHERE date>'2017-10-09'
при такой записи date получается уже после применения функции

Bulat
09.10.2017
16:01:53
вроде никак. Только если в подзапрос обернуть

Tima
09.10.2017
16:01:57

Bulat
09.10.2017
16:02:07
не могу

Navern
09.10.2017
16:02:17
http://clickhouse.readthedocs.io/en/latest/reference_en.html#HAVING%20clause

Bulat
09.10.2017
16:02:46
having после группировки

Bulat
09.10.2017
16:03:21
SELECT toStartOfMonth(date) AS date FROM ( select * from target.events_local WHERE date>'2017-10-09')

Bulat
09.10.2017
16:06:17
в документации написанно что where применяется перед всеми остальными преобразованиями, а тут получается не совсем так :(

Google

Edya
09.10.2017
16:07:42

Artem
09.10.2017
16:18:50
За ссылку на ODBC спасибо.

Max
09.10.2017
16:25:26
Ребята, подскажите. не совсем понимаю куда копать
есть много табличек с именем name_date
делаю
select name from system.tables where database = ‘db’ and name like ‘name_%’
получаю 11348 rows in set
и есть табличка типа merge которая смотрит на ‘^name_’
но
select count(distinct(_table)) from merge_table
11,056
и вот не понимаю куда копать

Dasha
09.10.2017
16:29:01

Konstantin
09.10.2017
17:07:08
Добавляйте через вкладку User DSN

Dasha
09.10.2017
17:07:21
спасибо!

Konstantin
09.10.2017
17:27:34
и вот не понимаю куда копать
а такой запрос что нибудь даст?
SELECT name FROM system.tables WHERE database='db' AND name LIKE 'name_%' AND name NOT in (SELECT _table FROM merge_table)

Max
09.10.2017
17:40:04

Konstantin
09.10.2017
17:44:07

Max
09.10.2017
17:44:30
не/ я имею ввиду что таблицы оказались пустые
а запрос помог определить их

Konstantin
09.10.2017
17:45:01
а)
я не догнал)

Google

Konstantin
09.10.2017
17:45:16
рад, что помогло =)

Dasha
09.10.2017
18:04:32
В каком формате пишется хост? Например, localhost ? И мне, честно говоря, не совсем понятно, мы же при создании DSN не указываем путь до драйвера

Konstantin
09.10.2017
18:06:45

Dasha
09.10.2017
18:06:51
Да

Konstantin
09.10.2017
18:07:57
путь для драйвера не требуется, все уже установилось вам необходимо указать только параметры подключения к КХ

Dasha
09.10.2017
18:11:10
Я вроде так и делала, пока не вышло. Все равно большое спасибо

Konstantin
09.10.2017
18:11:54
убедитесь еще чтобы разрядность odbc драйвера соответствовала разрядности табло, 32-32 или 64-64

Dasha
09.10.2017
18:12:11
соответствует

Konstantin
09.10.2017
18:17:09
соответствует
попробуйте драйвер поменять вы когда создавали источник данных какой выбирали? ANSI или UNICODE?

Dasha
09.10.2017
18:25:17
UNICODE
но мне кажется, он автоматически выбрался
Помогло, спасибо огромное!
Надо было выбрать ANSI

Konstantin
09.10.2017
18:29:48

Max
09.10.2017
22:14:00
еще более интересно что сегодня такой запрос работал


Sergei
09.10.2017
22:55:34
Вот есть пример запроса
отличие только в toString
но с toString не работает, хотя поидее должно
версия с toString немного абсурдна, но все же
SELECT
site_area_id AS partial_item_id,
any(ptz_date),
any(timeSlot(event_time)),
any(user_id),
any(site_id),
any(site_area_id),
any(geo_id),
any(browser_id),
any(url),
any(total) AS total,
visitParamExtractString(bids, 'ds') AS demand_source,
uniqExact(session_id, site_area_id, demand_source) AS total_bidded,
round((total_bidded / total) * 100, 2) AS total_bidded_rate,
uniqExactIf(session_id, site_area_id, demand_source, visitParamExtractFloat(bids, 'cpm') > 0) AS total_non_zero_bidded,
round((total_non_zero_bidded / total) * 100, 2) AS total_non_zero_bidded_rate,
uniqExactIf(session_id, site_area_id, max_bidder, max_bidder = demand_source) AS total_won,
round((total_won / total) * 100, 2) AS total_win_rate
FROM hb_sessions_merged AS st
ANY LEFT JOIN
(
SELECT
site_area_id AS partial_item_id,
uniqExact(session_id, site_area_id) AS total
FROM hb_sessions_merged
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY partial_item_id
) USING (partial_item_id)
ARRAY JOIN bids
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY
partial_item_id,
demand_source
HAVING demand_source != ''
LIMIT 100000
SELECT
toString(site_area_id) AS partial_item_id,
any(ptz_date),
any(timeSlot(event_time)),
any(user_id),
any(site_id),
any(site_area_id),
any(geo_id),
any(browser_id),
any(url),
any(total) AS total,
visitParamExtractString(bids, 'ds') AS demand_source,
uniqExact(session_id, site_area_id, demand_source) AS total_bidded,
round((total_bidded / total) * 100, 2) AS total_bidded_rate,
uniqExactIf(session_id, site_area_id, demand_source, visitParamExtractFloat(bids, 'cpm') > 0) AS total_non_zero_bidded,
round((total_non_zero_bidded / total) * 100, 2) AS total_non_zero_bidded_rate,
uniqExactIf(session_id, site_area_id, max_bidder, max_bidder = demand_source) AS total_won,
round((total_won / total) * 100, 2) AS total_win_rate
FROM hb_sessions_merged AS st
ANY LEFT JOIN
(
SELECT
toString(site_area_id) AS partial_item_id,
uniqExact(session_id, site_area_id) AS total
FROM hb_sessions_merged
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY partial_item_id
) USING (partial_item_id)
ARRAY JOIN bids
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY
partial_item_id,
demand_source
HAVING demand_source != ''
LIMIT 100000


papa
09.10.2017
23:38:02
а что такое "не работает"

Sergei
09.10.2017
23:42:21
а что такое "не работает"
он не видит колонки во внешнем запросе -
toString(site_area_id)
если убрать toString, то все будет ок
либо написать допустим
concat(toString(site_area_id), '')

Google

Sergei
09.10.2017
23:44:14
а что такое "не работает"
Code: 10. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Not found column toString(site_area_id) in block. There are only columns: session_id, site_area_id, event_time, site_id, url, geo_id, browser_id, bids, max_bidder, ptz_date, user_id.


Ilya
09.10.2017
23:55:49
Вот есть пример запроса
отличие только в toString
но с toString не работает, хотя поидее должно
версия с toString немного абсурдна, но все же
SELECT
site_area_id AS partial_item_id,
any(ptz_date),
any(timeSlot(event_time)),
any(user_id),
any(site_id),
any(site_area_id),
any(geo_id),
any(browser_id),
any(url),
any(total) AS total,
visitParamExtractString(bids, 'ds') AS demand_source,
uniqExact(session_id, site_area_id, demand_source) AS total_bidded,
round((total_bidded / total) * 100, 2) AS total_bidded_rate,
uniqExactIf(session_id, site_area_id, demand_source, visitParamExtractFloat(bids, 'cpm') > 0) AS total_non_zero_bidded,
round((total_non_zero_bidded / total) * 100, 2) AS total_non_zero_bidded_rate,
uniqExactIf(session_id, site_area_id, max_bidder, max_bidder = demand_source) AS total_won,
round((total_won / total) * 100, 2) AS total_win_rate
FROM hb_sessions_merged AS st
ANY LEFT JOIN
(
SELECT
site_area_id AS partial_item_id,
uniqExact(session_id, site_area_id) AS total
FROM hb_sessions_merged
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY partial_item_id
) USING (partial_item_id)
ARRAY JOIN bids
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY
partial_item_id,
demand_source
HAVING demand_source != ''
LIMIT 100000
SELECT
toString(site_area_id) AS partial_item_id,
any(ptz_date),
any(timeSlot(event_time)),
any(user_id),
any(site_id),
any(site_area_id),
any(geo_id),
any(browser_id),
any(url),
any(total) AS total,
visitParamExtractString(bids, 'ds') AS demand_source,
uniqExact(session_id, site_area_id, demand_source) AS total_bidded,
round((total_bidded / total) * 100, 2) AS total_bidded_rate,
uniqExactIf(session_id, site_area_id, demand_source, visitParamExtractFloat(bids, 'cpm') > 0) AS total_non_zero_bidded,
round((total_non_zero_bidded / total) * 100, 2) AS total_non_zero_bidded_rate,
uniqExactIf(session_id, site_area_id, max_bidder, max_bidder = demand_source) AS total_won,
round((total_won / total) * 100, 2) AS total_win_rate
FROM hb_sessions_merged AS st
ANY LEFT JOIN
(
SELECT
toString(site_area_id) AS partial_item_id,
uniqExact(session_id, site_area_id) AS total
FROM hb_sessions_merged
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY partial_item_id
) USING (partial_item_id)
ARRAY JOIN bids
WHERE (1 = 1) AND (ptz_date >= '2017-09-25') AND (ptz_date <= '2017-10-02') AND (user_id = 106736)
GROUP BY
partial_item_id,
demand_source
HAVING demand_source != ''
LIMIT 100000
А у вас структура таблицы не менялась?


papa
10.10.2017
00:27:18
Code: 10. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Not found column toString(site_area_id) in block. There are only columns: session_id, site_area_id, event_time, site_id, url, geo_id, browser_id, bids, max_bidder, ptz_date, user_id.
кажется тут комбинация алиаса + join + group by немного сбивает с толку. надежнее джойнить два подзапроса.

Ilya
10.10.2017
01:17:28
А никто не сталкивался с проблемой: В Merge таблице два столбца _table. Видимо из-за этого не работают некоторые запросы.

Alex
10.10.2017
04:46:04
Доброе утро коллеги.
Подскажите можно ли прямо в запросе указать максимальное число ядер, которое оно может использовать?
или приоритет. Есть задача брать с удаленного сервера по сложному запросу данные в кеш. Но этот запрос не является приоритетным и хочеться его как то ограничить, чтобы не клал все, что только можно.

Eugene
10.10.2017
05:16:48
Доброе утро, у меня есть некая инсталяция CH, средняя суточная нагрузка на CH некое значение предположим Х, в определенное время суток 0.1Х в пиковое время 10х, в современных реалиях провижн и депровижен серверов не большая проблема, коллеги, кто то сталкивался с подобным или может подсказать в каком направлении смотреть?

Vladislav
10.10.2017
06:34:25

Eugene
10.10.2017
06:42:54
Да не про железо я, я про то что будет ли эффект от добавления реплик(хотя про чтение понятно конечно что есть а вот про запись), или только шардинг поможет а автошардинга нет и мне не стоит мечтать, или еще что то

Evgeniy
10.10.2017
06:43:18

Alex
10.10.2017
06:53:35
Спасибо Евгений

Геннадий
10.10.2017
07:05:26
Здравствуйте. А кто нибудь знает как заэскэйпить % в like запросе?

Vlad
10.10.2017
07:08:07
\% же
Здравствуйте. А кто нибудь знает как заэскэйпить % в like запросе?


Геннадий
10.10.2017
07:12:21
проблема с запросом
select HostName, ClientIp, count() cnt from metrika.access_log
where (UriParam like '%%3c%2fdoc%3e%2f%2f%5b%22%27%60--%3e%5d%5d%3e%5d%3c%2fdiv%3e%' or UriParam like '%<div id="69"><card xmlns="http://www.wapforum.org/2001/wml"><onevent type="ontimer"><go href="javascript:alert(69)"/></onevent><timer value="1"/></card>//["\'-->]]>]</div><div id="70"><div style=width:1px;filter:glow onfilterchange=alert(70)>x</div>//["\'-->]]>]</div><div id="71"><// style=x:expression\\28alert(71)\\29>//["\'-->]]>]</div><div id="72"><form><button formaction="javascript:alert(72)">x</button>//["\'-->]]>]</div><div id="73"><event-source src="event.php" onload="alert(73)">//["\'-->]]>]</div><div id="74"><a href="javascript:alert(74)"><event-source src="data:application/x-dom-event-stream,event:click%0adata:xxx%0a%0a" /></a>//["\'-->]]>]</div>%' )
and Timestamp between '2017-09-18 07:06:24' and '2017-09-20 07:06:24'
group by HostName, ClientIp
выдаёт ошибку
Code: 1000, e.displayText() = DB::Exception: Received from clickhouse8:9000, 192.168.231.102. DB::Exception: Exception: OptimizedRegularExpression: cannot compile re2: <div id="69"><card xmlns="http://www\.wapforum\.org/2001/wml"><onevent type="ontimer"><go href="javascript:alert\(69\)"/></onevent><timer value="1"/></card>//\["'-->]]>]</div><div id="70"><div style=width:1px;filter:glow onfilterchange=alert\(70\)>x</div>//\["'-->]]>]</div><div id="71"><// style=x:expression\28alert\(71\)\29>//\["'-->]]>]</div><div id="72"><form><button formaction="javascript:alert\(72\)">x</button>//\["'-->]]>]</div><div id="73"><event-source src="event\.php" onload="alert\(73\)">//\["'-->]]>]</div><div id="74"><a href="javascript:alert\(74\)"><event-source src="data:application/x-dom-event-stream,event:click.*0adata:xxx.*0a.*0a" /></a>//\["'-->]]>]</div>, error: invalid escape sequence: \2.,
если убрать \2 или %, то всё норм. Но \% не срабатывает почему то
О, \\% - вот так сработало
спасибо!


Саша
10.10.2017
07:15:58
Подскажите, пожалуйста, как лучше в clickhouse решить следующую задачу.
Есть объект у которого могут меняться статусы. Есть лог перевода статусов.
┌─name────────────┬─type──────────┬─default_type─┬─default_expression─┐
│ id │ String │ │ │
│ datetime │ DateTime │ │ │
│ date │ Date │ │ │
│ status │ Int8 │ │ │
│ client_id │ String │ │ │
└─────────────────┴───────────────┴──────────────┴────────────────────┘
Объект может возвращаться в какой-либо статус неогранченное кол-во раз. Пример статусов: initial, active, premium, banned.
Необходимо посчитать кол-во клиентов с определенным КОНЕЧНЫМ статусом в периоде с группировкой по периоду (день, неделя).
т.е. если за текущий день пользователь менял статус как initial -> active, а на следующий день active -> premium,
то за сегодня мы считает кол-во статусов active, а завтра уже premium.
Хотел использовать anyLast, но там получается недетерминированный результат. Насколько я понимаю, то мне необходимо использовать
argMax(status, datetime) ?


Александр
10.10.2017
07:51:35
Можно через argMax, а можно просто через limit 1 by и order by ... desc попробовать

Google

Александр
10.10.2017
07:52:01
Получить подзапросом список последних статусов на каждый день
Приджоинить это к таблице и сделать count

Bulat
10.10.2017
08:08:35
не работает запрос:
SELECT toStartOfMonth(date) AS date FROM ( select * from target.events_local WHERE date>'2017-10-09')
говорит unknown identifier 'date',
но при этом если написать
SELECT toStartOfMonth(date) AS date FROM ( select date from target.events_local WHERE date>'2017-10-09')
то все работает. :(
разобрался, поле date - материализованное, и оно по * не выбирается

Alex
10.10.2017
08:30:16
select toStringCutToZero(country) as country from audience_statistic_segments group by country можно ли как то оптимизировать такой запрос?
124 rows in set. Elapsed: 107.657 sec. Processed 6.72 billion rows, 470.42 GB (62.42 million rows/s., 4.37 GB/s.)
можете оценить скорость работы?
хотя тут от железа зависит еще много.
можно ли оптимизировать как-то запрос выше?

Саша
10.10.2017
08:37:45

Alex
10.10.2017
08:38:01
нет
SELECT DISTINCT toStringCutToZero(country) AS country
FROM audience_statistic_segments
вот так?