в строки, когда это понадобится?
могу написать пример или дать ссылку, если вы предоставите create table из трех полей, + insert, + и что нужно на выходе
У меня, вроде, получилось, как мне надо без Nested, просто поля SimpleFunction(grouparrayarray). И select выдал, что нужно, завтра всю структуру замучу с мат вью. Если будут еще вопросы, предоставлю пример. Спасибо!)
ver 21.11.4.14 ; --таблица источник для мат. вью - компании CREATE OR REPLACE TABLE Test.Company ( concern String, branch Int32, company String, inn String ) ENGINE = MergeTree ORDER BY (concern, branch) ; --таблица, аггрегирующая данные компаний по концернам и веткам во вложенную структуру CREATE OR REPLACE TABLE Test.Concern ( concern String, branch Int32, company SimpleAggregateFunction(groupArrayArray, Array(String)), inn SimpleAggregateFunction(groupArrayArray, Array(String)) ) ENGINE = AggregatingMergeTree ORDER BY (concern, branch) ; INSERT INTO Test.Company (concern, branch, company, inn) VALUES('concern1', 1, 'company1', '1234') ; INSERT INTO Test.Company (concern, branch, company, inn) VALUES('concern1', 1, 'company2', '2345') ; --при прямой вставке данных в аггрегирующую таблицу Test.Company из Test.Company массивы заполняются, как надо INSERT INTO Test.Concern (concern, branch, company, inn) SELECT concern, branch, array(company), array(inn) FROM Test.Company ; concern branch company inn concern1 1 ['company1','company2'] ['1234','2345'] ; SELECT concern, branch, company, inn FROM Test.Company ; SELECT concern, branch, company, inn FROM Test.Concern ; SELECT concern, branch, company, inn, inn_dif FROM Test.Concern ARRAY JOIN inn as inn_dif ; DROP TABLE Test.mv_Concern ; ------ИСПОЛЬЗОВАНИЕ МАТ. ВЬЮ --мат. вью вариант 1 CREATE MATERIALIZED VIEW Test.mv_Concern TO Test.Concern AS SELECT concern, branch, array(company), array(inn) FROM Test.Company ; --мат. вью вариант 2 CREATE MATERIALIZED VIEW Test.mv_Concern TO Test.Concern AS SELECT concern, branch, groupArray(company), groupArray(inn) FROM Test.Company GROUP BY concern, branch ; -- при вставке данных в таблицу - источник для мат. вью Test.Company, массивы в Test.Concern пустые concern branch company inn concern1 1 [] [] concern1 1 [] []
в общем, с мат.вью, почему-то не получилось, в коде выше все описано
Я бы сказал, что это ожидаемое поведение. И почему это не выходит на первом слайде https://www.youtube.com/watch?v=1LVJ_WcLgF8&list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597s
я понимаю, что вставляются в указанную в мат.вью не из таблицы источника, а вставляется блок и в целевую таблицу и в мат. вью, но он же содержит нужные данные, но я, все равно не поняла, почему он эти данные не может превратить в массив, можно для идиотов на пальцах? о_О и, есть ли, все-таки, вариант накапливать данные во вложенных структурах внутри Clickhouse, без работы внешних сервисов?
Ещё раз посмотрите видео, вы не поняли. Каждая вставка разбивается на несколько десятков потоков, и каждый поток отдельно обрабатывает MV
я идиота кусок, дело в алиасах в запросе в мат. вью, вопрос снимается, но если есть предложения сделать это лучше, буду рада!
дело в алиасах было
лучше не сделать. вариант мат вью без групбай вставляет больше строк, но optimize_on_insert включен по дефолту поэтому это не важно, AggregatingMergeTree само сделает групбай в момент инсерта. вариант мат вью с групбай вставляет меньше строк, но ест больше памяти. наверное надо тестировать какой вариант быстрее
понял, я просто еще думала, может с Nested удасться это провернуть, чтобы потом в select делать array join с одним полем - вложенная структура, а не с каждым, которое просто массив
в любом случае, спасибо, буду тестировать оба варианта мат.вью
чтож вы все никак не хотите понять про синтаксический сахар. Там же просто колонки в таблице надо с точкой назвать типа A.a, A.b это тоже самое что и A Nested (a .., b..)
у меня таблица с названиями с точкой f.concern, f.branch не создается - ошибка
мне из канады не видно ошибку, очень далеко. подозреваю что вы не указываете кавычки вокруг имен, либо двойные ", либо бэктики ` типа `A.a` Int64, `A.b` String
CREATE OR REPLACE TABLE Test.Concern ( concern String, branch Int32, f.company SimpleAggregateFunction(groupArrayArray, Array(String)), f.inn SimpleAggregateFunction(groupArrayArray, Array(String)) ) ENGINE = AggregatingMergeTree ORDER BY (concern, branch) Code: 62. DB::Exception: Syntax error: failed at position 237 ('.') (line 6, col 3): .company SimpleAggregateFunction(groupArrayArray, Array(String)), f.inn SimpleAggregateFunction(groupArrayArray, Array(String)) ) ENGINE = AggregatingMer. Expected one of: nested table, ALIAS, identifier, DEFAULT, data type, MATERIALIZED. (SYNTAX_ERROR) (version 21.11.4.14 (official build))
все, через "" получилось, и работает, спасибо!
Обсуждают сегодня