blob: 0fd8ba00d30f63a42e410ce252cc09d953154b56 [file] [log] [blame]
# view.q - CREATE/DROP/SHOW/DESCRIBE VIEW
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# register a base table first
CREATE TABLE orders (
`user` BIGINT NOT NULl,
product VARCHAR(32),
amount INT,
ts TIMESTAMP(3),
ptime AS PROCTIME(),
PRIMARY KEY(`user`) NOT ENFORCED,
WATERMARK FOR ts AS ts - INTERVAL '1' SECONDS
) with (
'connector' = 'datagen'
);
[INFO] Execute statement succeed.
!info
# ==== test temporary view =====
create temporary view v1 as select * from orders;
[INFO] Execute statement succeed.
!info
create temporary view v1 as select * from orders;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: Temporary table '`default_catalog`.`default_database`.`v1`' already exists
!error
# TODO: warning users the view already exists
create temporary view if not exists v1 as select * from orders;
[INFO] Execute statement succeed.
!info
# test query a view with hint
select * from v1 /*+ OPTIONS('number-of-rows' = '1') */;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: View '`default_catalog`.`default_database`.`v1`' cannot be enriched with new options. Hints can only be applied to tables.
!error
# test create a view reference another view
create temporary view if not exists v2 as select * from v1;
[INFO] Execute statement succeed.
!info
# test show create a temporary view
show create view v1;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| result |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE TEMPORARY VIEW `default_catalog`.`default_database`.`v1`(`user`, `product`, `amount`, `ts`, `ptime`) as
SELECT *
FROM `default_catalog`.`default_database`.`orders` |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
!ok
# test show create a temporary view reference another view
show create view v2;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| result |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE TEMPORARY VIEW `default_catalog`.`default_database`.`v2`(`user`, `product`, `amount`, `ts`, `ptime`) as
SELECT *
FROM `default_catalog`.`default_database`.`v1` |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
!ok
show tables;
+------------+
| table name |
+------------+
| orders |
| v1 |
| v2 |
+------------+
3 rows in set
!ok
show views;
+-----------+
| view name |
+-----------+
| v1 |
| v2 |
+-----------+
2 rows in set
!ok
# test SHOW CREATE TABLE for views
show create table v1;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.TableException: SHOW CREATE TABLE is only supported for tables, but `default_catalog`.`default_database`.`v1` is a view. Please use SHOW CREATE VIEW instead.
!error
# ==== test permanent view =====
# register a permanent view with the duplicate name with temporary view
create view v1 as select * from orders;
[INFO] Execute statement succeed.
!info
# test create duplicate view
create view v1 as select * from orders;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.catalog.exceptions.TableAlreadyExistException: Table (or view) default_database.v1 already exists in Catalog default_catalog.
!error
# test show create a permanent view
create view permanent_v1 as select * from orders;
[INFO] Execute statement succeed.
!info
# test show create a permanent view
show create view permanent_v1;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| result |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE VIEW `default_catalog`.`default_database`.`permanent_v1`(`user`, `product`, `amount`, `ts`, `ptime`) as
SELECT *
FROM `default_catalog`.`default_database`.`orders` |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
!ok
# remove permanent_v1 view
drop view permanent_v1;
[INFO] Execute statement succeed.
!info
# we didn't distinguish the temporary v1 and permanent v1 for now
show views;
+-----------+
| view name |
+-----------+
| v1 |
| v2 |
+-----------+
2 rows in set
!ok
# test describe view
describe v1;
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
# test SHOW COLUMNS
show columns from v1;
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
show columns in v1;
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
show columns from v1 like '%u';
Empty set
!ok
show columns in v1 like '%u';
Empty set
!ok
show columns from v1 not like '%u';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
show columns in v1 not like '%u';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
show columns from v1 like '%r';
+------+--------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+------+--------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
+------+--------+-------+-----+--------+-----------+
1 row in set
!ok
show columns in v1 like '%r';
+------+--------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+------+--------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
+------+--------+-------+-----+--------+-----------+
1 row in set
!ok
show columns from v1 not like '%r';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
4 rows in set
!ok
show columns in v1 not like '%r';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
4 rows in set
!ok
show columns from v1 like '%u%';
+---------+-------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
+---------+-------------+-------+-----+--------+-----------+
3 rows in set
!ok
show columns in v1 like '%u%';
+---------+-------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
+---------+-------------+-------+-----+--------+-----------+
3 rows in set
!ok
show columns from v1 not like '%u%';
+-------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+-------+-----------------------------+-------+-----+--------+-----------+
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+-------+-----------------------------+-------+-----+--------+-----------+
2 rows in set
!ok
show columns in v1 not like '%u%';
+-------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+-------+-----------------------------+-------+-----+--------+-----------+
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+-------+-----------------------------+-------+-----+--------+-----------+
2 rows in set
!ok
show columns from v1 like 'use_';
+------+--------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+------+--------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
+------+--------+-------+-----+--------+-----------+
1 row in set
!ok
show columns in v1 like 'use_';
+------+--------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+------+--------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
+------+--------+-------+-----+--------+-----------+
1 row in set
!ok
show columns from v1 not like 'use_';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
4 rows in set
!ok
show columns in v1 not like 'use_';
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
4 rows in set
!ok
# we can't drop permanent view if there is temporary view with the same name
drop view v1;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: Temporary view with identifier '`default_catalog`.`default_database`.`v1`' exists. Drop it first before removing the permanent view.
!error
# although temporary v2 needs temporary v1, dropping v1 first does not throw exception
drop temporary view v1;
[INFO] Execute statement succeed.
!info
# now we can drop permanent view v1
drop view v1;
[INFO] Execute statement succeed.
!info
# test drop invalid table
drop view non_exist;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: View with identifier 'default_catalog.default_database.non_exist' does not exist.
!error
# ===== test playing with keyword identifiers =====
create view `mod` as select * from orders;
[INFO] Execute statement succeed.
!info
describe `mod`;
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
desc `mod`;
+---------+-----------------------------+-------+-----+--------+-----------+
| name | type | null | key | extras | watermark |
+---------+-----------------------------+-------+-----+--------+-----------+
| user | BIGINT | FALSE | | | |
| product | VARCHAR(32) | TRUE | | | |
| amount | INT | TRUE | | | |
| ts | TIMESTAMP(3) *ROWTIME* | TRUE | | | |
| ptime | TIMESTAMP_LTZ(3) *PROCTIME* | FALSE | | | |
+---------+-----------------------------+-------+-----+--------+-----------+
5 rows in set
!ok
drop view `mod`;
[INFO] Execute statement succeed.
!info
show tables;
+------------+
| table name |
+------------+
| orders |
| v2 |
+------------+
2 rows in set
!ok