@clickhouse_ru

Страница 583 из 723
Denis
10.07.2018
08:27:41
потому что он String (не наллабл) распарсил как эмпти, а потом строку из тучи запятых выдал

Denis
10.07.2018
08:40:08
так начала не видно. там колонка Nullable(DateTime), в которую пришёл null? а если поставить кавычки двойные?

Michal
10.07.2018
08:45:46
Всем привет. Подскажите пожалуйста. У меня есть данные в json по типу {"number":1,"string":1} {"string":9,"number":2}. Мне нужно их разложить в следующем виде: number,1 string,1 string,9 number,2 Искал в доке функции для работы с json или регулярками, но ничего подходящего не нашел.
Встроенных (и быстрых) способов итерации по ключам JSON в кликхаус, увы, нет. Похожую задачу решал примерно регулярными выражениями, примерно так: WITH extractAll(json_field, '[{,]"([^"]*)":') as json_keys, extractAll(json_field, ':(".*?")[,}]') as json_values SELECT ...Но по понятным причинам с регулярными выражениями это все мало стабильно, и только один очень жестко определенный формат JSON может прочитать, притом довольно медленно.

Google
Tima
10.07.2018
08:49:33
Запустил команду удаления на реплицированой таблице, в system.mutations появилась команда, parts_to_do упало до 1568 и дальше не идёт. В логе КХ ничего криминального нет. Что может быть не так? Где-то ещё можно посмотреть что с операцией удаления?

Артем
10.07.2018
08:59:47
так начала не видно. там колонка Nullable(DateTime), в которую пришёл null? а если поставить кавычки двойные?
вставка работает корректно, если в поля с типом DiteTime вставить дату, с кавычками не работает

Простой пример при котором вставка пустой даты не работает, может кто ни будуть подсказать почему так происходит CREATE TABLE apps ( date Date, name Nullable(String), birthday DateTime ) ENGINE MergeTree PARTITION BY (date) ORDER BY (date); INSERT INTO apps FORMAT CSV 2018-01-01,,;

Артем
10.07.2018
09:05:42
в этом примере DateTime не указано как nullable
это не влияет, в доке написанно что при отсутсвтие значение у поля DateTime будет использованно дефолтное значание

Denis
10.07.2018
09:06:07
так в таблице не задано дефолтное

и тут в csv строке именно null. некоторое время назад проверял, и кликхаус не заменял null на дефолтное

INSERT INTO apps FORMAT CSV 2018-01-01,; а вот так сработает?

Артем
10.07.2018
09:07:18
и тут в csv строке именно null. некоторое время назад проверял, и кликхаус не заменял null на дефолтное
документация говорит следующее Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также 0000-00-00 для дат и 0000-00-00 00:00:00 для дат с временем. NULL-ы не поддерживаются.

Denis
10.07.2018
09:08:11
думаю, проблема именно с парсингом, а не вставкой в таблицу. да, таблица поддерживает. но парсинг строится на описании таблицы и работает дальше по нему.

Артем
10.07.2018
09:08:36
и тут в csv строке именно null. некоторое время назад проверял, и кликхаус не заменял null на дефолтное
насколько я помню, что бы указать null можно сделать вот так INSERT INTO apps FORMAT CSV 2018-01-01,,\N;

Google
Артем
10.07.2018
09:09:08
и это рабочая схема, но мне не подходит

Oleh
10.07.2018
09:57:59
Всем привет. Подскажите, а можно как-то ускорить запрос OPTIMIZE TABLE table_name PARTITION $date FINAL Потому-что когда происходит эта операция постоянно валятся <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 104, e.displayText() = Connection reset by peer, e.what() = Connection reset by peer

Андрей
10.07.2018
10:55:26
Коллеги, добрый день! Есть кластер из 3 шардов по 2 реплики + еще одна нода, на которой есть распределенная таблица смотрящая на эти шарды. Подскажите имеет ли смысл настраивать zookeeper на машине с Distributed таблицей? Кроме нее ничего на ноде нет. И как настроить репликацию на уровне шардов,а не только реплик?

Vsevolod
10.07.2018
11:06:36
а снимите с ручника: нужно показать значения вида count(x where some codition), count(y where another condition) - как лучше это сделать? union all делает не то, что я хочу

Vsevolod
10.07.2018
11:13:33
нашел, спасибо

Oleg
10.07.2018
11:42:37
Привет! Пытаюсь вставить данные в TSV-формате в ReplicatedMergeTree через консольный клиент, получаю отлуп Code: 32. DB::Exception: Attempt to read after eof В логах ошибок ничего нет, в обычном логе есть запись о том, что запрос таки был. Сервер версии 1.1.54327, клиент 1.1.54390 В файле с данными вроде ничего криминального нет. При попытке вставить кусочек данных, откусив его через например head, одни и те же данные то вставляются, а то нет с аналогичной ошибкой. В чем может быть косяк?

