
Victor
29.03.2018
12:33:51

Michal
29.03.2018
12:34:52
Вставленные в кликхаус данные нельзя модифицировать. Во всяком случае пока. INSERT - добавляет новые данные, а не модифицирует старые.

Google

Combot
29.03.2018
12:52:04
combot.org/chat/-1001080295593

Артемий
29.03.2018
12:54:30

Alexey
29.03.2018
13:24:50
Executable file
<command>cat /opt/dictionaries/file0123*.tsv</command>
не?
там же в доке чуть ниже Local file
насоздавайте таблиц по путям, или по именам файлов

Артемий
29.03.2018
13:48:30

Alexey
29.03.2018
13:49:17
да не, не переменную в команду, а маску, чтобы cat *.tsv

Артемий
29.03.2018
13:50:20

Alexey
29.03.2018
13:50:27
типа, словать FileDir1 это cat /dir1/*.tsv
а словарь FileDir2 это cat /dir2/*.tsv
тогда хз
если вы знаете имя файла уже нужное, то может это поможет? https://clickhouse.yandex/docs/ru/single/index.html#_73
Внешние данные для обработки запроса

Google

Артемий
29.03.2018
13:52:27
Ну вот например реализация на локальном сервере:
>cat /.../2080300/2885824384.tsv | clickhouse-client —host ... —query='SELECT id FROM ids —external —file=- —name=ids —structure=id UInt64'
- но через http запрос или удаленный client это не сработает

Alexey
29.03.2018
13:53:33
а там написано, что по HTTP можно
даже пример есть

Артемий
29.03.2018
13:53:56
Может быть есть что-то вроде "LOAD DATA INFILE"?

Alexey
29.03.2018
14:00:56
то есть вы хотите, чтобы удаленный клиент грузанул данные в кх из файла на сервере?
если вы так доверяете этому клиенту, сделайте ему ручку, чтобы грузить этот файл в таблицу, да и все

Артемий
29.03.2018
14:02:20

Alexey
29.03.2018
14:06:24
короче, пхоже на то, что нет такого SQL-запроса, чтобы получить данные из определенного файла

Konstantin
29.03.2018
14:06:59
напитонить?

Alexey
29.03.2018
14:07:35
говорят, там сотни тысяч файлов

Pavel
29.03.2018
14:08:01
Помогите, не могу сообразить. Есть тяжелый запрос в результате котороо получается небольшая группировка вида:
┌─name──┬─a─┬─b─┐
│ Aaaaa │ 7 │ 5 │
│ Bbbbb │ 3 │ 4 │
│ Ccccc │ 2 │ 1 │
└───────┴───┴───┘
как выполнить запрос, чтоб в отдельных столбцах получить сумму по столбцу a и b
┌─name──┬─a─┬─b─┬─a_total─┬─b_total─┐
│ Aaaaa │ 7 │ 5 │ 12 │ 10 │
│ Bbbbb │ 3 │ 4 │ 12 │ 10 │
│ Ccccc │ 2 │ 1 │ 12 │ 10 │
└───────┴───┴───┴─────────┴─────────┘

Alexey
29.03.2018
14:08:12
их заранее не хотят грузить в кх


Pavel
29.03.2018
14:28:07
:) select * from test.test
┌─name─┬─a─┬─b─┐
│ aaa │ 7 │ 5 │
│ bbb │ 3 │ 4 │
│ ccc │ 2 │ 1 │
└──────┴───┴───┘
3 rows in set. Elapsed: 0.002 sec.
:) select name, a, b, (select sum(a) from test.test) as a_total, (select sum(b) from test.test) as b_total from test.test
┌─name─┬─a─┬─b─┬─a_total─┬─b_total─┐
│ aaa │ 7 │ 5 │ 12 │ 10 │
│ bbb │ 3 │ 4 │ 12 │ 10 │
│ ccc │ 2 │ 1 │ 12 │ 10 │
└──────┴───┴───┴─────────┴─────────┘
3 rows in set. Elapsed: 0.003 sec.
единственное я не помню, подзапросы один раз выполнятся, или на каждую строчку будут выполняться, кажется все-таки один
да, но вот только test.test — это подзапрос, который трижды выполнять дорого
подозреваю, что это как-то через arrayJoin можно разобрать на отдельные массивы и потом собрать,
но пока не понял как.


Артемий
29.03.2018
15:10:22
Вопрос к разработчикам:
- https://github.com/yandex/ClickHouse/blob/d97b2edc7c6824e9c68174167d5a940f63305e3d/dbms/src/Functions/FunctionsStringArray.h
- http://prntscr.com/iy2z0o
- second argument: arguments[1]
Спрашиваю тут, потому что не уверен, может так специально сделано

Alexey
29.03.2018
15:19:37
Да, ошибка.
Такое как раз должен PVS-Studio хорошо ловить :)

antuan
29.03.2018
15:22:51
@milovidov_an не подскажете, можно как-то заставить кликхаус не падать при старте, если он не может подцепиться к внешнему одбц-словарю?

Mark
29.03.2018
15:29:02
tableau + clickhouse

Google

Mark
29.03.2018
15:29:09
кто интегрировал?

Pavel Tyavin
29.03.2018
15:29:15
я

Alexey
29.03.2018
15:30:00
да, но вот только test.test — это подзапрос, который трижды выполнять дорого
подозреваю, что это как-то через arrayJoin можно разобрать на отдельные массивы и потом собрать,
но пока не понял как.
:) select splitByChar(':', arrayJoin(arrayMap(x -> concat(arr_name[indexOf(a_arr, x)], ':', toString(x), ':', toString(b_arr[indexOf(a_arr, x)]), ':', toString(arraySum(a_arr)), ':', toString(arraySum(b_arr))), a_arr))) q from (select groupArray(name) as arr_name, groupArray(a) as a_arr, groupArray(b) as b_arr from test.test)
┌─q─────────────────────────┐
│ ['aaa','7','5','12','10'] │
│ ['bbb','3','4','12','10'] │
│ ['ccc','2','1','12','10'] │
└───────────────────────────┘
3 rows in set. Elapsed: 0.007 sec.
дальше хз ))

Артемий
29.03.2018
15:31:38

Alexey
29.03.2018
15:33:25

antuan
29.03.2018
15:33:58

Alexey
29.03.2018
15:34:47
кто интегрировал?
У нас есть доклад на эту тему на последнем митапе в Москве, 12 декабря. Есть видео. https://www.youtube.com/watch?time_continue=1499&v=7Wcq6_9727A

Anton
29.03.2018
15:36:42
Но опять таки при запуске. Если добавлять "на лету" он просто очень много ругается ?


Alexey
29.03.2018
16:02:29
да, но вот только test.test — это подзапрос, который трижды выполнять дорого
подозреваю, что это как-то через arrayJoin можно разобрать на отдельные массивы и потом собрать,
но пока не понял как.
:) select q[1] as name, q[2] as a, q[3] as b, q[4] as a_total, q[5] as b_total from (select splitByChar(':', arrayJoin(arrayMap(x -> concat(arr_name[indexOf(a_arr, x)], ':', toString(x), ':', toString(b_arr[indexOf(a_arr, x)]), ':', toString(arraySum(a_arr)), ':', toString(arraySum(b_arr))), a_arr))) q from (select groupArray(name) as arr_name, groupArray(a) as a_arr, groupArray(b) as b_arr from test.test))
┌─name─┬─a─┬─b─┬─a_total─┬─b_total─┐
│ aaa │ 7 │ 5 │ 12 │ 10 │
│ bbb │ 3 │ 4 │ 12 │ 10 │
│ ccc │ 2 │ 1 │ 12 │ 10 │
└──────┴───┴───┴─────────┴─────────┘
3 rows in set. Elapsed: 0.006 sec.


Pavel
29.03.2018
16:29:41
:) select q[1] as name, q[2] as a, q[3] as b, q[4] as a_total, q[5] as b_total from (select splitByChar(':', arrayJoin(arrayMap(x -> concat(arr_name[indexOf(a_arr, x)], ':', toString(x), ':', toString(b_arr[indexOf(a_arr, x)]), ':', toString(arraySum(a_arr)), ':', toString(arraySum(b_arr))), a_arr))) q from (select groupArray(name) as arr_name, groupArray(a) as a_arr, groupArray(b) as b_arr from test.test))
┌─name─┬─a─┬─b─┬─a_total─┬─b_total─┐
│ aaa │ 7 │ 5 │ 12 │ 10 │
│ bbb │ 3 │ 4 │ 12 │ 10 │
│ ccc │ 2 │ 1 │ 12 │ 10 │
└──────┴───┴───┴─────────┴─────────┘
3 rows in set. Elapsed: 0.006 sec.
Спасибо, святой человек )
Работает, жаль только, что через такие костыли.
Даже нашел, что есть команда with, не документирована и умеет отдавать толко одно поле|столбец

Vladimir
29.03.2018
16:32:46

Pavel
29.03.2018
16:34:56

Артемий
29.03.2018
16:41:28

Pavel
29.03.2018
16:43:00
ну так это уже другой кейс
хочется реиспользовать результаты, а не объединять разные запросы

Артемий
29.03.2018
16:44:40

Pavel
29.03.2018
16:49:01
это немного меняет дело
но многострочные запросы все еще не доступны в with, на сколько понимаю

Petr
29.03.2018
17:01:36
Привет, если файлы таблиц через rsync гонять в альтернативу ZooKeeper у? Нужна реплика но нет времени с ZooKeeper разобраться

Google

Petr
29.03.2018
17:01:49
В качестве временно костыля )

Wolf
29.03.2018
17:04:30
Хз зукипер там вообще по дефолту можно сказать ставится, только айди прописать вроде
Проще нанять админа чтобы зукипер поставил

Petr
29.03.2018
17:05:17
ну все же, хочу значть что делаю, понять иструмент а потом уже использовать
Да я справлюсь, все во время уперается, rcync дело на 30 мин

Wolf
29.03.2018
17:06:03
Ну рсинк тут не вариант если вы пишите постоянно

Petr
29.03.2018
17:06:04
А с ZooKeeper подольше повозиться прийдется
не постоянно
почему не подойдет он же только измененния стягивает

Wolf
29.03.2018
17:06:56
Ну все равно проще тогда внутренний механизм репликации использовать без зукипера насколько помню он там есть

Petr
29.03.2018
17:07:41
Ну не знаю но HL ++ говорил что через ZooKeeper
или 2 инстанса
и в каждый по отдельности импортить
В доке ZooKeeper по всюду, может она и внутрення но связана с ZooKeeper

Wolf
29.03.2018
17:18:06
Нет там точно был вариант без зукипера в доке он точно был интернал репликейшен или типо того
Только там не гарантируемая репликация

Petr
29.03.2018
17:24:47
-_-
сомнительное мероприятие

Wolf
29.03.2018
17:27:41
ну это явно лучше чем стопить реплицировать запускать

Petr
29.03.2018
17:28:16
Что стопить?

Google

Wolf
29.03.2018
17:28:45
ну вы же не можете на ходу рсинкать данные , как минимум надо стопнуть кх синкнуть и потом запустить
если конечно говорить о какой то целостности данных

Артемий
29.03.2018
17:29:28

Petr
29.03.2018
17:29:39
данные хранятся в фаловой ситеме что мешает рсинку когда нет записи в базу ?

Wolf
29.03.2018
17:30:32

Petr
29.03.2018
17:31:00
ну по идее рсинк должен справитья

Wolf
29.03.2018
17:31:02
ну и если синкать на кх который не стоит он наверно удивится что у него какие то странные папки появляются с данными

Артемий
29.03.2018
17:31:52
https://clickhouse.yandex/docs/ru/table_engines/distributed/

Petr
29.03.2018
17:31:56
ну тут да, в этом модет быть проблема. Если он не подхватывает

Wolf
29.03.2018
17:32:18
ну это как mysql реплицировать на ходу )))

Maksim
29.03.2018
17:34:16
С зукипером примерно столько же

Wolf
29.03.2018
17:35:14
а если еще синк пойдет когда в кх нет записи но он делает мерж то вообще будет удивительно в том числе и самому кх с которого идет реплика так как удалить данные он не сможет, а ему надо

Petr
29.03.2018
17:35:30
Если у шардов вес одинаковый то данные распределяться раномерно? но не дублируются?

Wolf
29.03.2018
17:36:57
ну вы к ним доступаетесь, и рсинк не даст удалить файл

Petr
29.03.2018
17:37:15
рсинк вроде временные файлы создает
чтобы не попортить огиганал

Wolf
29.03.2018
17:37:51
он не создавать а читать будет на главном кх