
Arkady
26.10.2018
10:46:47
Привет!
Помогите составить запрос пожалуйста.
Есть таблица
kw | ids
----|------------
kw1 | [id1, id2, id3]
kw2 | [id3, id4, id5]
Мне надо получить массив, который является конкатеницией всех записей второй колонки.
Я попробовал функцию arrayConcat(groupArray(ids)).
Не получается. Она возвращает массив из двух элементов, потому что по документации:
аргумент функции arrayConcat - это "Перечисленные через запятую массивы"

Lamobot
26.10.2018
10:49:09

Vitaly
26.10.2018
10:50:36
# ps afx
PID TTY STAT TIME COMMAND
58 pts/1 Ss+ 0:00 sh
1 pts/0 Ss 0:00 sh
136 pts/0 R+ 0:00 ps afx

Lamobot
26.10.2018
10:53:06

Google

Ivan
26.10.2018
10:54:20
Скажите, кто-нибудь использует resharding?


Yaroslav
26.10.2018
10:54:45
(Solved на v18.14.10 работает нормально)
Привет ! Необходимо получить из таблицы записи не ранее определенного времени
DESCRIBE TABLE streams
┌─name───┬─type─┬─default_type─┬─default_expression─┐
│ date │ Date │ DEFAULT │ today() │
│ time │ DateTime │DEFAULT │ now() │
│ name │ String │ │ │
Делаю запрос
SELECT
time,
now(),
name
FROM streams
WHERE (time > (now() - 30)) AND (name = 'yv')
┌───────time─┬──────now()─┬─name─┐
│ 2018-10-26 13:37:11 │ 2018-10-26 13:46:32 │ yv │
│ 2018-10-26 13:37:12 │ 2018-10-26 13:46:32 │ yv │
└─────────────────────┴────┘
И такой результат, в случае если данные таблицы не меняются относительно where всегда
Далее, меняем условие where , ранее не использованное
SELECT time,now(),name FROM streams WHERE time>now()-28 and name='yv'
SELECT
time,
now(),
name
FROM streams
WHERE (time > (now() - 28)) AND (name = 'yv')
Ok.
0 rows in set. Elapsed: 0.009 sec.
Методом проб и ошибок нахожу, что запрос вида
SELECT
time,
now() - 30,
name
FROM streams
WHERE (time > (now() - 30)) AND (name = 'yv')
работает всегда корректно


Daniel
26.10.2018
10:54:53
то что вы можете найти в гугле устарело давно

Ivan
26.10.2018
10:55:25
Ясно, так и подозревал

Daniel
26.10.2018
10:55:45
погуглите по истории чата "решардинг", я решил этот вопрос ребалансировкой записей на новую шарду
или пояндексите
что ближе ?

Ivan
26.10.2018
10:57:18
Перечитать и переписать?

Kirill
26.10.2018
11:03:52
@kshvakov Кирилл подскажите пожалуйста каким образом можно посмотреть данные из конкретной партиции ?
В новых версиях вот так
kshvakov :) CREATE TABLE T (Date Date , Value String) Engine MergeTree PARTITION BY toYYYYMM(Date) ORDER BY Date
CREATE TABLE T
(
Date Date,
Value String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(Date)
ORDER BY Date
Ok.
0 rows in set. Elapsed: 0.006 sec.
kshvakov :) INSERT INTO T VALUES (today(), 'X')
INSERT INTO T VALUES
Ok.
1 rows in set. Elapsed: 0.015 sec.
kshvakov :) SELECT *, _partition_id FROM T
SELECT
*,
_partition_id
FROM T
┌───────Date─┬─Value─┬─_partition_id─┐
│ 2018-10-26 │ X │ 201810 │
└────────────┴───────┴───────────────┘
1 rows in set. Elapsed: 0.014 sec.

Alexey
26.10.2018
11:07:43

Google

Mike
26.10.2018
11:07:57
Коллеги, подскажите плиз, в prometheus пуляться метриками КХ какой способ предпочтительней? clickhouse_exporter ? Хочется красивых картинок в графане

Alexey
26.10.2018
11:08:13

Kirill
26.10.2018
11:08:25

Alexey
26.10.2018
11:08:45


