@clickhouse_ru

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

таких строк несколько это причина?
Похоже на то. Поищите "No active replica has part" тут в телеграм. Там было чуть подробнее в чем дело и как с этим бороться.

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

Артемий
29.03.2018
12:54:30
https://clickhouse.yandex/docs/en/single/#sources-of-external-dictionaries не подойдет?
Подошло бы, если в запросе из словаря было бы можно указывать путь к файлу. Файлов много, и их имена заранее неизвестны.

Alexey
29.03.2018
13:24:50
Executable file <command>cat /opt/dictionaries/file0123*.tsv</command>

не?

там же в доке чуть ниже Local file

насоздавайте таблиц по путям, или по именам файлов

Артемий
29.03.2018
13:48:30
Executable file <command>cat /opt/dictionaries/file0123*.tsv</command>
Можно будет получить данные из файла N? Т.е. могу ли я в эту команду передать переменную? Файлов будет сотни тысяч, не думаю, что создание таблиц хорошая идея.

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

Артемий
29.03.2018
13:50:20
да не, не переменную в команду, а маску, чтобы cat *.tsv
Про маску все понятно, но мне надо получить только один файл из сотни тысяч.

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
а там написано, что по HTTP можно
Данные находятся не на клиенте, а на сервере. Чтобы не гонять их каждый раз между серверами

Может быть есть что-то вроде "LOAD DATA INFILE"?

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

если вы так доверяете этому клиенту, сделайте ему ручку, чтобы грузить этот файл в таблицу, да и все

Артемий
29.03.2018
14:02:20
то есть вы хотите, чтобы удаленный клиент грузанул данные в кх из файла на сервере?
Да, только не важно удаленный клиент или нет. Данные лежат в папке рядом с CH и обнволяются по мере необходимости.

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
их заранее не хотят грузить в кх

Помогите, не могу сообразить. Есть тяжелый запрос в результате котороо получается небольшая группировка вида: ┌─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 │ └───────┴───┴───┴─────────┴─────────┘
:) 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. единственное я не помню, подзапросы один раз выполнятся, или на каждую строчку будут выполняться, кажется все-таки один

Артемий
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
Такое как раз должен PVS-Studio хорошо ловить :)
A pull request "ClickHouse/dbms/src/Functions/FunctionsStringArray.h" можно делать? И если да, то в какую ветку.

Alexey
29.03.2018
15:33:25
@milovidov_an не подскажете, можно как-то заставить кликхаус не падать при старте, если он не может подцепиться к внешнему одбц-словарю?
Есть конфигурационный параметр: https://clickhouse.yandex/docs/ru/operations/server_settings/settings/#dictionaries_lazy_load Правда замечу, что по-умолчанию загрзузка "ленивая" - не при старте, а при первом запросе. Возможно, что у вас изменено.

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
Есть конфигурационный параметр: https://clickhouse.yandex/docs/ru/operations/server_settings/settings/#dictionaries_lazy_load Правда замечу, что по-умолчанию загрзузка "ленивая" - не при старте, а при первом запросе. Возможно, что у вас изменено.
У нас настройка в дефолте. КХ пытается установить ODBC подключение. Пытается он читать данные или нет - уже не важно, с учётом того что он падает.

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

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:34:56
А почему только одно? with 1 as a, 2 as b, 3 as c etc.
with (select 1 as a, 2 as b, 3 as c) select a, b, c вот так уже не работает, и так тоже: with arrayJoin(range(10)) as a select a

Pavel
29.03.2018
16:43:00
ну так это уже другой кейс

хочется реиспользовать результаты, а не объединять разные запросы

Артемий
29.03.2018
16:44:40
ну так это уже другой кейс
with (select 3, 5) as t select t.2

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
Привет, если файлы таблиц через rsync гонять в альтернативу ZooKeeper у? Нужна реплика но нет времени с ZooKeeper разобраться
Можно настроить "репликацию" через шардирование. Это когда одни и те же данные будут писать сразу на два указанных сервера. Без ZooKeeper

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

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
он не создавать а читать будет на главном кх

Страница 476 из 723