Приветсвую. Обнаруженно странное поведение при применении аггрегатных функций к массивам с Nullable элементами.
CREATE TABLE testNested_local(
Id Int32,
Objects Nested
(
Id Int32,
Foo Nullable(Int32)
),
Arr Array(Nullable(Int32))
)ENGINE = MergeTree()
ORDER BY Id
CREATE TABLE testNested AS testNested_local
ENGINE = Distributed(cluster, database, testNested_local, Id)
INSERT INTO testNested SELECT number, [-number], [null], [null] FROM numbers(10)
SELECT * FROM testNested
FORMAT JSONEachRow
{"Id":0,"Objects.Id":[0],"Objects.Foo":[null],"Arr":[null]}
{"Id":1,"Objects.Id":[-1],"Objects.Foo":[null],"Arr":[null]}
{"Id":2,"Objects.Id":[-2],"Objects.Foo":[null],"Arr":[null]}
{"Id":3,"Objects.Id":[-3],"Objects.Foo":[null],"Arr":[null]}
{"Id":4,"Objects.Id":[-4],"Objects.Foo":[null],"Arr":[null]}
{"Id":5,"Objects.Id":[-5],"Objects.Foo":[null],"Arr":[null]}
{"Id":6,"Objects.Id":[-6],"Objects.Foo":[null],"Arr":[null]}
{"Id":7,"Objects.Id":[-7],"Objects.Foo":[null],"Arr":[null]}
{"Id":8,"Objects.Id":[-8],"Objects.Foo":[null],"Arr":[null]}
{"Id":9,"Objects.Id":[-9],"Objects.Foo":[null],"Arr":[null]}
Запросы к Distributed таблице.
SELECT
any(Objects.Foo),
has(any(Objects.Foo), 1),
uniqArray(Objects.Foo)
FROM testNested
FORMAT JSONEachRow
{
"any(Objects.Foo)": [1],
"has(any(Objects.Foo), 1)": 1,
"uniqArray(Objects.Foo)": null
}
При вызове Any к Nullable полю Nested структуры появляется элемент 1, хотя его там не должно быть.
SELECT
any(Objects.Foo),
has(any(Objects.Foo), 0),
any(Arr),
has(any(Arr), 1),
uniqArray(Objects.Foo),
uniqArray(Arr)
FROM testNested
FORMAT JSONEachRow
{
"any(Objects.Foo)": [0],
"has(any(Objects.Foo), 0)": 1,
"any(Arr)": [1],
"has(any(Arr), 1)": 1,
"uniqArray(Objects.Foo)": null,
"uniqArray(Arr)": null
}
С массивом такая же картина. Только у поля Nested структуры теперь 0.
Запросы к локальным таблицам.
SELECT
any(Objects.Foo),
has(any(Objects.Foo), 1),
uniqArray(Objects.Foo)
FROM testNested_local
FORMAT JSONEachRow
{
"any(Objects.Foo)": [],
"has(any(Objects.Foo), 1)": 0,
"uniqArray(Objects.Foo)": null
}
SELECT
any(Objects.Foo),
has(any(Objects.Foo), 0),
any(Arr),
has(any(Arr), 1),
uniqArray(Objects.Foo),
uniqArray(Arr)
FROM testNested_local
FORMAT JSONEachRow
{
"any(Objects.Foo)": [],
"has(any(Objects.Foo), 0)": 0,
"any(Arr)": [],
"has(any(Arr), 1)": 0,
"uniqArray(Objects.Foo)": null,
"uniqArray(Arr)": null
}
Any возвращает пустые массивы, хотя их нет таблице.
ClickHouse
19.9.5.36