
Vladimir
11.10.2017
15:51:33
типа runningSum? не помню есть ли такое. Народ давно ждет

Nikolai
11.10.2017
15:53:12
пока не вполне очевидно, как такого добиться

Vladimir
11.10.2017
15:55:17
Можно попробовать домножить колонку на -1 и сделать runningDifference(x)

Alex
11.10.2017
15:55:43
есть недокументированный runningAccumulate

Google

Alex
11.10.2017
15:56:29
примеры использования можно найти поиском по чату

Nikolai
11.10.2017
15:59:01
это же все равно фулскан потребует, если надо считать сумму от начала времен?

Alex
11.10.2017
16:00:07
ага

Саша
11.10.2017
16:02:39
Спасибо, попробую

Nikolai
11.10.2017
16:06:59

Stas
11.10.2017
16:07:06
А от куда вы о не докумментированных функциях узнаёте?
(тоже хочу)

Michal
11.10.2017
16:09:31

Stas
11.10.2017
16:10:16

Konstantin
11.10.2017
16:12:06

Mike
11.10.2017
16:13:32
он собирается и видится пентахой. а вот на стадии запросов они не дружились пару месяцев назад. может быть что-то поменялось, как раз интересуюсь
подозреваю, нужно ждать до реализации "SELECT db.table.column", так как падало на этом.

Konstantin
11.10.2017
16:15:01

Google

Michal
11.10.2017
16:18:16

Mike
11.10.2017
16:18:25

Nikolai
11.10.2017
16:20:53

Konstantin
11.10.2017
16:55:52
а как можно реализовать группировку по произвольным интервалам времени? например по 5 минут?

Nikolai
11.10.2017
17:01:43
возможно, group by toUInt32(date_time) // (5 * 60) ?

Paul
11.10.2017
17:13:54

Павел Максимов
11.10.2017
17:19:11
Ребят, подскажите есть у меня 2 таблицы. Они каждый день пополняются данными. Я их хочу соединить, через ключевые столбцы. И при запросе получать актуальные данные на каждый день. Какой движок таблицы использовать?

Nikolai
11.10.2017
17:42:38
По умолчанию - MergeTree. Остальные для более узкоспециализированных задач.

Stas
11.10.2017
17:56:50

Igor
11.10.2017
18:34:02
Не использовать его)
Позиция офф. доки

Stas
11.10.2017
18:37:54
Это отлично, но по другому не выйдет или придётся очень сильно усложнять логику...

Nikolai
11.10.2017
18:40:07
Не знаю ничего кроме документации. Если кратко, то ReplacingMergeTree стоит использовать, если есть проблемы со слишком большим размером таблицы. А OPTIMIZE или FINAL лучше не использовать. :)

Stas
11.10.2017
18:49:23
Но тогда что бы мне выбрать только последнее значение (из дублирующихся) мне придётся делать подзапрос и join так?

Igor
11.10.2017
19:12:47
Значений много ?
2-4М ?
Использую в проде историческую таблицу МеrgeTree- по 5М каждую минуту складирую записей -> достаю так
FROM model.last_state
WHERE
key_date=( SELECT max(key_date) FROM model.last_state_marker_model WHERE event_date = today() )
AND
event_time=( SELECT max(event_time) FROM model.last_state_marker_model WHERE event_date = today() )
- достать последнии записи
Может не совсем красивый путь - но путь решения хранения обновляемой истории

Alex
11.10.2017
19:26:29
Коллеги а в каких случаех при репликации нужно юзать zookeeper ?
или можно вообще без него

Michal
11.10.2017
19:53:56
Если вы используете движок Distributed и все инсерты идут через него - тогда он может сразу во все реплики отправлять данные без зоокипера, но никаких гарантий при этом что реплики 100% синхронизированы не будет. С зоокипером и internal_replication - всё намного надежнее.

Google

Alex
11.10.2017
19:54:45
как минимум изза гарантии доставки надо юзать
?\

Michal
11.10.2017
19:59:22
Из документации:
У каждого шарда в конфигурационном файле может быть указан параметр internal_replication.
Если он выставлен в true, то для записи будет выбираться первая живая реплика и данные будут писаться на неё. Этот вариант следует использовать, если Distributed таблица “смотрит” на реплицируемые таблицы. То есть, если таблица, в которую будут записаны данные, будет сама заниматься их репликацией.
Если он выставлен в false (по умолчанию), то данные будут записываться на все реплики. По сути, это означает, что Distributed таблица занимается репликацией данных самостоятельно. Это хуже, чем использование реплицируемых таблиц, так как не контролируется консистентность реплик, и они со временем будут содержать немного разные данные.
см. https://clickhouse.yandex/docs/ru/table_engines/distributed.html


