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