You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Scott Fines <bf...@apple.com.INVALID> on 2021/05/13 16:11:16 UTC
Materialization of nested queries
Hi all,
I’m hoping this question is super easy, but I’m running into a bit of a roadblock while researching Calcite, and thought maybe someone on here might be interested.
So imagine that you have a fairly simple nested data structure, like
TableName struct {
a int,
b struct {
c float
}
}
And you are wanting to issue the query `select a, b.c from TableName where c = 3.14`. Getting the basic table scan to plan properly is a pretty straightforward task.
Now suppose that you want to define a materialization of the query `select a,b.c from TableName`. When I attempt this, the materialization is never used—I tracked it down and it’s because the SubstitutionVisitor does not appear to consider it a “true” substitution (mundane details below).
So my question is this: Is this type of materialization possible? If so, how would I go about it? (In broad terms, at least).
Thanks for your help!
Scott Fines
Code details:
The SubstitutionVisitor runs into a situation where it finds that the MVT is an equivalent expression, but does not believe it to be a “true” substitution. Specifically, `targetDescendent != this.target`, so the substitution is discarded. I’m not sure of the reasoning for why the visitor requires object equality here, perhaps there is some more context I am missing?