Andrey
26.10.2018
11:08:57
ловил кто-нибудь с jdbc-драйвером такие проблемы ?
Caused by: java.io.IOException: Attempted read on closed stream.
at org.apache.http.conn.EofSensorInputStream.isReadAllowed(EofSensorInputStream.java:109) ~[httpclient-4.5.2.jar:4.5.2]
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:118) ~[httpclient-4.5.2.jar:4.5.2]
at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.readNextBlock(ClickHouseLZ4Stream.java:82) ~[clickhouse-jdbc-0.1.42.jar:na]
at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.checkNext(ClickHouseLZ4Stream.java:74) ~[clickhouse-jdbc-0.1.42.jar:na]
at ru.yandex.clickhouse.response.ClickHouseLZ4Stream.read(ClickHouseLZ4Stream.java:50) ~[clickhouse-jdbc-0.1.42.jar:na]
at ru.yandex.clickhouse.response.StreamSplitter.readFromStream(StreamSplitter.java:92) ~[clickhouse-jdbc-0.1.42.jar:na]
at ru.yandex.clickhouse.response.StreamSplitter.next(StreamSplitter.java:54) ~[clickhouse-jdbc-0.1.42.jar:na]
at ru.yandex.clickhouse.response.ClickHouseResultSet.hasNext(ClickHouseResultSet.java:116) ~[clickhouse-jdbc-0.1.42.jar:na]
... 70 common frames omitted
версия jdbc 0.1.42
https://github.com/yandex/clickhouse-jdbc/issues/253


Kirill
26.10.2018
11:09:38

Mike
26.10.2018
11:10:06

Denis
26.10.2018
11:25:30


Ivan
26.10.2018
11:30:04
А есть у кого нибудь опыт использования внешних словарей с миллиардами значений?

papa
26.10.2018
11:33:10
<layout>
<cache>

Denis
26.10.2018
11:34:16

Ivan
26.10.2018
11:39:30

Denis
26.10.2018
11:43:07
Не знаю такого. Odbc? В общем для cached кх построит sql запрос select where id in (100 млн. значений через запятую).
через http будет работать


Michal
26.10.2018
11:54:11
Aerospike например
Поплюсуйте этот ишью: https://github.com/yandex/ClickHouse/issues/2718 :)
Не знаю такого. Odbc? В общем для cached кх построит sql запрос select where id in (100 млн. значений через запятую).
Мы как раз пробовали через HTTP. Это выглядит так - для каждого блока данных (примерно по 65 тысяч) он идет спрашивать в словаре внешние данные. Словарь ищет их в кеше, не находит почти ничего. После чего идет греть кэш. Разогревка кэша идет в один поток. Он делает 1 запрос в HTTP с 65 тысячами ключей, обновляет кэш, отдает результат. Всё это время остальные 15 потоков стоят в очереди каждый ожидая пока обслужат первого. ПОсле этого каждые следующие 65 тысяч записей обслуживаются по тому же сценарию, с той лишь разницей что есть небольшая вероятность что часть ключей уже лежит в кэше.
Там можно конечно развлекаться с улучшением работы кэша - чтоб могло многопоточно и обновляться и запрашивать данные. Но прикрутить внешний источник данных по-моему дешевле.


Denis
26.10.2018
12:09:09
так этот источник данных придётся точно так же спрашивать, как мисс кэша сейчас. по 65к строк вычитывать на блок. или я что-то не понимаю?

Google

Denis
26.10.2018
12:12:51


Michal
26.10.2018
12:13:15
Привет!
Помогите составить запрос пожалуйста.
Есть таблица
kw | ids
----|------------
kw1 | [id1, id2, id3]
kw2 | [id3, id4, id5]
Мне надо получить массив, который является конкатеницией всех записей второй колонки.
Я попробовал функцию arrayConcat(groupArray(ids)).
Не получается. Она возвращает массив из двух элементов, потому что по документации:
аргумент функции arrayConcat - это "Перечисленные через запятую массивы"
Вам нужны агрегатные функции с модификатором -Array.
SELECT groupArrayArray(ids)
FROM
(
SELECT
kw,
ids
FROM system.one
ARRAY JOIN
['kw1', 'kw2'] AS kw,
[[1, 2, 3], [3, 4, 5]] AS ids
)
┌─groupArrayArray(ids)─┐
│ [1,2,3,3,4,5] │
└──────────────────────┘

Arkady
26.10.2018
12:13:47
Вам нужны агрегатные функции с модификатором -Array.
SELECT groupArrayArray(ids)
FROM
(
SELECT
kw,
ids
FROM system.one
ARRAY JOIN
['kw1', 'kw2'] AS kw,
[[1, 2, 3], [3, 4, 5]] AS ids
)
┌─groupArrayArray(ids)─┐
│ [1,2,3,3,4,5] │
└──────────────────────┘
спасибо. Пробую

Michal
26.10.2018
12:18:05

Denis
26.10.2018
12:24:56

Michal
26.10.2018
12:30:58

Denis
26.10.2018
12:32:55
меня немного смущает перспектива кинуть 10 миллионов запросов в спайк на один запрос в клике

Ivan
26.10.2018
12:34:07
Ещё вариант таки http сервис и enrichment данных делать как materialized полей

Denis
26.10.2018
12:35:21

