You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Zheng Shao <zh...@uber.com.INVALID> on 2021/08/16 22:02:17 UTC

Analyzing SQL queries with default catalog/database names

Hi Calcite Dev,

What is the recommended way to analyze SQL queries with default
catalog/database names?

For example, for query like "SELECT * FROM foo" where foo maps to a table
in hive.my_database.

In Project Coral
<https://github.com/linkedin/coral/blob/master/coral-hive/src/main/java/com/linkedin/coral/hive/hive2rel/parsetree/ParseTreeBuilder.java#L579>,
the code tries to add catalog/database names right after the parsing stage,
but that would not work for cases like "WITH foo AS (SELECT * FROM mytable)
SELECT * from foo" in which case there is no need to prepend.

-- 
Zheng

Re: Analyzing SQL queries with default catalog/database names

Posted by Julian Hyde <jh...@gmail.com>.
A key step in validation is to fully-quality table names. Thus in your example, mytable would become the string array [“hive”, “my_database”, “mytable”]. Any my_database2.mytable2 would become [“hive”, “my_database2”, “mytable2”]. But foo would remain foo, because it is in the query and is not a table.

The validator’s context is a path, which looks something like [[], [“hive”], [“hive”, “my_database”]]. Fully-, partially- and non-qualified table names are all looked up within that path.

Julian


> On Aug 17, 2021, at 12:02 AM, Zheng Shao <zh...@uber.com.INVALID> wrote:
> 
> Hi Calcite Dev,
> 
> What is the recommended way to analyze SQL queries with default
> catalog/database names?
> 
> For example, for query like "SELECT * FROM foo" where foo maps to a table
> in hive.my_database.
> 
> In Project Coral
> <https://github.com/linkedin/coral/blob/master/coral-hive/src/main/java/com/linkedin/coral/hive/hive2rel/parsetree/ParseTreeBuilder.java#L579>,
> the code tries to add catalog/database names right after the parsing stage,
> but that would not work for cases like "WITH foo AS (SELECT * FROM mytable)
> SELECT * from foo" in which case there is no need to prepend.
> 
> -- 
> Zheng