ClickHouse / ClickHouse/ClickHouse
Apply `optimize_functions_to_subcolumns` to subcolumns
- Dominant language
- C++
- Stars
- 49.9k
- Forks
- 9k
- Avg merge
- 20h 33m
- Merged PRs (30d)
- 501
Description
**Use case**
Some cases are not optimized now but they are suitable for optimization:
```sql
CREATE TABLE test1
(
`t` Tuple(a Nullable(String), arr Array(UInt32)),
`m` Map(String, String)
)
ENGINE = Memory;
INSERT INTO test1 VALUES (('a', [1, 2]), map('a', 'b', 'c', 'd'));
EXPLAIN QUERY TREE dump_ast = 1, dump_tree = 0 SELECT isNull(t.a) FROM test1;
┌─explain────────────────────────────────────────┐
1. │ SELECT __table1.`t.a` IS NULL AS `isNull(t.a)` │
2. │ FROM default.test1 AS __table1 │
└────────────────────────────────────────────────┘
EXPLAIN QUERY TREE dump_ast = 1, dump_tree = 0 SELECT length(t.arr) FROM test1;
┌─explain────────────────────────────────────────────┐
1. │ SELECT length(__table1.`t.arr`) AS `length(t.arr)` │
2. │ FROM default.test1 AS __table1 │
└────────────────────────────────────────────────────┘
EXPLAIN QUERY TREE dump_ast = 1, dump_tree = 0 SELECT length(m.keys) FROM test1;
┌─explain──────────────────────────────────────────────┐
1. │ SELECT length(__table1.`m.keys`) AS `length(m.keys)` │
2. │ FROM default.test1 AS __table1 │
└──────────────────────────────────────────────────────┘
EXPLAIN QUERY TREE dump_ast = 1, dump_tree = 0 SELECT length(mapKeys(m)) FROM test1;
┌─explain──────────────────────────────────────────────────┐
1. │ SELECT length(__table1.`m.keys`) AS `length(mapKeys(m))` │
2. │ FROM default.test1 AS __table1 │
└──────────────────────────────────────────────────────────┘
```
**Describe the solution you'd like**
Optimize these (and similar) cases to the following queries:
```sql
SELECT t.a.null FROM test1; -- SELECT isNull(t.a) FROM test1;
┌─t.a.null─┐
1. │ 0 │
└──────────┘
SELECT t.arr.size0 FROM test1; -- SELECT length(t.arr) FROM test1;
┌─t.arr.size0─┐
1. │ 2 │
└─────────────┘
SELECT m.size0 FROM test1; -- SELECT length(m.keys) FROM test1 or SELECT length(mapKeys(m)) FROM test1
┌─m.size0─┐
1. │ 2 │
└─────────┘
```
Contributor guide
Assessment
This issue has not been assessed yet.