==== ---- QUERY # First create an unpartitioned table create external table t1 (i int) location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/t1_tmp1' ---- RESULTS ==== ---- QUERY describe t1 ---- RESULTS 'i','int','' ---- TYPES string,string,string ==== ---- QUERY # Add some columns alter table t1 add columns (t tinyint, s string comment 'Str Col') ---- RESULTS ==== ---- QUERY describe t1 ---- RESULTS 'i','int','' 't','tinyint','' 's','string','Str Col' ---- TYPES string,string,string ==== ---- QUERY alter table t1 rename to t2 ---- RESULTS ==== ---- QUERY show tables ---- RESULTS 't2' 'part_data' ---- TYPES string ==== ---- QUERY # Move the table to a different database alter table t2 rename to $DATABASE2.t1_inotherdb ---- RESULTS ==== ---- QUERY # No longer appears in this database show tables ---- RESULTS 'part_data' ---- TYPES string ==== ---- QUERY # Shows up in the second database show tables in $DATABASE2 ---- RESULTS 't1_inotherdb' ---- TYPES string ==== ---- QUERY # Move the table back to this database alter table $DATABASE2.t1_inotherdb rename to t2 ---- RESULTS ==== ---- QUERY # make sure the new table shows the same columns as the old table describe t2 ---- RESULTS 'i','int','' 't','tinyint','' 's','string','Str Col' ---- TYPES string,string,string ==== ---- QUERY alter table t2 drop column t ---- RESULTS ==== ---- QUERY # The dropped column no longer shows up describe t2 ---- RESULTS 'i','int','' 's','string','Str Col' ---- TYPES string,string,string ==== ---- QUERY # Replace the columns with new values alter table t2 replace columns (c1 bigint comment 'id col', c2 string, c3 int) ---- RESULTS ==== ---- QUERY describe t2 ---- RESULTS 'c1','bigint','id col' 'c2','string','' 'c3','int','' ---- TYPES string,string,string ==== ---- QUERY # Should be able to read/write using the new column types insert overwrite table t2 select 1, '50', 2 from functional.alltypes limit 2 ---- RESULTS : 2 ==== ---- QUERY select * from t2 ---- RESULTS 1,'50',2 1,'50',2 ---- TYPES bigint,string,int ==== ---- QUERY alter table t2 change column c2 int_col int comment 'changed to int col' ---- RESULTS ==== ---- QUERY alter table t2 change column c1 id_col bigint ---- RESULTS ==== ---- QUERY alter table t2 change column c3 c3 int comment 'added a comment' ---- RESULTS ==== ---- QUERY describe t2 ---- RESULTS 'id_col','bigint','id col' 'int_col','int','changed to int col' 'c3','int','added a comment' ---- TYPES string,string,string ==== ---- QUERY select * from t2 ---- RESULTS 1,50,2 1,50,2 ---- TYPES bigint,int,int ==== ---- QUERY # Add some complex-typed columns alter table t2 add columns ( x array, y map comment 'Map Col', z struct) ---- RESULTS ==== ---- QUERY describe t2 ---- RESULTS 'id_col','bigint','id col' 'int_col','int','changed to int col' 'c3','int','added a comment' 'x','array','' 'y','map','Map Col' 'z','struct<\n f1:boolean,\n f2:bigint\n>','' ---- TYPES string,string,string ==== ---- QUERY # Replace columns with some complex-typed columns alter table t2 replace columns ( a int comment 'Int Col', b struct,f2:map>>, c double) ---- RESULTS ==== ---- QUERY describe t2 ---- RESULTS 'a','int','Int Col' 'b','struct<\n f1:array,\n f2:map>\n>','' 'c','double','' ---- TYPES string,string,string ==== ---- QUERY # IMPALA-2974: Change a single column to a complex type. alter table t2 change column c c array>; describe t2; ---- RESULTS 'a','int','Int Col' 'b','struct<\n f1:array,\n f2:map>\n>','' 'c','array>','' ---- TYPES string,string,string ==== ---- QUERY # Change a single complex-typed column to a scalar type. alter table t2 change column c c varchar(20); describe t2; ---- RESULTS 'a','int','Int Col' 'b','struct<\n f1:array,\n f2:map>\n>','' 'c','varchar(20)','' ---- TYPES string,string,string ==== ---- QUERY # set a comment using the 'ALTER COLUMN' syntax. alter table t2 alter column a set comment 'alter comment'; describe t2; ---- RESULTS 'a','int','alter comment' 'b','struct<\n f1:array,\n f2:map>\n>','' 'c','varchar(20)','' ---- TYPES string,string,string ==== ---- QUERY create external table jointbl_test like functional.jointbl ---- RESULTS ==== ---- QUERY # Expect new table to be empty select * from jointbl_test ---- RESULTS ---- TYPES bigint,string,int,int ==== ---- QUERY # change the location to point to some data alter table jointbl_test set location '$FILESYSTEM_PREFIX/test-warehouse/jointbl'; # Check the location is correct show table stats jointbl_test; ---- RESULTS -1,1,regex:.*B,'NOT CACHED','NOT CACHED','TEXT','false','$NAMENODE/test-warehouse/jointbl' ---- TYPES bigint,bigint,string,string,string,string,string,string ==== ---- QUERY # should get some results back now select * from jointbl_test order by test_id limit 3 ---- RESULTS 1001,'Name1',94611,5000 1002,'Name2',94611,5000 1003,'Name3',94611,5000 ---- TYPES bigint,string,int,int ==== ---- QUERY # change the location to point to some data in another file format alter table jointbl_test set location '$FILESYSTEM_PREFIX/test-warehouse/jointbl_seq'; show table stats jointbl_test; ---- RESULTS -1,1,regex:.*B,'NOT CACHED','NOT CACHED','TEXT','false','$NAMENODE/test-warehouse/jointbl_seq' ---- TYPES bigint,bigint,string,string,string,string,string,string ==== ---- QUERY # change the table fileformat to match the data alter table jointbl_test set fileformat sequencefile ---- RESULTS 'Updated table.' ---- TYPES string ==== ---- QUERY # now the proper data should be returned select * from jointbl_test order by test_id limit 3 ---- RESULTS 1001,'Name1',94611,5000 1002,'Name2',94611,5000 1003,'Name3',94611,5000 ---- TYPES bigint,string,int,int ==== ---- QUERY # Create a partitioned table. Specify the location so we know what dirs need # to be cleaned after the test finishes executing. create external table t_part (i int) partitioned by (j int, s string) location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/t_part_tmp'; alter table t_part add partition (j=cast(2-1 as int), s='2012'); alter table t_part add if not exists partition (j=1, s='2012'); alter table t_part add if not exists partition (j=1, s='2012/withslash'); alter table t_part add partition (j=1, s=substring('foo2013bar', 4, 8)); ---- RESULTS ==== ---- QUERY # Add another partition that points to the same location as another partition. # This will cause the data to be read twice, but shouldn't result in an error. alter table t_part add partition (j=100, s='same_location') location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/t_part_tmp/j=1/s=2012' ---- RESULTS ==== ---- QUERY # Add another partition that points to an existing data location that does not # follow the key=value directory structure. alter table t_part add partition (j=101, s='different_part_dir') location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/part_data/' ---- RESULTS ==== ---- QUERY insert overwrite table t_part partition(j=1, s='2012') select 2 from functional.alltypes limit 2 ---- RESULTS j=1/s=2012/: 2 ==== ---- QUERY insert overwrite table t_part partition(j=1, s='2013') select 3 from functional.alltypes limit 3 ---- RESULTS j=1/s=2013/: 3 ==== ---- QUERY insert overwrite table t_part partition(j=1, s='2012/withslash') select 1 from functional.alltypes limit 1 ---- RESULTS j=1/s=2012%2Fwithslash/: 1 ==== ---- QUERY # Refresh the table to ensure all partitions have up-to-date list of file and block # metadata. refresh t_part; ---- RESULTS ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' 2,100,'same_location' 2,100,'same_location' 3,1,'2013' 3,1,'2013' 3,1,'2013' 1984,101,'different_part_dir' ---- TYPES int,int,string ==== ---- QUERY alter table t_part add partition (j=NULL, s='2013') ---- RESULTS ==== ---- QUERY alter table t_part add partition (j=NULL, s=NULL) ---- RESULTS ==== ---- QUERY # Drop the partition that points to a duplication location. The data will no longer # be read twice. alter table t_part drop partition (j=100, s='same_location') ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY alter table t_part drop partition (j=101, s='different_part_dir') ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY insert overwrite table t_part partition(j=NULL, s=NULL) select 4 from functional.alltypes limit 5 ---- RESULTS j=__HIVE_DEFAULT_PARTITION__/s=__HIVE_DEFAULT_PARTITION__/: 5 ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' 3,1,'2013' 3,1,'2013' 3,1,'2013' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' ---- TYPES int,int,string ==== ---- QUERY insert overwrite table t_part partition(j=NULL, s='2013') select 5 from functional.alltypes limit 5 ---- RESULTS j=__HIVE_DEFAULT_PARTITION__/s=2013/: 5 ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' 3,1,'2013' 3,1,'2013' 3,1,'2013' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' 4,NULL,'NULL' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' ---- TYPES int,int,string ==== ---- QUERY alter table t_part drop partition (j=NULL, s=NULL) ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' 3,1,'2013' 3,1,'2013' 3,1,'2013' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' 5,NULL,'2013' ---- TYPES int,int,string ==== ---- QUERY alter table t_part drop partition (j=NULL, s=trim(' 2013 ')) ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' 3,1,'2013' 3,1,'2013' 3,1,'2013' ---- TYPES int,int,string ==== ---- QUERY alter table t_part drop partition (j=1, s='2013') ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY select i, j, s from t_part ---- RESULTS 1,1,'2012/withslash' 2,1,'2012' 2,1,'2012' ---- TYPES int,int,string ==== ---- QUERY alter table t_part drop partition (j=1, s='2012/withslash') ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY select i, j, s from t_part ---- RESULTS 2,1,'2012' 2,1,'2012' ---- TYPES int,int,string ==== ---- QUERY # Test that empty string as partition column maps onto NULL # using static partition insert insert into table t_part partition(j=2, s='') select 1 from functional.alltypes limit 1 ---- RESULTS j=2/s=__HIVE_DEFAULT_PARTITION__/: 1 ==== ---- QUERY # Test that empty string as partition column maps onto NULL # using dynamic partition insert insert into table t_part partition(j=2, s) select 10, '' from functional.alltypes limit 1 ---- RESULTS j=2/s=__HIVE_DEFAULT_PARTITION__/: 1 ==== ---- QUERY # Validate the previous inserts select i, j, s from t_part where s is NULL ---- RESULTS 1,2,'NULL' 10,2,'NULL' ---- TYPES int,int,string ==== ---- QUERY # Drop default partition using empty string as key alter table t_part drop partition (j=2, s='') ---- RESULTS 'Dropped 1 partition(s).' ---- TYPES string ==== ---- QUERY # Validate previous partition drop select i, j, s from t_part where s is NULL ---- RESULTS ---- TYPES int,int,string ==== ---- QUERY # rename a partitioned table alter table t_part rename to t_part2 ---- RESULTS ==== ---- QUERY # only the new table shows up show tables like 't_part*' ---- RESULTS 't_part2' ==== ---- QUERY # should be able to read the same data from this table select i, j, s from t_part2 ---- RESULTS 2,1,'2012' 2,1,'2012' ---- TYPES int,int,string ==== ---- QUERY create external table alltypes_test like functional.alltypes; alter table alltypes_test add partition(month=4, year=2009); alter table alltypes_test add partition(month=5, year=2009); # Table is empty select int_col from alltypes_test; ---- RESULTS ---- TYPES int ==== ---- QUERY # Point one partition at some data (file format does not match table) alter table alltypes_test partition(month=4, year=2009) set location '$FILESYSTEM_PREFIX/test-warehouse/alltypes_seq_snap/year=2009/month=4' ---- RESULTS ==== ---- QUERY alter table alltypes_test partition(month=4, year=2009) set fileformat sequencefile ---- RESULTS 'Updated 1 partition(s).' ---- TYPES string ==== ---- QUERY select int_col, count(*) from alltypes_test group by int_col order by 1 limit 100 ---- RESULTS 0,30 1,30 2,30 3,30 4,30 5,30 6,30 7,30 8,30 9,30 ---- TYPES int,bigint ==== ---- QUERY # Point the other partition at some more data. This time in a different # file format. alter table alltypes_test partition(month=cast(1+4 as int), year=cast(100*20+9 as int)) set location '$FILESYSTEM_PREFIX/test-warehouse/alltypes_rc/year=2009/month=5' ---- RESULTS ==== ---- QUERY alter table alltypes_test partition(month=cast(2+3 as int), year=2009) set fileformat rcfile ---- RESULTS 'Updated 1 partition(s).' ---- TYPES string ==== ---- QUERY select int_col, count(*) from alltypes_test group by int_col order by 1 limit 100 ---- RESULTS 0,61 1,61 2,61 3,61 4,61 5,61 6,61 7,61 8,61 9,61 ---- TYPES int,bigint ==== ---- QUERY # Show the table stats before altering. show table stats alltypes_test ---- LABELS YEAR, MONTH, #ROWS, #FILES, SIZE, BYTES CACHED, CACHE REPLICATION, FORMAT, INCREMENTAL STATS, LOCATION ---- RESULTS '2009','4',-1,1,regex:.+KB,'NOT CACHED','NOT CACHED','SEQUENCE_FILE','false',regex:.* '2009','5',-1,1,regex:.+KB,'NOT CACHED','NOT CACHED','RC_FILE','false',regex:.* 'Total','',-1,2,regex:.+KB,'0B','','','','' ---- TYPES STRING, STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY # Test altering the 'numRows' table property of a table. alter table alltypes_test set tblproperties ('numRows'='200') ---- RESULTS 'Updated table.' ---- TYPES string ==== ---- QUERY # Test altering the 'numRows' table property of a partition. alter table alltypes_test partition(year=2009, month=4) set tblproperties ('numRows'='30', 'STATS_GENERATED_VIA_STATS_TASK'='true') ---- RESULTS 'Updated 1 partition(s).' ---- TYPES string ==== ---- QUERY # Show the table stats after altering the table and partition stats. show table stats alltypes_test ---- LABELS YEAR, MONTH, #ROWS, #FILES, SIZE, BYTES CACHED, CACHE REPLICATION, FORMAT, INCREMENTAL STATS, LOCATION ---- RESULTS '2009','4',30,1,regex:.+KB,'NOT CACHED','NOT CACHED','SEQUENCE_FILE','false',regex:.* '2009','5',-1,1,regex:.+KB,'NOT CACHED','NOT CACHED','RC_FILE','false',regex:.* 'Total','',200,2,regex:.+KB,'0B','','','','' ---- TYPES STRING, STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY # IMPALA-1016: Testing scanning newly added columns CREATE TABLE imp1016 (string1 string) ---- RESULTS ==== ---- QUERY INSERT INTO imp1016 VALUES ('test') ---- RESULTS : 1 ==== ---- QUERY ALTER TABLE imp1016 ADD COLUMNS (string2 string) ---- RESULTS ==== ---- QUERY DESCRIBE imp1016 ---- RESULTS 'string1','string','' 'string2','string','' ---- TYPES string,string,string ==== ---- QUERY SELECT * FROM imp1016 ---- RESULTS 'test','NULL' ---- TYPES string,string ==== ---- QUERY SELECT string1 FROM imp1016 ---- RESULTS 'test' ---- TYPES string ==== ---- QUERY SELECT string2 FROM imp1016 ---- RESULTS 'NULL' ---- TYPES string ==== ---- QUERY SELECT COUNT(DISTINCT string1) FROM imp1016 ---- RESULTS 1 ---- TYPES bigint ==== ---- QUERY SELECT COUNT(DISTINCT string2) FROM imp1016 ---- RESULTS 0 ---- TYPES bigint ==== ---- QUERY # Create a larger table to test scanning newly added columns CREATE TABLE imp1016Large (string1 string) ---- RESULTS ==== ---- QUERY # There is a codepath that operates on chunks of 1024 tuples, inserting # more than 1024 tuples INSERT INTO imp1016Large SELECT 'test' FROM functional.alltypes LIMIT 2000 ---- RESULTS : 2000 ==== ---- QUERY ALTER TABLE imp1016Large ADD COLUMNS (string2 string) ---- RESULTS ==== ---- QUERY DESCRIBE imp1016Large ---- RESULTS 'string1','string','' 'string2','string','' ---- TYPES string,string,string ==== ---- QUERY SELECT COUNT(string2) FROM imp1016Large ---- RESULTS 0 ---- TYPES bigint ==== ---- QUERY SELECT COUNT(*), COUNT(DISTINCT string1) FROM imp1016Large ---- RESULTS 2000,1 ---- TYPES bigint,bigint ==== ---- QUERY SELECT COUNT(*), COUNT(DISTINCT string2) FROM imp1016Large ---- RESULTS 2000,0 ---- TYPES bigint,bigint ==== ---- QUERY # Tests that renaming a table with column stats across databases # preserves table and column stats, and allows the renamed table # to be dropped (IMPALA-1711/HIVE-9720). create table $DATABASE.mv (x int, y string); insert into $DATABASE.mv values(1, 'a'), (2, 'b'), (NULL, NULL); compute stats $DATABASE.mv; alter table $DATABASE.mv rename to $DATABASE2.mv2; invalidate metadata $DATABASE2.mv2 ---- RESULTS ==== ---- QUERY show tables in $DATABASE like '*mv*' ---- RESULTS ---- TYPES STRING ==== ---- QUERY show tables in $DATABASE2 like '*mv*' ---- RESULTS 'mv2' ---- TYPES STRING ==== ---- QUERY show table stats $DATABASE2.mv2 ---- RESULTS 3,1,'14B','NOT CACHED','NOT CACHED','TEXT','false',regex:.* ---- TYPES BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY show column stats $DATABASE2.mv2 ---- RESULTS 'x','INT',2,-1,4,4 'y','STRING',2,-1,1,1 ---- TYPES STRING, STRING, BIGINT, BIGINT, BIGINT, DOUBLE ==== ---- QUERY drop table $DATABASE2.mv2 ---- RESULTS ==== ---- QUERY show tables in $DATABASE2 like '*mv*' ---- RESULTS ---- TYPES STRING ==== ---- QUERY # Tests that renaming a partitioned table with column stats across databases # succeeds and preserves table and column stats, and allows the renamed table # to be dropped (IMPALA-2810). create table $DATABASE.mv (x int) partitioned by (y string); insert into $DATABASE.mv partition(y='a') values(1); insert into $DATABASE.mv partition(y='b') values(2); insert into $DATABASE.mv partition(y=NULL) values(NULL); compute stats $DATABASE.mv; alter table $DATABASE.mv rename to $DATABASE2.mv2; invalidate metadata $DATABASE2.mv2 ---- RESULTS ==== ---- QUERY show tables in $DATABASE like '*mv*' ---- RESULTS ---- TYPES STRING ==== ---- QUERY show tables in $DATABASE2 like '*mv*' ---- RESULTS 'mv2' ---- TYPES STRING ==== ---- QUERY show table stats $DATABASE2.mv2 ---- RESULTS: VERIFY_IS_EQUAL_SORTED 'NULL',1,1,'3B','NOT CACHED','NOT CACHED','TEXT','false',regex:.* 'a',1,1,'2B','NOT CACHED','NOT CACHED','TEXT','false',regex:.* 'b',1,1,'2B','NOT CACHED','NOT CACHED','TEXT','false',regex:.* 'Total',3,3,'7B','0B','','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY show column stats $DATABASE2.mv2 ---- RESULTS: VERIFY_IS_EQUAL_SORTED 'x','INT',2,-1,4,4 'y','STRING',3,1,-1,-1 ---- TYPES STRING, STRING, BIGINT, BIGINT, BIGINT, DOUBLE ==== ---- QUERY drop table $DATABASE2.mv2 ---- RESULTS ==== ---- QUERY show tables in $DATABASE2 like '*mv*' ---- RESULTS ---- TYPES STRING ==== ---- QUERY # alter with serde property lengths just within limits create table $DATABASE.property_length (i int); alter table $DATABASE.property_length set serdeproperties( 'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' = 'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' ) ---- RESULTS 'Updated table.' ---- TYPES string ==== ---- QUERY # alter with property lengths just within limits alter table $DATABASE.property_length set tblproperties( 'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk' = 'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue' ) ---- RESULTS 'Updated table.' ---- TYPES string ==== ---- QUERY -- Change table location after a partition has been created in the original table location create table $DATABASE.change_loc (s string) partitioned by (i int); insert into $DATABASE.change_loc partition (i=1) values ('a'); alter table $DATABASE.change_loc set location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/garbage'; select * from $DATABASE.change_loc; ---- RESULTS 'a',1 ---- TYPES STRING,INT ==== ---- QUERY -- ALTER TABLE .. SET LOCATION works when setting the location of a partition to be the -- the same as a partition of a different table with a different number of clustering -- columns. create table $DATABASE.table_one_part (s string) partitioned by (i int); create table $DATABASE.table_many_part (s string) partitioned by (i0 int, i1 int, i2 int, i3 int, i4 int, i5 int, i6 int, i7 int, i8 int, i9 int); insert into $DATABASE.table_one_part partition (i=0) values ('a'); insert into $DATABASE.table_one_part partition (i=1) values ('b'); insert into $DATABASE.table_many_part partition (i0=0, i1=1, i2=2, i3=3, i4=4, i5=5, i6=6, i7=7, i8=8, i9=9) values ('c'); insert into $DATABASE.table_many_part partition (i0=10, i1=11, i2=12, i3=13, i4=14, i5=15, i6=16, i7=17, i8=18, i9=19) values ('d'); alter table $DATABASE.table_one_part partition (i=1) set location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/table_many_part/i0=10/i1=11/i2=12/i3=13/i4=14/i5=15/i6=16/i7=17/i8=18/i9=19'; alter table $DATABASE.table_many_part partition (i0=10, i1=11, i2=12, i3=13, i4=14, i5=15, i6=16, i7=17, i8=18, i9=19) set location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/table_one_part/i=0/'; select i,s from $DATABASE.table_one_part order by i; ---- RESULTS 0,'a' 1,'d' ---- TYPES INT,STRING ==== ---- QUERY select i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, s from $DATABASE.table_many_part order by i0; ---- RESULTS 0,1,2,3,4,5,6,7,8,9,'c' 10,11,12,13,14,15,16,17,18,19,'a' ---- TYPES INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,STRING ==== ---- QUERY show partitions $DATABASE.table_one_part ---- RESULTS '0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 '1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=10/i1=11/i2=12/i3=13/i4=14/i5=15/i6=16/i7=17/i8=18/i9=19 'Total',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY show partitions $DATABASE.table_many_part ---- RESULTS '0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=0/i1=1/i2=2/i3=3/i4=4/i5=5/i6=6/i7=7/i8=8/i9=9 '10','11','12','13','14','15','16','17','18','19',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 'Total','','','','','','','','','',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY -- Refreshing the tables does not create invalid partition locations refresh $DATABASE.table_one_part; refresh $DATABASE.table_many_part; select i,s from $DATABASE.table_one_part order by i; ---- RESULTS 0,'a' 1,'d' ---- TYPES INT,STRING ==== ---- QUERY select i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, s from $DATABASE.table_many_part order by i0; ---- RESULTS 0,1,2,3,4,5,6,7,8,9,'c' 10,11,12,13,14,15,16,17,18,19,'a' ---- TYPES INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,STRING ==== ---- QUERY show partitions $DATABASE.table_one_part ---- RESULTS '0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 '1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=10/i1=11/i2=12/i3=13/i4=14/i5=15/i6=16/i7=17/i8=18/i9=19 'Total',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY show partitions $DATABASE.table_many_part ---- RESULTS '0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=0/i1=1/i2=2/i3=3/i4=4/i5=5/i6=6/i7=7/i8=8/i9=9 '10','11','12','13','14','15','16','17','18','19',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 'Total','','','','','','','','','',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY -- Altering the table location does not alter the partition locations alter table $DATABASE.table_one_part set location '$FILESYSTEM_PREFIX/garbage/'; alter table $DATABASE.table_many_part set location '$FILESYSTEM_PREFIX/garbage/'; select i,s from $DATABASE.table_one_part order by i; ---- RESULTS 0,'a' 1,'d' ---- TYPES INT,STRING ==== ---- QUERY select i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, s from $DATABASE.table_many_part order by i0; ---- RESULTS 0,1,2,3,4,5,6,7,8,9,'c' 10,11,12,13,14,15,16,17,18,19,'a' ---- TYPES INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,STRING ==== ---- QUERY show partitions $DATABASE.table_one_part ---- RESULTS '0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 '1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=10/i1=11/i2=12/i3=13/i4=14/i5=15/i6=16/i7=17/i8=18/i9=19 'Total',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY show partitions $DATABASE.table_many_part ---- RESULTS '0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_many_part/i0=0/i1=1/i2=2/i3=3/i4=4/i5=5/i6=6/i7=7/i8=8/i9=9 '10','11','12','13','14','15','16','17','18','19',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/$DATABASE.db/table_one_part/i=0 'Total','','','','','','','','','',-1,2,regex:.+,regex:.+,'','','','' ---- TYPES STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY # IMPALA-1740: Test setting the skip.header.line.count tblproperty create table i1740_alter_1 (i1 integer); alter table i1740_alter_1 set tblproperties ('skip.header.line.count'='2'); ---- RESULTS 'Updated table.' ---- TYPES string ==== ---- QUERY # IMPALA-1740: Test setting the skip.header.line.count tblproperty create table i1740_alter_2 (i1 integer); alter table i1740_alter_2 set tblproperties ('skip.header.line.count'='-1'); ---- CATCH Invalid value for table property skip.header.line.count: ==== ---- QUERY # IMPALA-1740: Test setting the skip.header.line.count tblproperty create table i1740_alter_3 (i1 integer); alter table i1740_alter_3 set tblproperties ('skip.header.line.count'='foo'); ---- CATCH Invalid value for table property skip.header.line.count: ==== ---- QUERY # IMPALA-1740: Test setting the skip.header.line.count tblproperty create table i1740_alter_4 (i1 integer) stored as parquet; alter table i1740_alter_4 set tblproperties ('skip.header.line.count'='2'); ==== ---- QUERY # IMPALA-4155: Verify that the default partition is updated by the alter table statement create table i4155_alter (c1 int) partitioned by (p1 string) row format delimited fields terminated by ','; alter table i4155_alter set fileformat PARQUET; insert into i4155_alter partition(p1="abc") values (1); select * from i4155_alter; ---- RESULTS 1,'abc' ---- TYPES INT, STRING ==== ---- QUERY # IMPALA-1670: Support adding multiple partitions in ALTER TABLE ADD PARTITION create table i1670A_alter (s string) partitioned by (i integer); alter table i1670A_alter add partition (i=1) location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/i1670A_alter/i1' partition (i=2) location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/i1670A_alter/i2' partition (i=3) uncached; show partitions i1670A_alter; ---- RESULTS '1',-1,0,'0B','NOT CACHED','NOT CACHED','TEXT','false',regex:.*/i1 '2',-1,0,'0B','NOT CACHED','NOT CACHED','TEXT','false',regex:.*/i2 '3',-1,0,'0B','NOT CACHED','NOT CACHED','TEXT','false',regex:.*/i=3 'Total',-1,0,'0B','0B','','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY # IMPALA-1670: After INVALIDATE METADATA Impala can access previously added partitions and # partition data. create table i1670A_alter_1 (a int) partitioned by (x int); alter table i1670A_alter_1 add partition (x=1) partition (x=2) uncached partition (x=3) location '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/i1670A_alter_1/x3'; insert into i1670A_alter_1 partition(x=1) values (1), (2), (3); insert into i1670A_alter_1 partition(x=2) values (1), (2), (3), (4); insert into i1670A_alter_1 partition(x=3) values (1); invalidate metadata i1670A_alter_1; ==== ---- QUERY show partitions i1670A_alter_1; ---- RESULTS '1',-1,1,regex:.*,'NOT CACHED','NOT CACHED','TEXT','false',regex:.*/x=1 '2',-1,1,regex:.*,'NOT CACHED','NOT CACHED','TEXT','false',regex:.*/x=2 '3',-1,1,regex:.*,'NOT CACHED','NOT CACHED','TEXT','false',regex:.*/x3 'Total',-1,3,regex:.*,'0B','','','','' ---- TYPES STRING, BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING ==== ---- QUERY select x, a from i1670A_alter_1 order by x, a; ---- RESULTS 1,1 1,2 1,3 2,1 2,2 2,3 2,4 3,1 ---- TYPES INT, INT ==== ---- QUERY create table insert_data (i int, d double, f float, b boolean); insert into insert_data values (1, 2, 3, false), (4, 5, 6, true); ==== ---- QUERY create table insert_sorted (i int, d double, f float, b boolean); ==== ---- QUERY # Test setting the sort.columns property alter table insert_sorted sort by(i, d); describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','i,d ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, d, f, b from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: i ASC NULLS LAST, d ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 2 ==== ---- QUERY # Test altering the sort.columns property alter table insert_sorted sort by(b, d, f); describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','b,d,f ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, d, f, b from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: b ASC NULLS LAST, d ASC NULLS LAST, f ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 4 ==== ---- QUERY # Test renaming a column in the sort by list. alter table insert_sorted change d e double; describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','b,e,f ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, d, f, b from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: b ASC NULLS LAST, d ASC NULLS LAST, f ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 6 ==== ---- QUERY # Test replacing the column list, including a column in the sort by list. alter table insert_sorted replace columns (i bigint, e decimal(12,2), f boolean); describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','e,f ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, cast(d as decimal(12,2)), b from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: CAST\(d AS DECIMAL\(12,2\)\) ASC NULLS LAST, b ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 8 ==== ---- QUERY # Test dropping a column in the sort by list alter table insert_sorted drop column f; describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','e ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test that a dropped column cannot be added as a sort column alter table insert_sorted sort by(f); ---- CATCH AnalysisException: Could not find SORT BY column 'f' in table. ==== ---- QUERY # Test that erroneous query didn't change sort columns describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','e ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, cast(d as decimal(12,2)) from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: CAST\(d AS DECIMAL\(12,2\)\) ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 10 ==== ---- QUERY # Test removing the sort.columns property alter table insert_sorted sort by(); describe formatted insert_sorted; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ',' ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted select i, cast(d as decimal(12,2)) from insert_data; ---- RUNTIME_PROFILE aggregation(SUM, InitialRunsCreated): 0 ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted; ---- RESULTS 12 ==== ---- QUERY create table insert_sorted_partitioned (i int, d double, f float, b boolean) partitioned by (p int) sort by (i); ==== ---- QUERY # Test removing all sort columns. alter table insert_sorted_partitioned sort by(); describe formatted insert_sorted_partitioned; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ',' ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted_partitioned partition (p=1) select i, d, f, b from insert_data; ---- RUNTIME_PROFILE aggregation(SUM, InitialRunsCreated): 0 ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted_partitioned; ---- RESULTS 2 ==== ---- QUERY # Re-add a sort column. alter table insert_sorted_partitioned sort by(i); describe formatted insert_sorted_partitioned; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ','i ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted_partitioned partition (p=1) select i, d, f, b from insert_data; ---- RUNTIME_PROFILE row_regex: .*order by: i ASC NULLS LAST ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted_partitioned; ---- RESULTS 4 ==== ---- QUERY # Test dropping the sort column alter table insert_sorted_partitioned drop column i; describe formatted insert_sorted_partitioned; ---- RESULTS: VERIFY_IS_SUBSET '','sort.columns ',' ' ---- TYPES STRING,STRING,STRING ==== ---- QUERY # Test inserting after alter table insert into table insert_sorted_partitioned partition (p=1) select d, f, b from insert_data; ---- RUNTIME_PROFILE aggregation(SUM, InitialRunsCreated): 0 ==== ---- QUERY # Test selection after alter table select count(*) from insert_sorted_partitioned; ---- RESULTS 6 ====