[
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)