mirror of
https://github.com/apache/impala.git
synced 2025-12-25 02:03:09 -05:00
Add TBLPROPERTIES support to the view, here are some examples:
CREATE VIEW [IF NOT EXISTS] [database_name.]view_name
[(column_name [COMMENT 'column_comment'][, ...])]
[COMMENT 'view_comment']
[TBLPROPERTIES (property_name = property_value, ...)]
AS select_statement;
ALTER VIEW [database_name.]view_name SET TBLPROPERTIES
(property_name = property_value, ...);
ALTER VIEW [database_name.]view_name UNSET TBLPROPERTIES
(property_name, ...);
Change-Id: I8d05bb4ec1f70f5387bb21fbe23f62c05941af18
Reviewed-on: http://gerrit.cloudera.org:8080/18940
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
455 lines
10 KiB
Plaintext
455 lines
10 KiB
Plaintext
====
|
|
---- QUERY
|
|
# Create a simple view without renaming the columns.
|
|
create view $DATABASE.simple_view as
|
|
select * from functional.alltypes
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Test that 'if not exists' swallows the error (view already exists)
|
|
create view if not exists $DATABASE.simple_view as
|
|
select * from functional.alltypesagg
|
|
---- RESULTS
|
|
'View already exists.'
|
|
====
|
|
---- QUERY
|
|
# Create another simple view with 'if not exists' on a subset of
|
|
# alltypes' columns using custom column names and comments
|
|
create view if not exists
|
|
$DATABASE.simple_view_sub (x, y comment 'hello', z) as
|
|
select int_col, string_col, timestamp_col from functional.alltypes
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Create a view on a parquet table (Hive cannot create/read/write parquet)
|
|
create view $DATABASE.parquet_view as
|
|
select * from functional_parquet.alltypes where id < 20
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Create a complex view with predicates, joins, aggregates and order by
|
|
create view $DATABASE.complex_view (abc comment 'agg', xyz comment 'gby') as
|
|
select count(a.bigint_col), b.string_col from
|
|
functional.alltypesagg a inner join functional.alltypestiny b
|
|
on a.id = b.id where a.bigint_col < 50
|
|
group by b.string_col having count(a.bigint_col) > 1
|
|
order by b.string_col limit 100
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Create a view on a view
|
|
create view $DATABASE.view_view (aaa, bbb) as
|
|
select * from $DATABASE.complex_view
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Create a view with tblproperties
|
|
create view $DATABASE.view_properties
|
|
tblproperties ('a'='aa', 'b'='bb') as
|
|
select * from functional.alltypes
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Test that the views are displayed by 'show tables'
|
|
show tables in $DATABASE
|
|
---- RESULTS
|
|
'complex_view'
|
|
'parquet_view'
|
|
'simple_view'
|
|
'simple_view_sub'
|
|
'view_properties'
|
|
'view_view'
|
|
====
|
|
---- QUERY
|
|
# Test that the views can be described
|
|
describe $DATABASE.simple_view
|
|
---- RESULTS
|
|
'id','int',''
|
|
'bool_col','boolean',''
|
|
'tinyint_col','tinyint',''
|
|
'smallint_col','smallint',''
|
|
'int_col','int',''
|
|
'bigint_col','bigint',''
|
|
'float_col','float',''
|
|
'double_col','double',''
|
|
'date_string_col','string',''
|
|
'string_col','string',''
|
|
'timestamp_col','timestamp',''
|
|
'year','int',''
|
|
'month','int',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
describe $DATABASE.simple_view_sub
|
|
---- RESULTS
|
|
'x','int',''
|
|
'y','string','hello'
|
|
'z','timestamp',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
describe $DATABASE.complex_view
|
|
---- RESULTS
|
|
'abc','bigint','agg'
|
|
'xyz','string','gby'
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
describe $DATABASE.parquet_view
|
|
---- RESULTS
|
|
'id','int',''
|
|
'bool_col','boolean',''
|
|
'tinyint_col','tinyint',''
|
|
'smallint_col','smallint',''
|
|
'int_col','int',''
|
|
'bigint_col','bigint',''
|
|
'float_col','float',''
|
|
'double_col','double',''
|
|
'date_string_col','string',''
|
|
'string_col','string',''
|
|
'timestamp_col','timestamp',''
|
|
'year','int',''
|
|
'month','int',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
describe $DATABASE.view_view
|
|
---- RESULTS
|
|
'aaa','bigint',''
|
|
'bbb','string',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
describe $DATABASE.view_properties
|
|
---- RESULTS
|
|
'id','int',''
|
|
'bool_col','boolean',''
|
|
'tinyint_col','tinyint',''
|
|
'smallint_col','smallint',''
|
|
'int_col','int',''
|
|
'bigint_col','bigint',''
|
|
'float_col','float',''
|
|
'double_col','double',''
|
|
'date_string_col','string',''
|
|
'string_col','string',''
|
|
'timestamp_col','timestamp',''
|
|
'year','int',''
|
|
'month','int',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
# Test that the views can be queried.
|
|
select count(*) from $DATABASE.simple_view
|
|
---- RESULTS
|
|
7300
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from $DATABASE.simple_view_sub
|
|
---- RESULTS
|
|
7300
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from $DATABASE.complex_view
|
|
---- RESULTS
|
|
2
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from $DATABASE.parquet_view
|
|
---- RESULTS
|
|
20
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from $DATABASE.view_view
|
|
---- RESULTS
|
|
2
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from $DATABASE.view_properties
|
|
---- RESULTS
|
|
7300
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
# Test dropping a view
|
|
drop view $DATABASE.simple_view_sub
|
|
---- RESULTS
|
|
'View has been dropped.'
|
|
====
|
|
---- QUERY
|
|
# Test that the view is gone
|
|
show tables in $DATABASE
|
|
---- RESULTS
|
|
'complex_view'
|
|
'parquet_view'
|
|
'simple_view'
|
|
'view_properties'
|
|
'view_view'
|
|
====
|
|
---- QUERY
|
|
# Test 'if exists' for dropping a view (view does not exist)
|
|
drop view if exists $DATABASE.bad_view
|
|
---- RESULTS
|
|
'View does not exist.'
|
|
====
|
|
---- QUERY
|
|
# Test 'if exists' does not drop a table with same name
|
|
create table $DATABASE.drop_tbl_test(a int)
|
|
---- RESULTS
|
|
'Table has been created.'
|
|
====
|
|
---- QUERY
|
|
drop view if exists $DATABASE.drop_tbl_test
|
|
---- RESULTS
|
|
'Drop view is not allowed on a table.'
|
|
====
|
|
---- QUERY
|
|
# Test drop table 'if exists' does not drop a view with same name.
|
|
# We try to drop a table with name complex_view and it should should
|
|
# still be listed in the subsequent show tables output (as a view).
|
|
drop table if exists $DATABASE.complex_view
|
|
---- RESULTS
|
|
'Drop table is not allowed on a view.'
|
|
====
|
|
---- QUERY
|
|
# Test that the table is present
|
|
show tables in $DATABASE
|
|
---- RESULTS
|
|
'drop_tbl_test'
|
|
'complex_view'
|
|
'parquet_view'
|
|
'simple_view'
|
|
'view_properties'
|
|
'view_view'
|
|
====
|
|
---- QUERY
|
|
# Test renaming a view
|
|
alter view $DATABASE.view_view rename to $DATABASE.view_on_view
|
|
---- RESULTS
|
|
'Renaming was successful.'
|
|
====
|
|
---- QUERY
|
|
# Test renaming a parquet view
|
|
alter view $DATABASE.parquet_view rename to $DATABASE.new_parquet_view
|
|
---- RESULTS
|
|
'Renaming was successful.'
|
|
====
|
|
---- QUERY
|
|
# Test set tblproperties for view
|
|
alter view $DATABASE.view_properties set tblproperties ('c'='cc', 'd'='dd')
|
|
---- RESULTS
|
|
'Updated view.'
|
|
====
|
|
---- QUERY
|
|
# Test unset tblproperties for view
|
|
alter view $DATABASE.view_properties unset tblproperties ('c')
|
|
---- RESULTS
|
|
'Updated view.'
|
|
====
|
|
---- QUERY
|
|
# Test DESCRIBE FORMATTED for view with tblproperties
|
|
alter view $DATABASE.view_properties set tblproperties ('e'='ee', 'f'='ff');
|
|
alter view $DATABASE.view_properties unset tblproperties ('e');
|
|
DESCRIBE FORMATTED $DATABASE.view_properties;
|
|
---- RESULTS: VERIFY_IS_NOT_IN
|
|
'','a ','aa '
|
|
'','b ','bb '
|
|
'','d ','dd '
|
|
'','f ','ff '
|
|
---- TYPES
|
|
string, string, string
|
|
====
|
|
---- QUERY
|
|
# Test dropping a view with tblproperties
|
|
drop view $DATABASE.view_properties
|
|
---- RESULTS
|
|
'View has been dropped.'
|
|
====
|
|
---- QUERY
|
|
# Test that the view was renamed
|
|
show tables in $DATABASE
|
|
---- RESULTS
|
|
'drop_tbl_test'
|
|
'complex_view'
|
|
'new_parquet_view'
|
|
'simple_view'
|
|
'view_on_view'
|
|
====
|
|
---- QUERY
|
|
# Alter a view with predicates, joins, aggregates and order by
|
|
alter view $DATABASE.complex_view (aaa comment 'abc', bbb comment 'xyz') as
|
|
select count(a.bigint_col), b.string_col from
|
|
functional.alltypesagg a inner join functional.alltypestiny b
|
|
on a.id = b.id where a.bigint_col < 50
|
|
group by b.string_col having count(a.bigint_col) > 1
|
|
order by b.string_col limit 100
|
|
---- RESULTS
|
|
'View has been altered.'
|
|
====
|
|
---- QUERY
|
|
# Test verifying the description of the altered view
|
|
describe $DATABASE.complex_view
|
|
---- RESULTS
|
|
'aaa','bigint','abc'
|
|
'bbb','string','xyz'
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
# Test querying the altered view
|
|
select * from $DATABASE.complex_view;
|
|
---- RESULTS
|
|
2,'0'
|
|
2,'1'
|
|
---- TYPES
|
|
bigint,string
|
|
====
|
|
---- QUERY
|
|
# Alter a view on a view
|
|
alter view $DATABASE.view_on_view (foo, bar) as
|
|
select * from $DATABASE.complex_view
|
|
---- RESULTS
|
|
'View has been altered.'
|
|
====
|
|
---- QUERY
|
|
# Test describing the description of the altered view
|
|
describe $DATABASE.view_on_view
|
|
---- RESULTS
|
|
'foo','bigint',''
|
|
'bar','string',''
|
|
---- TYPES
|
|
string,string,string
|
|
====
|
|
---- QUERY
|
|
# Test querying the altered view
|
|
select foo, bar from $DATABASE.view_on_view;
|
|
---- RESULTS
|
|
2,'0'
|
|
2,'1'
|
|
---- TYPES
|
|
bigint,string
|
|
====
|
|
---- QUERY
|
|
# Test altering a with a new definition
|
|
alter view $DATABASE.new_parquet_view as
|
|
select bigint_col, string_col from functional_parquet.alltypesagg
|
|
where bigint_col is null limit 10
|
|
---- RESULTS
|
|
'View has been altered.'
|
|
====
|
|
---- QUERY
|
|
# Test querying the altered view
|
|
select count(bigint_col), count(string_col) from $DATABASE.new_parquet_view
|
|
---- RESULTS
|
|
0,10
|
|
---- TYPES
|
|
bigint,bigint
|
|
====
|
|
---- QUERY
|
|
# Create a view on a constant select and try to query it.
|
|
create view $DATABASE.const_view
|
|
as select 1, 'a', cast(10.0 as float)
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
select * from $DATABASE.const_view
|
|
---- RESULTS
|
|
1,'a',10
|
|
---- TYPES
|
|
tinyint,string,float
|
|
====
|
|
---- QUERY
|
|
# Test that parentheses are preserved in view creation.
|
|
# If the parentheses were ignored the query would return a count > 0.
|
|
create view $DATABASE.paren_view as
|
|
select count(*) from functional.alltypessmall
|
|
where true and (true or false) and false
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Test that parentheses are preserved in view creation.
|
|
select * from $DATABASE.paren_view
|
|
---- RESULTS
|
|
0
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
# Create a view with decimal columns. Regression test for IMPALA-1021.
|
|
create view $DATABASE.decimal_view as
|
|
select * from functional.decimal_tbl
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Query a view with decimal columns. Regression test for IMPALA-1021.
|
|
select * from $DATABASE.decimal_view
|
|
---- RESULTS
|
|
1234,2222,1.2345678900,0.12345678900000000000000000000000000000,12345.78900,1
|
|
12345,333,123.4567890000,0.12345678900000000000000000000000000000,11.22000,1
|
|
12345,333,1234.5678900000,0.12345678900000000000000000000000000000,0.10000,1
|
|
132842,333,12345.6789000000,0.12345678900000000000000000000000000000,0.77889,1
|
|
2345,111,12.3456789000,0.12345678900000000000000000000000000000,3.14100,1
|
|
---- TYPES
|
|
decimal,decimal,decimal,decimal,decimal,decimal
|
|
====
|
|
---- QUERY
|
|
# Create a view with date columns.
|
|
create view $DATABASE.date_view as
|
|
select * from functional.date_tbl
|
|
---- RESULTS
|
|
'View has been created.'
|
|
====
|
|
---- QUERY
|
|
# Query a view with date columns.
|
|
select * from $DATABASE.date_view
|
|
---- RESULTS
|
|
0,0001-01-01,0001-01-01
|
|
1,0001-12-31,0001-01-01
|
|
2,0002-01-01,0001-01-01
|
|
3,1399-12-31,0001-01-01
|
|
4,2017-11-28,0001-01-01
|
|
5,9999-12-31,0001-01-01
|
|
6,NULL,0001-01-01
|
|
10,2017-11-28,1399-06-27
|
|
11,NULL,1399-06-27
|
|
12,2018-12-31,1399-06-27
|
|
20,0001-06-21,2017-11-27
|
|
21,0001-06-22,2017-11-27
|
|
22,0001-06-23,2017-11-27
|
|
23,0001-06-24,2017-11-27
|
|
24,0001-06-25,2017-11-27
|
|
25,0001-06-26,2017-11-27
|
|
26,0001-06-27,2017-11-27
|
|
27,0001-06-28,2017-11-27
|
|
28,0001-06-29,2017-11-27
|
|
29,2017-11-28,2017-11-27
|
|
30,9999-12-01,9999-12-31
|
|
31,9999-12-31,9999-12-31
|
|
---- TYPES
|
|
int,date,date
|
|
==== |