ydb-platform / ydb

YDB is an open source Distributed SQL Database that combines high availability and scalability with strong consistency and ACID transactions
https://ydb.tech
Apache License 2.0
3.71k stars 507 forks source link

q8: Cross join is not optimized #5026

Open aakulaga-ydb opened 1 month ago

aakulaga-ydb commented 1 month ago

https://gist.github.com/alephonea/11601dde8f1d85fbf4af21271eb0b150

Неправильно определен тип джойна как cross-join, и из-за этого CBO не триггерится

qrort commented 1 month ago

q8, cross join не переписался из-за сложного предиката с substring, надо разбираться, как поддержать и возможно ли переписать джойн вообще. Пока детально не смотрели

qrort commented 2 weeks ago

Тут, опять же, сложный кейс:

Есть два подзапроса $1, $2 вида select f(colum) from table where g(column), Далее запрос select * from a cross join b cross join c cross join (select * from $1 left join $2) where substring(c.column) == substring(column from left join), cамый правый cross джойн не оптимизирован по причине "не умеем оптимизировать cross join для предиката равенства над результатами функций, примененных к колонке"

https://github.com/ydb-platform/ydb/blob/23bc78bac49a4e25490b19925cd4dcba807acbbb/ydb/library/yql/core/common_opt/yql_flatmap_over_join.cpp#L883

Для начала нужно научить INNER JOIN работать с функциями над ключами объединения.