Hi Igor org.apache.calcite.rel.metadata.RelMetadataQuery#getColumnOrigins may help
Regards! Aron Tao Seliverstov Igor <gvvinbl...@gmail.com> 于2020年2月19日周三 下午11:16写道: > This case each NID column is a calculated value - origin erases. > > You may try to infer origin walking through SQL AST recursively > > I can’t come up with another way. > > Regards, > Igor > > > 19 февр. 2020 г., в 15:02, JiaTao Tao <taojia...@gmail.com> написал(а): > > > > Thanks a lot > > > > But I found if the select is from the subquery, `getFieldOrigins` > returns null, because you can not find the table(see in the pic.). > > String sql = "SELECT T1.NAME <http://t1.name/>,\n" > > + " T1.NID,\n" > > + " T2.NID,\n" > > + " T2.COMPANY\n" > > + "FROM\n" > > + " (SELECT (U.ID <http://u.id/> +100) AS NID,\n" > > + " U.NAME <http://u.name/> AS NAME\n" > > + " FROM USERS U) T1\n" > > + "JOIN\n" > > + " (SELECT (J.ID <http://j.id/> +100) AS NID,\n" > > + " J.COMPANY\n" > > + " FROM JOBS J) T2 ON T1.NID = T2.NID"; > > > > > > Regards! > > Aron Tao > > > > > > Seliverstov Igor <gvvinbl...@gmail.com <mailto:gvvinbl...@gmail.com>> > 于2020年2月19日周三 下午5:38写道: > > Aron Tao, > > > > I think you need the next two methods: > > > > org.apache.calcite.sql.validate.SqlValidatorImpl#getFieldOrigins > > java.sql.ResultSetMetaData#getTableName > > > > Regards, > > Igor > > > > > 19 февр. 2020 г., в 10:29, JiaTao Tao <taojia...@gmail.com <mailto: > taojia...@gmail.com>> написал(а): > > > > > > Hi > > > Thanks a lot. > > > Can you give more details, say which method/field? > > > > > > Regards! > > > > > > Aron Tao > > > > > > > > > Seliverstov Igor <gvvinbl...@gmail.com <mailto:gvvinbl...@gmail.com>> > 于2020年2月19日周三 下午2:31写道: > > > > > >> You can use their origins (says where a column came from). > > >> > > >> It's accessable from SqlValidatorImpl or jdbc result set > > >> > > >> ср, 19 февр. 2020 г., 9:25 JiaTao Tao <t...@apache.org <mailto: > t...@apache.org>>: > > >> > > >>> What I really need is to collect every part of the SQL, Which > columns are > > >>> used as filters, which are used as projection(Columns on the source > > >>> table), But > > >>> the existence of nested subqueries complicates the issue. > > >>> > > >>> > > >>> Regards! > > >>> > > >>> Aron Tao > > >>> > > >>> > > >>> JiaTao Tao <t...@apache.org <mailto:t...@apache.org>> 于2020年2月19日周三 > 下午2:17写道: > > >>> > > >>>> SQL like this: > > >>>> ``` > > >>>> SELECT T1.NID, > > >>>> T1.NAME <http://t1.name/>, > > >>>> T2.COMPANY > > >>>> FROM > > >>>> (SELECT (U.ID <http://u.id/> +100) AS NID, > > >>>> U.NAME <http://u.name/> AS NAME > > >>>> FROM USERS U) T1 > > >>>> JOIN > > >>>> (SELECT (J.ID <http://j.id/> +100) AS NID, > > >>>> J.COMPANY > > >>>> FROM JOBS J) T2 ON T1.NID = T2.NID > > >>>> ``` > > >>>> What I wanted is that T1.NID comes from USER.ID <http://user.id/>, > T1.NAME <http://t1.name/> comes from > > >>>> USER.NAME <http://user.name/>. > > >>>> > > >>>> Has anyone done similar work? Is there a ready-made example to refer > > >> to? > > >>>> > > >>>> > > >>>> Regards! > > >>>> > > >>>> Aron Tao > > >>>> > > >>> > > >> > > > >