Alex
10.07.2018
12:06:23
Tima
10.07.2018
12:27:19
Tima указание max_block_size/max_insert_block_size перед insert into select лучше взять за привычку, в зависимости от того как вы храните данные и какие они можно сильно уйти по памяти, возможно это нужно сделать в самом КХ или как-то адаптивно просчитывать его и размер мержей при этом @milovidov_an ?
Можете уточнить как эти параметры влияют. Я их меняю, но не вижу разницы, в логе по прежнему сыпится ReplicatedMergeTreeQueue): Not executing log entry for part 20180119_20180122_0_6_1 because source parts size (43.08 MiB) is greater than the current maximum (4.45 MiB) И команду удаления не проходят

Артем
10.07.2018
12:44:17
коллеги а как то можно дать доступ только к одной БД в КХ ?

Stanislav
10.07.2018
12:49:30
<allow_databases> <database>telegraf</database> </allow_databases>

Правда, system всё равно доступна, как и список БД.

LeiDruid
10.07.2018
12:58:52
ПОдскажите, обязательно ли в запросе insert into ... select ... результат select должен поместиться в memory limit ?

LeiDruid
10.07.2018
13:01:31
Google
Константин
10.07.2018
13:20:49
Добрый день! Такой вопрос, можно ли внутри кластера подключать таблицы между нодами, если они не реплицируемые?

допустим, у меня есть нода-Б на ней уникальная таблица, я хочу ее использовать на ноде А

Wolf
10.07.2018
13:21:46
ну скопируйте данные ее , но вообще это что то странное

Константин
10.07.2018
13:22:10
не-не

копировать нет

надо иметь к ней доступ

Michal
10.07.2018
13:25:29
Спасибо, попытаюсь это как-то проверить. Вроде старался экранировать.
Трехстрочник на питоне, которым помогал кликхаусу понять непонятные ему CSV разновидности: https://gist.github.com/filimonov/57e270104a3e48d7fd6f70a3d4ec2b95

Константин
10.07.2018
13:31:02
См. https://clickhouse.yandex/docs/en/table_functions/remote/
Спасибо, правильно я понял, что используется так: select .... from remote(....);???

Michal
10.07.2018
13:34:54
ПОдскажите, обязательно ли в запросе insert into ... select ... результат select должен поместиться в memory limit ?
Ну ограничение на память касается любого селекта, иначе получите Exception. Т.е. если например будете делать какую-то сложную агрегацию и память закончится так и не успев подготовить результат - то получите исключение и ничего не вставится. Но если это относительно простой селект (типа простая фильтрация исходной таблицы) - то он будет его выполнять в поточном режиме, типа "немного данных прочитал - немного вставил, немного прочитал - немного вставил" и т.д. Для этого памяти нужно немного и всем данным в память помещаться совсем не обязательно.

Спасибо, правильно я понял, что используется так: select .... from remote(....);???
Правильно. Примеры можете в тестах найти: https://github.com/yandex/ClickHouse/search?l=SQL&q=remote

Michal
10.07.2018
13:46:03
Может инсерт был в Temporary / Memory таблицу ?

Или селект с сортировкой?

Sergey
10.07.2018
13:54:55
А в какую сторону начинать копать, если периодически натыкаемся на "Another quorum insert has been already started"? При этом не системно, выявить закономерность не получается пока.

Google
Vladimir
10.07.2018
13:58:01
Привет всем. пытаюсь перемножить попарно элементы 2х массивов, пока ничего другого не придумал: arrayMap(i -> amount[i + 1] * price[i + 1], range(length(amount))) Можно как то это по красивше это сделать? и я так понимаю ничего для работы с индексами массивов в лямбдах нет?

Sergey
10.07.2018
14:03:58
А в какую сторону начинать копать, если периодически натыкаемся на "Another quorum insert has been already started"? При этом не системно, выявить закономерность не получается пока.
И я правильно догадываюсь, что это может быть следствием попытки записать что-то до того, как подтвердился кворум предыдущей записи?

LeiDruid
10.07.2018
14:11:51
Может инсерт был в Temporary / Memory таблицу ?
неа, обычный, из MergeTree в ReplicatedMergeTree

