Добрый день, коллеги
Вопрос по поводу материализованных стролбцов для Nested полей
Если не использовать Nested материализация проходит успешно:
CREATE TABLE table1 (
CreateDate DateTime,
TotalSum Float64 MATERIALIZED arraySum(ProductTotalSums),
ProductTotalSums Array(Float64)
) ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(CreateDate)
ORDER BY CreateDate
;
Если заменить массив ProductTotalSums на поле вложеной структуры
CREATE TABLE table2 (
CreateDate DateTime,
TotalSum Float64 MATERIALIZED arraySum(Records.ProductTotalSums),
Records Nested (
ProductIds UInt64,
ProductTotalSums Float64
)
) ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(CreateDate)
ORDER BY CreateDate
;
то если не использовать матеиализацию столбца TotalSum
то все работет корректно - столбец ProductTotalSums вложенной структуры Records во всех запосах видится как массив с именем Records.ProductTotalSums
Но при попытке его материализовать выводится сообщение
Received exception from server (version 20.4.3):
Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'Records.ProductTotalSums' while processing query: 'CAST(arraySum(Records.ProductTotalSums) AS TotalSum_tmp, 'Float64') AS TotalSum, TotalSum_tmp', required columns: 'Records.ProductTotalSums', source columns: 'Records' 'TotalSum' 'CreateDate': default expression and column type are incompatible.
видимо не доделано.
Nested -- это сахар который работает и имеет значение только в момент парсинга create table
вот это ровно тоже самое, просто без сахара
CREATE TABLE table2
(
`CreateDate` DateTime,
`TotalSum` Float64 MATERIALIZED arraySum(Records.ProductTotalSums),
`Records.ProductIds` Array(UInt64),
`Records.ProductTotalSums` Array(Float64)
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(CreateDate)
ORDER BY CreateDate
Records_ProductIds
Array(UInt64),
Records_ProductTotalSums
Array(Float64)
не одно и тоже с
Records
.
ProductIds
Array(UInt64),
Records
.
ProductTotalSums
Array(Float64)
из-за точки в имени поля "." insert проверяет что кол-во элементов в массивах совпадает