You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Tal Glanzman <ta...@gmail.com> on 2020/07/20 15:15:20 UTC

custom metadata logic

hi,

I am trying to figure out how to add custom logic for providing metadata to
nodes inside my adapter with no luck.

I have an implementation of my own RelMetadataProvider, as described in the
docs.

After looking around, i still couldn't find a way to use this provider in
the planning phase
- no property in the jdbc connection string
- tried to invoke setMetadataProvider(provider) on the cluster of the
initial nodes of the tree

drilling a bit, i notice that the provider in use is
JaninoRelMetadataProvider with provider=DefaultRelMetadataProvider.

Is there a way to do such a thing using the standard execution?

any guidance will be much appreciated, thanks!

Re: custom metadata logic

Posted by Tal Glanzman <ta...@gmail.com>.
hi Danny,

I didn't mention, but I use calcite 1.21.0.

have attempted to use the function already with no success; it didn't seem
to actually change the provider.
have used the RelMetadataQuery.THREAD_PROVIDERS directly and it worked
perfectly.

i assume it is because the function RelOptCluster#setMetadataProvider
- in 1.21.0 doesn't use THREAD_PROVIDERS; ([1])
- in master it does use THREAD_PROVIDERS; ([2])

will upgrade to 1.24.0 when it is released and will attempt again.

[1]
https://github.com/apache/calcite/blob/adc1532de853060d24fd0129257a3fae306fb55c/core/src/main/java/org/apache/calcite/plan/RelOptCluster.java#L135
[2]
https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/RelOptCluster.java#L142

On Tue, Jul 21, 2020 at 11:45 AM Danny Chan <yu...@gmail.com> wrote:

> The suggested way to set up the RelMetadataProvider is through
> RelOptCluster#setMetadataProvider [1]. If you want to customize the
> RelMetadataQuery, take the document in RelMetadataQueryBase [2] for a
> reference.
>
> [1]
> https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/RelOptCluster.java#L142
> [2]
> https://github.com/apache/calcite/blob/d2c859098acb3210ac5cad90c5ea28a3317f0386/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQueryBase.java#L58
>
> Best,
> Danny Chan
> 在 2020年7月21日 +0800 PM4:18,Tal Glanzman <ta...@gmail.com>,写道:
> > thank you it is working great!
> >
> > On Tue, Jul 21, 2020 at 12:45 AM Stamatis Zampetakis <za...@gmail.com>
> > wrote:
> >
> > > Hi Taz,
> > >
> > > If you are relying on the RelMetadataQuery [1] API then you may need
> to set
> > > your provided into THREAD_PROVIDERS in a similar way that it is done in
> > > RelMetadataTest [2].
> > >
> > > Best,
> > > Stamatis
> > >
> > > [1]
> > >
> > >
> https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java#L75
> > > [2]
> > >
> > >
> https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java#L893
> > >
> > > On Mon, Jul 20, 2020 at 6:15 PM Tal Glanzman <ta...@gmail.com>
> > > wrote:
> > >
> > > > hi,
> > > >
> > > > I am trying to figure out how to add custom logic for providing
> metadata
> > > to
> > > > nodes inside my adapter with no luck.
> > > >
> > > > I have an implementation of my own RelMetadataProvider, as described
> in
> > > the
> > > > docs.
> > > >
> > > > After looking around, i still couldn't find a way to use this
> provider in
> > > > the planning phase
> > > > - no property in the jdbc connection string
> > > > - tried to invoke setMetadataProvider(provider) on the cluster of the
> > > > initial nodes of the tree
> > > >
> > > > drilling a bit, i notice that the provider in use is
> > > > JaninoRelMetadataProvider with provider=DefaultRelMetadataProvider.
> > > >
> > > > Is there a way to do such a thing using the standard execution?
> > > >
> > > > any guidance will be much appreciated, thanks!
> > > >
> > >
>

Re: custom metadata logic

Posted by Danny Chan <yu...@gmail.com>.
The suggested way to set up the RelMetadataProvider is through RelOptCluster#setMetadataProvider [1]. If you want to customize the RelMetadataQuery, take the document in RelMetadataQueryBase [2] for a reference.

[1] https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/RelOptCluster.java#L142
[2] https://github.com/apache/calcite/blob/d2c859098acb3210ac5cad90c5ea28a3317f0386/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQueryBase.java#L58

