Files
impala/testdata/workloads/functional-query/queries/QueryTest/alter-table.test
Taras Bobrovytsky bf1d9677fc IMPALA-4155: Update default partition when table is altered
If the table format is changed by the Alter Table statement, the
default partition in partitioned tables used to not get updated. This
caused a problem because Insert picks up the file format for new
partitions from the default partition. This patch fixes the problem by
calling addDefaultPartition().

Also removed "drop table if not exists" in tests in alter-table.test
because we already have the unique_database fixture.

Change-Id: I59bf21caa5c5e7867d07d87cda0c0a5b4b994859
Reviewed-on: http://gerrit.cloudera.org:8080/4750
Reviewed-by: Alex Behm <alex.behm@cloudera.com>
Tested-by: Internal Jenkins
2016-10-20 23:47:52 +00:00

961 lines
33 KiB
Plaintext

====
---- 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<int>,
y map<string,float> comment 'Map Col',
z struct<f1:boolean,f2:bigint>)
---- RESULTS
====
---- QUERY
describe t2
---- RESULTS
'id_col','bigint','id col'
'int_col','int','changed to int col'
'c3','int','added a comment'
'x','array<int>',''
'y','map<string,float>','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<f1:array<int>,f2:map<string,struct<f1:bigint>>>,
c double)
---- RESULTS
====
---- QUERY
describe t2
---- RESULTS
'a','int','Int Col'
'b','struct<\n f1:array<int>,\n f2:map<string,struct<\n f1:bigint\n >>\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<struct<f1:decimal(10,2)>>;
describe t2;
---- RESULTS
'a','int','Int Col'
'b','struct<\n f1:array<int>,\n f2:map<string,struct<\n f1:bigint\n >>\n>',''
'c','array<struct<\n f1:decimal(10,2)\n>>',''
---- 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<int>,\n f2:map<string,struct<\n f1:bigint\n >>\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
====
---- 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
====
---- QUERY
alter table t_part drop partition (j=101, s='different_part_dir')
---- RESULTS
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
====
---- 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
---- 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, INT, 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
====
---- QUERY
# alter with property lengths just within limits
alter table $DATABASE.property_length
set tblproperties(
'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk'
=
'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue'
)
---- RESULTS
====
---- 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
====
---- 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
====