Thank you!
That was exactly it!
I didn’t realize that was the behavior. But it of course makes sense after
being told.

Eric

On Fri, Jan 5, 2024 at 17:00 Julian Hyde <[email protected]> wrote:

> Maybe the problem is the ‘build()’ after ‘as(“core”)’?
>
> The alias is associated with entry on the RelBuilder stack, not the
> RelNode. Once you have popped it, the alias is forgotten.
>
> Julian
>
> > On Jan 5, 2024, at 10:47, Eric Berryman <[email protected]> wrote:
> >
> > I’m trying to use a union in a join, but I don’t see the alias as
> available
> > (I get an error that the alias/field does not exist on the line of the
> > below left join). The error shows available alias/fields and I see the
> > union id fields but the alias is an empty set aliases:[]. Is this
> possible?
> >
> > Thank you!
> > Eric
> >
> > List tableScans = new ArrayList<>();
> >
> > for (String tableName : tablesToUnion) {
> >  RelNode tableScan = builder
> >    .scan(tableName)
> >    .project(builder.field("id"), builder.field("field1"))
> >   .build();
> >   tableScans.add(tableScan);
> > }
> > // Use pushAll to add all table scans to the stack and create a UNION ALL
> > builder.pushAll(tableScans);
> > RelNode union = builder.union(true, tableScans.size());
> >
> > // Start with the union as the initial part of the join
> > RelNode current = builder.push(union).as("core").build();
> >
> > // Iterate over the tables to join
> > for (String joinTable : tablesToJoin) {
> >  current = builder
> >     .push(current)
> >     .scan(joinTable)
> >     .join(JoinRelType.LEFT,
> >          builder.equals( builder.field(2, "core", "id"),
> >          builder.field(joinTable, "id")))
> >     .project(builder.fields())
> >     .build();
> > }
>

Reply via email to