Michal
26.10.2018
12:35:39
Конечно если можно сделать без этого - то лучше без этого.
У нас проблема была (и отчасти по прежнему есть) с графом разных ид пользователей, который может весьма динамически меняться и есть такая странная идея использовать самое свежее состояние графа на момент построения рапорта. Граф большой и никакие MATERIALIZED не сработают т.к. динамический.

Denis
26.10.2018
12:40:53
граф айди - это как?

Michal
26.10.2018
12:41:43
граф айди - это как?
Ну когда по каким-то признакам выясняется что пользователи X и Y это на самом деле одно лицо.
А через месяц к тому же что и Z - тоже он же, но с нарисованными усиками.
На HL Siberia был целый доклад на эту же тему https://www.highload.ru/siberia/2018/abstracts/3664

Denis
26.10.2018
12:43:28
и как это было бы в спайке? таблица соответствий юзер_ид и юник_юзер_ид с датами начала/конца?

Ivan
26.10.2018
12:43:40
Я думал потом просто как то переписывать данные

Michal
26.10.2018
12:44:26

Google

Ivan
26.10.2018
12:45:06
Слава богу с GDPR справились

Daniel
26.10.2018
13:43:56
Вроде обсуждали, что не страшно, но глаз мозолит =)

Alexey
26.10.2018
13:49:07
Привет, вопрос, а это нормально, что на новом сервере после аттача партишенев взятых их бекапа, systems.parts.name отличают от тех, что на сервере с которого бекап брался? И если нормально, по какой логике названия выбираются, что-то не нашел в доке

M
26.10.2018
13:52:57
Да, нормально. Название меняется при аттаче. В название входит номер блока и глубина кажись, эта информация есть в доке. Выбор названия, наверное идет по текущим блокам что есть (наверное)

Denis
26.10.2018
13:58:02
вообще-то too many parts (300) одна из самых больших проблем, ведет к падению insert-в, потере ( неконсистентности) данных.
Вы бы проверили у вас мержи вообще идут? И данные у вас не вставляются 100%

Mike
26.10.2018
14:15:01
Коллеги, а подскажите плиз по clickhouse_exporter. я его завел, судя по логам, запросы в КХ он шлет и данные получает. но в прометеусе у меня пусто и дашборды пустые. Нужно еще какое-то шаманство, чтобы из экспортера в прометеус данные шли?

Andrii
26.10.2018
14:22:47
а ты скрапаешь прометеусом експортер?)

Shazo
26.10.2018
14:23:01
А что за с показателем background_pool_task? можешь попробовать лимиты завысить, в купе с увеличение backgroundpool может помоьч разгрести и уменьшить число кусков, но увеличится нагрузка на cpu.

Daniel
26.10.2018
14:23:32
По процесслисту инсерты идут все же, но не без делейд инсертс

Shazo
26.10.2018
14:25:01
делей в дефолтных настройках уже на 150 будет.

Denis
26.10.2018
14:25:04
потому что он не может создать кусок сверх лимита

Daniel
26.10.2018
14:25:36

Shazo
26.10.2018
14:25:50
config.xml

Daniel
26.10.2018
14:26:10
Каким параметром?

Shazo
26.10.2018
14:26:30
<merge_tree>
<parts_to_delay_insert>6000</parts_to_delay_insert>
<parts_to_throw_insert>10000</parts_to_throw_insert>
</merge_tree>

Daniel
26.10.2018
14:26:41
Спасибо

Google

Shazo
26.10.2018
14:27:02
При достижении parts_to_delay_insert будет замедление, по умолчанию на 1 сек. При parts_to_throw_insert ошибка.

Denis
26.10.2018
14:27:36

Shazo
26.10.2018
14:28:00
Но ещё глянь в параметр user.xml для профилей:
<background_pool_size>512</background_pool_size>
когда он в лимитах (по умолчанию 16), то как раз число кусков активно растет.

Denis
26.10.2018
14:28:51
судя по полочке, мержи не идут, надо читать логи -- почему.

Mike
26.10.2018
14:29:26

Shazo
26.10.2018
14:31:49

Daniel
26.10.2018
14:32:14
А когда таблица типа distributed натыкается на throw insert, она сохраняет кусок не вставленный для попыток вставить позже, или он теряется?
Очень интересно...

Mike
26.10.2018
14:33:05

Denis
26.10.2018
14:34:03

Daniel
26.10.2018
14:35:45
Интересно было бы услышать комментарий разработчиков... и как выкарабкиваться из ситуации с множеством кусков? Сервер по процесслисту ничего не делает, а инсерты отвергает

Denis
26.10.2018
14:37:09

Daniel
26.10.2018
14:37:45
Все есть. Но кх ничего не делает.

Shazo
26.10.2018
14:38:05
уверен? pool пустой?

Denis
26.10.2018
14:39:08

Shazo
26.10.2018
14:40:21