sha-bang
11.10.2017
20:00:00
Приветствую всех
Не подскажите ли вот какую вещь. Есть у меня запрос из базы mysql через внешний словарь:
select dictGetString('api_keys','descr', number) from system.numbers where number in (1365,1,933,1437,669,1114) limit 5;
который работает как нужно и есть еще один запрос:
select api_key_id from store where api_key_id = 23
Который тоже хорошо работает. Но вместе они никак не хотят работать. Пробовал вот так:
select dictGetString('api_keys','descr', number) from system.numbers where number in (select api_key_id from store where api_key_id = 23) limit 5;
ошибку выдает

Michal
11.10.2017
20:01:30
Разные integer типы?
Там вроде бы сообщение об ошибке должно быть информативное.

sha-bang
11.10.2017
20:02:54
Michal минутку

Michal
11.10.2017
20:03:20
select dictGetString('api_keys','descr', toUInt64(number))
так попробуйте

sha-bang
11.10.2017
20:05:37
Michal вот ошибка
Code: 53. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Types of column 1 in section IN don't match: UInt32 on the right, UInt64 on the left..
попробую Ваш вариант

Michal
11.10.2017
20:06:46
Угу. Разные целочисленные типы. В кликхаус нужны явные приведения типов в таких случаях.

sha-bang
11.10.2017
20:08:21
Michal сделал, но все равно ту же ошибку дает
DB::Exception: Types of column 1 in section IN don't match: UInt32 on the right, UInt64 on the left..

papa
11.10.2017
20:09:30
api_key_id какой тип?

Michal
11.10.2017
20:10:15
Ну в том запросе выше приведение типов нужно в другом месте. number in (select toUInt64(api_key_id) from store where api_key_id = 23)

sha-bang
11.10.2017
20:12:18
papa show create table store говорит
api_key_id UInt32 DEFAULT CAST(0 AS UInt32)
Michal и @orantius спасибо!!! получилось я добавил еще и в селект select toUInt64(api_key_id)

Иван
11.10.2017
20:16:18
Гайз, есть идеи, как сделать group by с попарной функцией? Например group by levenshtein_distance(first_name1, first_name2)<2? Джойн таблицы с собой не влезает в память

Google

papa
11.10.2017
20:20:57
сделайте джойн половины таблицы
думаю что левенштейн тут не виноват, можно поменять условие на group by first_name1 = first_name2

Иван
11.10.2017
20:25:46
Расстояние не меньше 1, конечно, опечатка
Меньше двух, например
сделайте джойн половины таблицы
Как вариант можно делить на части, да. Но неизвестно, сколько потребуется таких частей в итоге, а каждый такой джойн довольно долго считается
Интуитивно кажется, что джойн это слегка избыточно для задачи, но не уверен, можно ли сделать элегантнее

Maxim
11.10.2017
22:28:22
К Tableau, к сожалению, не понятно как подключаться. Единственный вариант - это или допиливать ODBC драйвер, или писать WebConnector. WebConnector, насколько мне известно, не умеет в live mode, только в extract.

Alexey
11.10.2017
23:00:00

Maxim
11.10.2017
23:04:14
Ого!
Пошёл искать сообщения выше
Спасибо

Alexey
12.10.2017
01:11:54
Скопировал кусок инструкции: https://gist.github.com/alexey-milovidov/b42380a845d96aaa6e5426c142602277

Павел Максимов
12.10.2017
06:35:24
Подскажите, как переименовать столбцы, в справке не нашел

Рулон
12.10.2017
06:44:23
оно?
https://clickhouse.yandex/docs/ru/query_language/queries.html#rename

Andrey
12.10.2017
06:45:28

Михаил
12.10.2017
07:56:31
Подскажите пожалуйста, У меня есть:
таблица1 движок MergeTree, 9 милиардов строк, 160GB - неагрегированные данные
таблица2 движок SummingMergeTree, 6 милиардов строк, 64GB - теже данные, но по агрегированные по первичному ключу сериями по 5 минут
Но почему-то SELECT'ы из таблицы1 на 10-20% быстрее, чем из таблицы2. Кто-нибудь работает с движком SummingMergeTree, сталкивался с подобным?
И еще я не могу найти объяснение, почему после агрегации по 5 мин количество строк сократилось на 30%, а занимаемое место а ж на 60%.
Из доп данных могу сказать, что в таблице 32 колонки, из которых 29 - первичный ключ.

