
Dmitry
13.02.2017
13:09:02
/stat@combot

Combot
13.02.2017
13:09:04
combot.org/chat/-1001080295593

Andrey
13.02.2017
13:09:31
/stat@combot

Combot
13.02.2017
13:09:31
combot.org/chat/-1001080295593

Google


Alexey
13.02.2017
13:43:29
Всем привет!
Создаю внешний ODBC словарь из постгресовой таблицы и получаю следующую ошибку:
2017.02.13 13:55:47.244599 [ 4 ] <Trace> ODBCDictionarySource: SELECT id, user_id, moderator_id FROM core.sites;
2017.02.13 13:55:47.282092 [ 4 ] <Error> ExternalDictionaries: Failed reloading 'sites' dictionary: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = ODBC handle exception: SQLExecute()
Requested SQL statement: SELECT id, user_id, moderator_id FROM core.sites;
Native SQL statement: SELECT id, user_id, moderator_id FROM core.sites;
: Connection:Not applicable
Server:myconnection
===========================
ODBC Diagnostic record #1:
===========================
SQLSTATE = 42601
Native Error Code = 1
ERROR: syntax error at or near "`";
Error while preparing parameters
Решение пока найти не могу, может кто-то уже сталкивался с подобной проблемой?
И еще один вопрос:
Можно ли в качестве источника данных использовать запрос, а не таблицу?
Наверное, вы указали в качестве имени таблицы core.sites. А надо отдельно: <db>core</db> <table>sites</table>
> И еще один вопрос:
Можно ли в качестве источника данных использовать запрос, а не таблицу?
Можно указать произольное выражение для WHERE и для столбцов в SELECT. Это отсутствует в документации. Делается так:
- для атрибута можно указать <expression> с выражением, которое подставится в SELECT
- для источника можно указать <where> с выражением, которое добавляется в WHERE.


Andrey
13.02.2017
13:47:51
Это схема

Alexey
13.02.2017
13:48:24
Возможно, если указать db, то в качестве scheme тоже подойдёт. Хотя не уверен.
Либо указать то, что надо в connection_string.

Andrey
13.02.2017
13:48:47
db у меня тоже есть :)

Alexey
13.02.2017
13:49:09
Наверное, в connection_string есть специальный параметр для scheme.

Andrey
13.02.2017
13:51:36
@milovidov_an, спасибо за помощь! Да, можно схему указать как db. Это работает! :)

Alexey
13.02.2017
13:52:41
Кстати, в одном из последних релизов должно было бы и так работать.
Суть в том, что раньше для квотирования имён применялся одинаковый способ - обратными кавычками, как в MySQL, что неверно для ODBC источника (там можно спросить у ODBC драйвера, какой стиль нужен). А теперь это частично исправлено - сделано так, что для ODBC источника в запросе не используется никакое квотирование для идентификаторов.

Andrey
13.02.2017
16:35:34
Тут письмо интересное пришло
https://events.yandex.ru/events/meetings/28-february-2017/

Vitaliy
13.02.2017
17:08:35
/stat@combot

Combot
13.02.2017
17:08:35
combot.org/chat/-1001080295593

Anton
13.02.2017
17:28:42
Здравствуйте. Уточните, пожалуйста, как правильно читать следующие создания таблиц:
CREATE TABLE test.t0 ( date Date, f1 Int32, f2 Int32) ENGINE = MergeTree(date, (f1, f2), 8192)
То есть тут есть индекс по date и составной индекс по f1 и f2.
Если так, то как правильно читать такую запись:
CREATE TABLE test.t1 ( date Date, f1 Int32, f2 Int32) ENGINE = MergeTree(date, ((f1, f2), f2), 8192)
И имеет ли она смысл?

Google

Dmitry
13.02.2017
17:43:11
Второй f2 - опциональное выражение для семплирования
https://clickhouse.yandex/reference_ru.html#MergeTree
"Пример с поддержкой сэмплирования"
только кажется запись неверная, сначала должно идти выражение семплировая, а потом PK

