184 похожих чатов

Всем привет! У нас есть таблица TEST_TABLE и материализация TEST_MAT для

нее.

Вот код создания:

CREATE TABLE DB1.TEST_TABLE
(
ID String,
FIELDA UInt32,
FIELDB UInt32
) ENGINE = MergeTree()
PARTITION BY ID
ORDER BY ID;


CREATE MATERIALIZED VIEW DB1.TEST_MAT
(
ID String,
FIELDC UInt64
) ENGINE = MergeTree()
AS
SELECT ID,
arrayJoin(arraySlice(range(intDiv(FIELDA + FIELDB, 100) + 1), intDiv(FIELDB, 100) + 1)) as FIELDC
FROM DB1.TEST_TABLE;

При выполнении запроса:

INSERT INTO DB1.TEST_TABLE
(ID, FIELDA, FIELDB)
SELECT ID,
FIELDA,
FIELDB
FROM DB1.TMP_TABLE;

Получаем ошибку:

> A call to function range would produce 135616708 array elements, which is greater than the allowed maximum of 100000000: while pushing to view DB1.TEST_MAT

Таблица TMP_TABLE из которой копируются данные достаточно большая.

При чем в следующих случаях все работает:

1. Если сначала добавить данные в таблицу TEST_TABLE, а потом создать TEST_MAT с POPULATE
2. Если создать TEST_MAT не как матвью, а как таблицу и выполнить запрос:

INSERT INTO DB1.TEST_MAT
SELECT ID,
arrayJoin(arraySlice(range(intDiv(FIELDA + FIELDB, 100) + 1), intDiv(FIELDB, 100) + 1)) as FIELDC
FROM DB1.TEST_TABLE;

С чем связанно ограничение в 100000000, можно ли его как то поменять и есть ли путь обхода?

1 ответов

7 просмотров

https://clickhouse.yandex/docs/ru/query_language/functions/array_functions/#range-n 1. Возвращает массив чисел от 0 до N-1. На всякий случай, если на блок данных, создаются массивы суммарной длины больше 100 000 000 элементов, то кидается исключение. 2. собирать КХ самому. https://github.com/yandex/ClickHouse/blob/master/dbms/src/Functions/range.cpp#L47

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта