данными. 500 М
SQL
create table data_base
(
id_0000 Int64,
diff_pc Float64,
id_1111 Int64,
id_2222 Int64,
id_3333 Int64,
str_cod String,
prtdate DateTime
) engine = MergeTree()
-- потом поменяется на toStartOfHour или toStartOfInterval(t, INTERVAL 30 minute)
-- в агрегации не участвует, нужно чтобы дропать устаревшие партиции
PARTITION BY toStartOfTenMinutes(prtdate)
ORDER BY (id_0000, id_1111);
Нужно сделать две таблицы
SQL
-- id_0000 - id_1111 - id_2222 - str_cod
create table data_agg
(
id_0000 Int32,
id_1111 Int32,
id_2222 Int32,
str_cod String,
diff_pc_median AggregateFunction(median(), Float64)
) engine = AggregatingMergeTree()
ORDER BY (id_0000, id_1111, id_2222, str_cod);
-- id_0000 -- id_1111 -- id_3333
create table data_common_agg
(
id_0000 Int32,
id_1111 Int32,
id_3333 Int32,
diff_pc_median AggregateFunction(median(), Float64)
) engine = AggregatingMergeTree()
ORDER BY (id_0000, id_1111, id_3333);
правильно ли в таком случае подобраны первичные ключи?
стоит ли выделять ключ из исходной таблицы в внутренний кортеж?
SQL
ORDER BY ((id_0000, id_1111), id_2222, str_cod);
ORDER BY ((id_0000, id_1111), id_3333);
пытаюсь выполнить такой инсерт
SQL
INSERT INTO data_agg
SELECT
id_0000,
id_1111,
id_2222,
str_cod,
arr_ids,
diff_pc_median
FROM
(SELECT
id_0000,
id_1111,
id_2222,
str_cod,
medianState(diff_pcn) AS diff_pc_median
FROM data_base
-- тот же вопрос, правильно ли тогда выбран GROUP BY, будет ли какой-то отличие при
-- GROUP BY (id_0000, id_1111, id_2222, str_cod)
-- GROUP BY (id_0000, id_1111), id_2222, str_cod
GROUP BY id_0000, id_1111, id_2222, str_cod)
ARRAY JOIN [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21] as arr_ids;
Вы что то знаете про MV ?
Обсуждают сегодня