[ 
https://issues.apache.org/jira/browse/FLINK-32765?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

xiaogang zhou updated FLINK-32765:
----------------------------------
    Description: 
{code:java}
// code placeholder

CREATE TABLE source (
    k2 bigint,
    o1 bigint
) 
COMMENT 'source'
WITH (
  'connector' = 'datagen'
);

CREATE TABLE print_table (
    k1 bigint
) WITH (
  'connector' = 'blackhole'
);

CREATE TABLE print_table2 (
    k1 bigint
) WITH (
  'connector' = 'blackhole'
);

create view v1 as 
  select k2*2 as k2 from source where o1 > 20;


insert into print_table select k2 from v1 where k2 >9;
insert into print_table2 select k2 from v1 where k2 <80; {code}
This SQL will cause view v1 logic being created for 2 times.  Why can't us 
create a table in executeInternal

and keep a QueryOperationCatalogView in CatalogManager?
{code:java}
// code placeholder

public TableResult executeInternal(String statement) 
...
else if (operation instanceof CreateViewOperation) {
    CreateViewOperation createViewOperation = (CreateViewOperation) operation;
    Table table = 
sqlQuery(createViewOperation.getCatalogView().getOriginalQuery()); {code}
 

 

this could enable us to avoid codegen for multiple time if we could reuse the 
some part of the query

 

  was:
{code:java}
// code placeholder

CREATE TABLE source (
    k2 bigint,
    o1 bigint
) 
COMMENT 'source'
WITH (
  'connector' = 'datagen'
);

CREATE TABLE print_table (
    k1 bigint
) WITH (
  'connector' = 'blackhole'
);

CREATE TABLE print_table2 (
    k1 bigint
) WITH (
  'connector' = 'blackhole'
);

create view v1 as 
  select k2*2 as k2 from source where o1 > 20;


insert into print_table select k2 from v1 where k2 >9;
insert into print_table2 select k2 from v1 where k2 <80; {code}
This SQL will cause view v1 logic being created for 2 times.  Why can't us 
create a table in executeSql and keep a QueryOperationCatalogView in 
CatalogManager?
{code:java}
// code placeholder

public TableResult executeSql(String statement) 
...
else if (operation instanceof CreateViewOperation) {
    CreateViewOperation createViewOperation = (CreateViewOperation) operation;
    Table table = 
sqlQuery(createViewOperation.getCatalogView().getOriginalQuery()); {code}
 

 

this could enable us to avoid codegen for multiple time if we could reuse the 
some part of the query

 


> create view should reuse calcite tree
> -------------------------------------
>
>                 Key: FLINK-32765
>                 URL: https://issues.apache.org/jira/browse/FLINK-32765
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / API
>    Affects Versions: 1.16.1
>            Reporter: xiaogang zhou
>            Priority: Major
>
> {code:java}
> // code placeholder
> CREATE TABLE source (
>     k2 bigint,
>     o1 bigint
> ) 
> COMMENT 'source'
> WITH (
>   'connector' = 'datagen'
> );
> CREATE TABLE print_table (
>     k1 bigint
> ) WITH (
>   'connector' = 'blackhole'
> );
> CREATE TABLE print_table2 (
>     k1 bigint
> ) WITH (
>   'connector' = 'blackhole'
> );
> create view v1 as 
>   select k2*2 as k2 from source where o1 > 20;
> insert into print_table select k2 from v1 where k2 >9;
> insert into print_table2 select k2 from v1 where k2 <80; {code}
> This SQL will cause view v1 logic being created for 2 times.  Why can't us 
> create a table in executeInternal
> and keep a QueryOperationCatalogView in CatalogManager?
> {code:java}
> // code placeholder
> public TableResult executeInternal(String statement) 
> ...
> else if (operation instanceof CreateViewOperation) {
>     CreateViewOperation createViewOperation = (CreateViewOperation) operation;
>     Table table = 
> sqlQuery(createViewOperation.getCatalogView().getOriginalQuery()); {code}
>  
>  
> this could enable us to avoid codegen for multiple time if we could reuse the 
> some part of the query
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to