Evgeny
10.07.2018
14:18:35
Чуть корректнее ваш вариант: arrayMap(i -> amount[i] * price[i], arrayEnumerate(amount))Вариант "в лоб" arrayMap( (a,p) -> a*p, amount, price )
Хм, а что лучше? Мап выглядит красивее, почему вы его выделили как "в лоб"?

Michal
10.07.2018
14:20:09
Хм, а что лучше? Мап выглядит красивее, почему вы его выделили как "в лоб"?
В смысле без ненужных (в этом случае) развлечений с индексами массивов. Вот просто берем 2 массива и поэлементно перемножаем. В лоб и без посредников в виде индексов массивов :)

Michal
10.07.2018
14:24:59
И я правильно догадываюсь, что это может быть следствием попытки записать что-то до того, как подтвердился кворум предыдущей записи?
Похоже на то. https://github.com/yandex/ClickHouse/blob/d5f8e4a1a511fd0f55c9db3674056b5878e0e0d3/dbms/src/Storages/MergeTree/ReplicatedMergeTreeBlockOutputStream.cpp#L259 @milovidov_an действительно нельзя >1 кворумного инсерта одновременно?

s3rj1k
10.07.2018
14:35:26
всем привет, а у кликхауса есть https интерфейс?

papa
10.07.2018
14:36:02
localhost:8123

а, https

тогда не думаю.

Sergey
10.07.2018
14:36:34
Похоже на то. https://github.com/yandex/ClickHouse/blob/d5f8e4a1a511fd0f55c9db3674056b5878e0e0d3/dbms/src/Storages/MergeTree/ReplicatedMergeTreeBlockOutputStream.cpp#L259 @milovidov_an действительно нельзя >1 кворумного инсерта одновременно?
Но при этом в доке: As there is no quorum acknowledgment of inserts, just-inserted data might be lost if one node fails. Вроде бы понятно, но ошибка выше очень смахивает на недо-ack.

s3rj1k
10.07.2018
14:36:52
в конфиге есть такое <!-- For HTTPS and SSL over native protocol. --> <!-- <https_port>8443</https_port> <tcp_port_secure>9440</tcp_port_secure> --> @orantius

Michal
10.07.2018
14:39:57
всем привет, а у кликхауса есть https интерфейс?
Есть. Нужно раскомментировать <https_port> в конфиге и настроить openSSL: https://clickhouse.yandex/docs/en/operations/server_settings/settings/#server_settings-openSSL Как вариант - есть ещё chproxy: https://github.com/Vertamedia/chproxy

Yaroslav
10.07.2018
17:02:03
Делаю выборку из таблицы, в условии необходимо указать имя и диапазон дат. Первичный ключ состоит из имени, диапазона дат и cityHash. Партиции по суткам. Как я понял для того, чтобы эффективнее найти можно написать условие prewhere log_date='нужный день'. А как быть с условиями остальными? Куда их правильнее поместить в where или prewhere? В документации сказано не указывать в prewhere индексы.

Google
Yaroslav
10.07.2018
17:03:46
диапазон времени*

Vitaliy
10.07.2018
17:23:59
Можна ли запустить зукипер на одной ноде?

Alexey
10.07.2018
17:35:07
Например, вы дополнительно указываете type=2 в prewhere, которого нет в ключе, и prewhere просто отсекает другие type, а потом по type=2 уже начинает работать where

Если не ошибаюсь, поправьте если что

Yaroslav
10.07.2018
17:46:54
спасибо, про это и хотел узнать, что если поля указаны в первичном ключе, то есть ли смысл их в prewhere писать

Evgeniy
10.07.2018
17:47:44
Есть поле с массивом id-шников. Хочу получить массив наименований с использованием внешнего словаря. Т.е. вызвать dictGetString для каждого элемента в массиве. Можно это как то сделать?

Ilya
10.07.2018
17:56:50
Какой ужас

Верните мне SQL из 2007

Sergey
10.07.2018
18:02:37
Почему 2007? Не было ж стандартов этого года.

Denis
10.07.2018
18:10:00
зато сентябрь горел

Denis
10.07.2018
22:50:19
И произойдет ли вставка, если запрос сфэйлится по памяти?
create table test.test(a UInt64,b UInt64) Engine=MergeTree partition by a order by tuple (); insert into test.test select round(number/1000000), throwIf(number=8000000) from numbers(15000000); select count() from test.test 7340032 drop table test.test; create table test.test(a UInt64,b UInt64) Engine=MergeTree partition by a order by tuple (); set max_block_size = 15000000; set max_insert_block_size = 15000000; insert into test.test select round(number/1000000), throwIf(number=8000000) from numbers(15000000); select count() from test.test 0 rows in set. правда max_block_size наоборот, увеличивает расход памяти.

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