blob: 06efe6dc23b2c9c9182146258997f1c5c77f4f15 [file] [log] [blame]
set hive.metastore.disallow.incompatible.col.type.changes=false;
SET hive.exec.dynamic.partition = true;
-- SORT_QUERY_RESULTS
drop table if exists alter_table_src;
drop table if exists alter_table_cascade;
create table alter_table_src(c1 string, c2 string);
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_src;
create table alter_table_cascade (c1 string) partitioned by (p1 string, p2 string);
insert overwrite table alter_table_cascade partition (p1, p2)
select c1, 'abc', '123' from alter_table_src
union all
select c1, cast(null as string), '123' from alter_table_src;
show partitions alter_table_cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_cascade where p1='abc';
select * from alter_table_cascade where p1='__HIVE_DEFAULT_PARTITION__';
-- add columns c2 by replace columns (for HIVE-6131)
-- reload data to existing partition __HIVE_DEFAULT_PARTITION__
-- load data to a new partition xyz
-- querying data (form new or existing partition) should return non-NULL values for the new column
alter table alter_table_cascade replace columns (c1 string, c2 string) cascade;
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__',p2='123');
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_cascade where p1='xyz';
select * from alter_table_cascade where p1='abc';
select * from alter_table_cascade where p1='__HIVE_DEFAULT_PARTITION__';
-- Change c2 to decimal(10,0), the change should cascaded to all partitions
-- the c2 value returned should be in decimal(10,0)
alter table alter_table_cascade change c2 c2 decimal(10,0) comment "change datatype" cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_cascade where p1='xyz';
select * from alter_table_cascade where p1='abc';
select * from alter_table_cascade where p1='__HIVE_DEFAULT_PARTITION__';
-- rename c1 to c2fromc1 and move it to after c2, the change should cascaded to all partitions
alter table alter_table_cascade change c1 c2fromc1 string comment "change position after" after c2 cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
-- rename c2fromc1 back to c1 and move to first as c1, the change should cascaded to all partitions
alter table alter_table_cascade change c2fromc1 c1 string comment "change position first" first cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
-- Try out replace columns, the change should cascaded to all partitions
alter table alter_table_cascade replace columns (c1 string) cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_cascade where p1='xyz';
select * from alter_table_cascade where p1='abc';
select * from alter_table_cascade where p1='__HIVE_DEFAULT_PARTITION__';
-- Try add columns, the change should cascaded to all partitions
alter table alter_table_cascade add columns (c2 decimal(14,4)) cascade;
describe alter_table_cascade;
describe alter_table_cascade partition (p1='xyz', p2='123');
describe alter_table_cascade partition (p1='abc', p2='123');
describe alter_table_cascade partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_cascade where p1='xyz';
select * from alter_table_cascade where p1='abc';
select * from alter_table_cascade where p1='__HIVE_DEFAULT_PARTITION__';
--
drop table if exists alter_table_restrict;
create table alter_table_restrict (c1 string) partitioned by (p1 string, p2 string);
insert overwrite table alter_table_restrict partition (p1, p2)
select c1, 'abc', '123' from alter_table_src
union all
select c1, cast(null as string), '123' from alter_table_src;
show partitions alter_table_restrict;
describe alter_table_restrict;
describe alter_table_restrict partition (p1='abc', p2='123');
describe alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_restrict where p1='abc';
select * from alter_table_restrict where p1='__HIVE_DEFAULT_PARTITION__';
-- add columns c2 by replace columns (for HIVE-6131) without cascade
-- only table column definition has changed, partitions do not
-- after replace, only new partition xyz return the value to new added columns but not existing partitions abc and __HIVE_DEFAULT_PARTITION__
alter table alter_table_restrict replace columns (c1 string, c2 string) restrict;
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_restrict partition (p1='abc', p2='123');
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__',p2='123');
load data local inpath '../../data/files/dec.txt' overwrite into table alter_table_restrict partition (p1='xyz', p2='123');
describe alter_table_restrict;
describe alter_table_restrict partition (p1='xyz', p2='123');
describe alter_table_restrict partition (p1='abc', p2='123');
describe alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
select * from alter_table_restrict where p1='xyz';
select * from alter_table_restrict where p1='abc';
select * from alter_table_restrict where p1='__HIVE_DEFAULT_PARTITION__';
-- Change c2 to decimal(10,0), only limited to table and new partition
alter table alter_table_restrict change c2 c2 decimal(10,0) restrict;
describe alter_table_restrict;
describe alter_table_restrict partition (p1='xyz', p2='123');
describe alter_table_restrict partition (p1='abc', p2='123');
describe alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
-- Try out replace columns, only limited to table and new partition
alter table alter_table_restrict replace columns (c1 string);
describe alter_table_restrict;
describe alter_table_restrict partition (p1='xyz', p2='123');
describe alter_table_restrict partition (p1='abc', p2='123');
describe alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');
-- Try add columns, only limited to table and new partition
alter table alter_table_restrict add columns (c2 decimal(14,4));
describe alter_table_restrict;
describe alter_table_restrict partition (p1='xyz', p2='123');
describe alter_table_restrict partition (p1='abc', p2='123');
describe alter_table_restrict partition (p1='__HIVE_DEFAULT_PARTITION__', p2='123');