Bob
13.02.2017
17:51:50
Подскажите,
Заливаю данные, решил проверить что получается. Сделал запрос:
SELECT arrayJoin(NestTbl.userid) FROM temp.upload LIMIT 10
Запрос выкинул исключение:
DB::Exception: bad size of marks file `/opt/clickhouse/data/temp/upload/20161201_20161228_3_68_2/NestTbl%2userid.null.mrk':78672, must be: 66416
NestTbl.userid => Array(Nullable(String))
Данные побились? И надо заново запускать загрузку или это «пройдет» и можно полечить?

Alexey
13.02.2017
17:53:31

Bob
13.02.2017
17:55:51
Данные лью из oracle, 8 програм, каждая обрабатывает свой интервал. Использую пачки по 1000000 строк.
Сейчас остановлю импорт, удалю таблицу и перезапущу. Посмотрим, воспроизведеться или нет...

Alexey
13.02.2017
18:01:36
Нет ли у вас Nested полей с массивами?
Есть ограничение - вложенные массивы не поддерживаются.
Но мы лишь недавно сделали хорошее сообщение в этом случае.
> Array(Nullable(String))
- наверное в этом проблема. Боюсь, что Array(Nullable) не работает.
Стоит заметить, что поддержка NULL в ClickHouse сейчас является неполной.

Bob
13.02.2017
18:13:57
Массивов в Nested нету. Но на попробовать сделал часть полей в ней Nullable. Перезапустил загрузку, сейчас еще раз попробую.
Могу заметить, что когда все элементы в Array(Nullable(String)) были NULL, запрос отрабатывал)

Alexey
13.02.2017
18:14:52
Я рекомендую вообще не использовать NULL-ы. Многие вещи работают с ними менее оптимально, а некоторые просто недоделаны.

Bob
13.02.2017
18:17:32
Проблема воспроизвелась, завтра попробую сделать кейс и открыть баг.
Ок, заменю тогда NULL на пустую строку. Спасибо!

Боб
13.02.2017
18:25:23
Есть таблица MergeTree с ключем по Timestamp (секунды с начала unix-эпохи), а разбиение данных по EventDate (получается как toDate(Timestamp)).
При выборке с условием по Timestamp (без EventDate) - колонки Timestamp будут сканироваться для всех кусков целиком или каждый кусок откроется, посмотрятся граничные Timestamp и кусок закроется, без вычитывания всех Timestamp-ов?
Сам нашел ответ.

Pavel
13.02.2017
20:10:29
Ivan hi :)

Ivan
13.02.2017
20:11:36
Привет )) приятно тебя здесь увидеть

Pavel
13.02.2017
20:11:57
меня везде приятно увидеть :)

Renat
13.02.2017
23:01:48
Смотрел запись с хайлода, там упоминаются словари со составными ключами, но в документации они отсутствуют. Это еще не зарелизили или просто нет в документации?

Иван
14.02.2017
03:17:25
Всем привет! Можно ли как-нибудь сделать, чтобы при загрузке файлов в формате tabSeparated "плохие" строчки игнорировались и загрузка не прерывалась??

Alexander
14.02.2017
07:47:22

Google

Alexander
14.02.2017
07:50:34
Алексей, кстати, почему? Если нужна помощь в дописывании -- привлекайте community, допишем )

Kirill
14.02.2017
08:25:37
Всем привет, а есть ли в CH какой-либо аналог RANK функции ?
Например в PostgreSQL и Vertica мы используем оконные функции чтоб вытащить "условно" только первый клик по его сессии
пример
SELECT * FROM (
SELECT
session_id,
price,
action_at,
RANK() OVER (PARTITION BY session_id ORDER BY action_at ASC) as rank
FROM (
VALUES (
'session_1',
0.42,
'2017-02-14 10:16:00'::timestamp
),
(
'session_dup_1',
0.84,
'2017-02-14 10:18:00'::timestamp
),
(
'session_dup_1',
0.42,
'2017-02-14 10:16:00'::timestamp
)
) _ (session_id, price, action_at)
) AS clicks WHERE clicks.rank = 1

Рулон
14.02.2017
09:10:08
А как подключить кликхаус к бд?
нашел файл ClickHouseConnection.java
чтобы в базу складывать уже с аггрегированные данные

Kirill
14.02.2017
10:05:29
чтобы в базу складывать уже с аггрегированные данные
насколько я понимаю ClickHouse не должен сам ползать в другие базы и писать в них что-либо, если вам нужно где-то отдельно хранить уже агрегированные данные, то выполняйте запрос на стороне CH, выгружайте его и пишите куда вам нужно

Рулон
14.02.2017
10:08:37
как пользователям виндовс дать возможность писать запросы? без создания клиентов на php
я думал дать им хотябы линкед сервер к кликхаусу

Igor
14.02.2017
10:12:23
а к тому же DataGrip'у JDBC драйвер не подключается?

Ruslan
14.02.2017
10:13:57
Ребят, на OpenVZ серверах от FastVPS с ClickHouse возникает проблема после создания баз и таблиц при рестарте самого сервера или при рестарте clickhouse-server. clickhouse-client просто откзывается запускаться, сетуя на отстутствующие открытые сокеты

Maksim
14.02.2017
11:14:15
Всем привет! Ребята, подскажите пожалуйста правильный вариант запроса. Есть таблица с полями id, name, amount, created_at. Нужно сделать запрос на сумму по amount за последнюю неделю с гранулярностью в, скажем, 3 часа.
Я делаю приблизительно вот так:
SELECT name, sum(amount) as sum, toStartOfHour(created_at) as 3Hours FROM table WHERE id = 1 AND created_at > toDateTime(toDate('2017-02-07')) GROUP BY 3Hours, name ORDER BY 3Hours FORMAT JSON
правильно ли? хотелось бы еще и отсутствие данных как-то хендлить, но это лучше на клиенте, наверное, делать
может как-то хитро можно timeSlots заюзать

nikoinlove
14.02.2017
11:21:41

evervoid
14.02.2017
11:30:20
Всем привет! планируется ли какой-то embedded вариант CH для эмуляции его в юнит-тестах?
В частности, джава-либа интересует.

Kirill
14.02.2017
11:33:54

Dmitry
14.02.2017
11:34:39
Есть приложение clickhouse-local но оно только для чтения
В общем использовать в юнит тестах, как например с fongo не получится.

Google

evervoid
14.02.2017
11:36:57

Алексей
14.02.2017
11:39:48
видимо тотальное не понимание концепции докера...

Kirill
14.02.2017
11:40:09
тогда вам и сам ClickHouse не нужен, его основной протокол это HTTP, можно накидать простой сервер который будет отдавать вам нужный ответ

Fike
14.02.2017
11:43:00
Там все через JDBC может быть, и, хоть он и использует далеко внизу HTTP, внедриться в эту архитектуру или обновить свою может быть довольно трудно. В идеальной ситуации, конечно, надо просто мокать ответы HTTP-клиента.

Andrey
14.02.2017
11:43:14
Подскажите, в кликхаус можно импортировать расходы по каналам?

evervoid
14.02.2017
11:45:30


Vladimir
14.02.2017
12:06:10
Добрый день! Вопрос по индексу гранулярности в CollapsingMergeTree.
Имеет ли смысл указывать индекс 8192, как написано в примере в доке, если будет такой первичный ключ, по которому всегда будет одна строка?
CollapsingMergeTree(EventDate, (CounterID, EventDate, intHash32(UniqID), VisitID), 8192, Sign)
Например, если мы храним CounterID, UserID, VisitID, то получается всего по одной строчке на посещение. Я же правильно понимаю, что, если мы что-то из этого не укажем в ключе, строчки будут схлопываться?
Какие вообще рекомендации по указанию этого индекса?
Просто есть неплохая статья по этой теме, и как я понял, в указанном выше кейсе индекс гранулярности не нужен https://medium.com/@f1yegor/2cf2a45d7324#.738uhrizr

Dmitry
14.02.2017
12:08:58
Гранулярность индекса никак не влиеят на схлопование.

Vladimir
14.02.2017
12:09:22
тут нет споров

Dmitry
14.02.2017
12:09:48
В КХ есть единственный индес - по первичному ключу. Но это индекс не полный, а разреженный.

Vladimir
14.02.2017
12:09:49
Вопрос в том, если всё схлопывается до одной строки на один ключ, имеет ли смысл указание индекса аж в 8к

Dmitry
14.02.2017
12:10:01
Зависит от характера запросов
Если ключей немного и обычно выбирается всего несколько записей - то имеет смысл уменьшить.
Но индекс - это то, что всегда храниться в памяти, поэтому слишком сильно уменьшать точно не надо

Vladimir
14.02.2017
12:12:20
А, если мы выбираем все записи по одному CounterID (агрегируя все данные по всем VisitID и UserID )?

Dmitry
14.02.2017
12:12:43
т.е. вы всегда выбираете одну запись?

Vladimir
14.02.2017
12:12:48
Может это сразу несколько ключей в одном индексе гранулярности на 8к учитывается?

Google

Dmitry
14.02.2017
12:13:11
А сколько записей в одном counter_id?

Vladimir
14.02.2017
12:13:29
несколько миллионов

Dmitry
14.02.2017
12:13:41
Тогда не имеет смысла уменьшать
Дефолтное значение 8192 здесь отлично подойдет

Vladimir
14.02.2017
12:14:08
Но в композитном ключе хранится — по одной строке на весь ключ (CounterID, UserID, VisitID)
А мы хотим делать запросы select * from table where CounterID = 123;

Dmitry
14.02.2017
12:14:53
который вернет несколько милионов записей?

Vladimir
14.02.2017
12:15:20
Нет, там будет group by ещё...