Hi Justin,
the code is indeed recursive, I have never played with too complex queries
so I can't say for sure but I bet it can handle complex cases like the one
you described.

`getExpressionLineage` too could come handy for such tasks.

Armstrong, if possible it would definitely help sharing the snippet of code
you tried with actual and expected output.

Best regards,
Alessandro

On Tue, 9 Nov 2021 at 18:58, Justin Swanhart <greenl...@gmail.com> wrote:

> I have not looked at the code, so excuse me if this is a terrible question,
> but is this recursive?
>
> Ie:
>
> create view a_view as select a_column from a_table where b_column = 1;
>
> select * from
>  ( -- this could be a view or just a dependent subquery like this
>    select cast(sq1_col ...) as a_column from (
>      -- same here, but it is explicitly a view
>      select cast(a_column ...) as sq1_col from a_view
>    ) sq2
> ) sq1
>
> The metadata for a_column might be completely different in each of the
> views until you get to a_view.  I added a casts here to make that clear.
>
>
>
>
> On Tue, Nov 9, 2021 at 5:35 AM JiaTao Tao <taojia...@gmail.com> wrote:
>
> > May be you can try this:
> > org.apache.calcite.rel.metadata.RelMetadataQuery#getColumnOrigins
> > But i'm not tested yet.
> > Pls give feedback whether it works or not.
> >
> > Regards!
> >
> > Aron Tao
> >
> >
> > Armstrong <armstron...@gmail.com> 于2021年11月3日周三 下午10:09写道:
> >
> > > Hi guys,
> > >      Thanks for your time to read this help message. I'm new to Calcite
> > and
> > > reading some codes and examples from calcite Github repo. I'm wandering
> > how
> > > to get the column real name and type from view.
> > >      For example, I have some SQL as below.  A kafka topic table left
> > join
> > > MySQL table, and use a View join_result_view represent the join
> result. I
> > > want to get the real column name and data type from this view.
> > >      How to get  result like this ? "user_id", bigint ;  "log_time",
> > bigint
> > >      I already try use SqlParse parse these sqls, and get the SqlNode,
> > but
> > > I can't get the real column name and type. Maybe I missed out the
> correct
> > > method. Hopefully some one can identify the problem, thanks a lot.
> > >
> > > CREATE TABLE user_action_source (
> > >     `user_id` STRING,
> > >     `item_id` BIGINT,
> > >     `bhv_type` STRING,
> > >     `bhv_time` INT,
> > >     `play_duration` INT,
> > >     `ts` BIGINT,
> > >     proc_time as PROCTIME()
> > > ) WITH (
> > >         'connector' = 'kafka',
> > >         'topic' = 'user_action_log',
> > >         'parallelism' = '5',
> > >         'properties.cluster' = 'asv_cluster',
> > >         'properties.group.id' = 'demo-job',
> > >         'scan.startup.mode' = 'latest-offset',
> > >         'format' = 'json',
> > >         'json.fail-on-missing-field' = 'false',
> > >         'json.ignore-parse-errors' = 'true',
> > >         'scan.manually-commit-offsets-interval' = '5000'
> > > );
> > >
> > > CREATE TABLE item_source (
> > >     `item_id` BIGINT,
> > >     `video_name` STRING,
> > >     `video_count` INT,
> > >     `video_duration` INT,
> > >     `authors` STRING
> > > ) WITH (
> > >     'connector' = 'jdbc',
> > >     'url' = 'jdbc:mysql://localhost:3306/mydatabase',
> > >     'table-name' = 'item_info'
> > > );
> > >
> > > create view join_result_view as
> > > select a.user_id, a.item_id, a.bhv_type, a.ts as log_time,
> b.video_name,
> > > b.video_count, b.video_duration, b.authors
> > > from user_action_source  as a left join item_source  FOR SYSTEM_TIME AS
> > OF
> > > a.proc_time as b
> > > on a.item_id = b.item_id;
> > >
> >
>

Reply via email to