Vladimir
12.10.2017
08:18:21
Михаил про место, мне кажется, сжатие стало просто эффективнее

Roman
12.10.2017
08:50:58
Ребят, подскажите пожалуйста в чем прикол такой реакции на вьюху:
:) CREATE TABLE test (s String, d Date) ENGINE = MergeTree(d, s, 8192)
Ok.
:) insert into test select 's', toDate('2017-01-01')
Ok.
:) create view test_view as select s_s AS s_s_s from (select s AS s_s from default.test)
Ok.
:) insert into test select 's', toDate('2017-01-01')
Received exception from server:
Code: 10. DB::Exception: Received from localhost:9000, 10.31.143.240. DB::Exception: Not found column s_s in block. There are only columns: s, d.
Версия 1:1:54245

Alexander
12.10.2017
08:54:22
думаю, что как и в mysql, view не поддежживают subqueries

Alex
12.10.2017
09:10:32
ПАрни, а можно использовать такую схему: Есть шардирование. Возьмем 1 шард. Можно ли сделать сервер на запись скажем на амазоне, и сделать репликацию на сервер скажем в хетцнер. в разных датацентрах то есть
то есть на запись это типа мастер - амазон, слейв на хетцнер

Google

Alex
12.10.2017
09:11:14
для чтения

Amelia
12.10.2017
09:13:39
Ребят, туплю, не могу найти: как зафикисровтаь количество знаков после запятой для Float64 ?

Andrey
12.10.2017
09:14:51

Konstantin
12.10.2017
09:16:14

Roman
12.10.2017
09:16:33

Alexander
12.10.2017
09:17:50

Vladimir
12.10.2017
09:39:00
Привет всем! Подскажите как можно результат вывода FORMAT JSON вернуть в select. примерно так select s from (select .... FORMAT JSON) as s;

Aliaksandr
12.10.2017
10:35:50
FYI, добавили поддержку tabix в chproxy ( https://github.com/Vertamedia/chproxy ) . Теперь не нужно устанавливать readonly=2 для юзера, чтобы можно было работать с ним через tabix. Нового бинарника пока нет, поэтому используйте go get -u github.com/Vertamedia/chproxy .

Рулон
12.10.2017
10:40:20
У меня табикс так тормозит, когда в хроме работаю ) select и жду )))

Aleksey
12.10.2017
11:00:13
Привет! Подскажите, пожалуйста, где можно посмотреть статистику, которая используется для load_balancing? Под нагрузкой запросы в distributed отправляются на реплики, не можем понять почему. Используем перекрестную репликацию и для нас это не очень выгодно. load_balancing стоит в in_order

Roman
12.10.2017
11:04:01
Добрый день.
Можно каким-либо образом развернуть массив массивов как несколько (или аналог union) arrayJoin, то есть из
[[1,[1,2],[2,[3,4]]
или аналогичной структуры хочется получить
1 1
1 2
2 3
2 4
Не используя Dictionary :)

Mariya
12.10.2017
11:11:27
Как-то так можно (только структуру нужно немного изменить, так как в массиве должны быть элементы одного типа)
SELECT
first_elem,
arrayJoin(elems) AS sec_elem
FROM
(
SELECT
b[1][1] AS first_elem,
b[2] AS elems
FROM
(
SELECT arrayJoin(a) AS b
FROM
(
SELECT [[[1], [1, 2]], [[2], [3, 4]]] AS a
)
)
)
┌─first_elem─┬─sec_elem─┐
│ 1 │ 1 │
│ 1 │ 2 │
│ 2 │ 3 │
│ 2 │ 4 │
└────────────┴──────────┘

Roman
12.10.2017
11:16:58
О спасибо.
Короче это будет так:
SELECT
b[1][1] AS first_elem,
arrayJoin(b[2]) AS elems
FROM
(
SELECT arrayJoin([[[1], [1, 2]], [[2], [3, 4]]]) AS b
)

Roman
12.10.2017
11:19:34
Недавно набросали вот такую штуку, чтобы лить данные в clickhouse через akka-stream: https://github.com/findify/clickhouse-akka-stream

Roman
12.10.2017
11:24:39

papa
12.10.2017
11:25:06
потому что тип у всех элементов массива одинаковый.

Igor
12.10.2017
12:06:12

Oleh
12.10.2017
12:46:00
подскажите пожалуйста, делаю ANY LEFT JOIN, в первой подзапросе нет данных - во втором есть, результат JOIN - пусто. Как сделать так чтобы был результат из любого подзапроса?
http://take.ms/S0C8h