Best,
Danny Chan
在 2020年7月21日 +0800 PM4:18,Tal Glanzman <ta...@gmail.com>,写道:
> thank you it is working great!
>
> On Tue, Jul 21, 2020 at 12:45 AM Stamatis Zampetakis <za...@gmail.com>
> wrote:
>
> > Hi Taz,
> >
> > If you are relying on the RelMetadataQuery [1] API then you may need to set
> > your provided into THREAD_PROVIDERS in a similar way that it is done in
> > RelMetadataTest [2].
> >
> > Best,
> > Stamatis
> >
> > [1]
> >
> > https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java#L75
> > [2]
> >
> > https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java#L893
> >
> > On Mon, Jul 20, 2020 at 6:15 PM Tal Glanzman <ta...@gmail.com>
> > wrote:
> >
> > > hi,
> > >
> > > I am trying to figure out how to add custom logic for providing metadata
> > to
> > > nodes inside my adapter with no luck.
> > >
> > > I have an implementation of my own RelMetadataProvider, as described in
> > the
> > > docs.
> > >
> > > After looking around, i still couldn't find a way to use this provider in
> > > the planning phase
> > > - no property in the jdbc connection string
> > > - tried to invoke setMetadataProvider(provider) on the cluster of the
> > > initial nodes of the tree
> > >
> > > drilling a bit, i notice that the provider in use is
> > > JaninoRelMetadataProvider with provider=DefaultRelMetadataProvider.
> > >
> > > Is there a way to do such a thing using the standard execution?
> > >
> > > any guidance will be much appreciated, thanks!
> > >
> >

Re: custom metadata logic

Posted by Tal Glanzman <ta...@gmail.com>.
thank you it is working great!

On Tue, Jul 21, 2020 at 12:45 AM Stamatis Zampetakis <za...@gmail.com>
wrote:

> Hi Taz,
>
> If you are relying on the RelMetadataQuery [1] API then you may need to set
> your provided into THREAD_PROVIDERS in a similar way that it is done in
> RelMetadataTest [2].
>
> Best,
> Stamatis
>
> [1]
>
> https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java#L75
> [2]
>
> https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java#L893
>
> On Mon, Jul 20, 2020 at 6:15 PM Tal Glanzman <ta...@gmail.com>
> wrote:
>
> > hi,
> >
> > I am trying to figure out how to add custom logic for providing metadata
> to
> > nodes inside my adapter with no luck.
> >
> > I have an implementation of my own RelMetadataProvider, as described in
> the
> > docs.
> >
> > After looking around, i still couldn't find a way to use this provider in
> > the planning phase
> > - no property in the jdbc connection string
> > - tried to invoke setMetadataProvider(provider) on the cluster of the
> > initial nodes of the tree
> >
> > drilling a bit, i notice that the provider in use is
> > JaninoRelMetadataProvider with provider=DefaultRelMetadataProvider.
> >
> > Is there a way to do such a thing using the standard execution?
> >
> > any guidance will be much appreciated, thanks!
> >
>

Re: custom metadata logic

Posted by Stamatis Zampetakis <za...@gmail.com>.
Hi Taz,

If you are relying on the RelMetadataQuery [1] API then you may need to set
your provided into THREAD_PROVIDERS in a similar way that it is done in
RelMetadataTest [2].

Best,
Stamatis

[1]
https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java#L75
[2]
https://github.com/apache/calcite/blob/7a462f2b2f78aa12068b691c1e423ea4c8a825e4/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java#L893

On Mon, Jul 20, 2020 at 6:15 PM Tal Glanzman <ta...@gmail.com> wrote:

> hi,
>
> I am trying to figure out how to add custom logic for providing metadata to
> nodes inside my adapter with no luck.
>
> I have an implementation of my own RelMetadataProvider, as described in the
> docs.
>
> After looking around, i still couldn't find a way to use this provider in
> the planning phase
> - no property in the jdbc connection string
> - tried to invoke setMetadataProvider(provider) on the cluster of the
> initial nodes of the tree
>
> drilling a bit, i notice that the provider in use is
> JaninoRelMetadataProvider with provider=DefaultRelMetadataProvider.
>
> Is there a way to do such a thing using the standard execution?
>
> any guidance will be much appreciated, thanks!
>