Files
impala/testdata/workloads/functional-query/queries/QueryTest/alter-table.test
Jim Apple 83a1434bc9 IMPALA-2840: Don't store table location in partition location
For a table with location "ABC", most partitions will have locations
like "ABC/DEF=2". The "ABC" part of the location does not need to be
stored in Catalog for each partition; we can compress it down to one
int in the common case.

This is done by stripping from each partition location the last N
directories (where N is the number of clustering columns) and storing
the resulting string in a cache of partition location prefixes. In the
cache, this location prefix string is mapped to an int.  Partition
locations are then stored as a tuple consisting of that int and a
suffix string; the partition location can be reconstructed as the
concatenation of the prefix string (from the cache) and the suffix.

Though this scheme was designed in the expectation that most
partitions will be stored in directories like
"/part_col_1=1.23/part_col_2=234/", it works even when that is not the
case.

TODO: Since each partition stores the literal values for the
partitioning columns, we could also elide the column names and values
when partitions are placed in directories like
"/part_col_1=1.23/part_col_2=234/"

Change-Id: I8c67b6ce0f83de2f5277a528a9ce67e47d638adb
Reviewed-on: http://gerrit.cloudera.org:8080/2355
Reviewed-by: Jim Apple <jbapple@cloudera.com>
Tested-by: Internal Jenkins
2016-05-12 14:17:29 -07:00

974 lines
33 KiB
Plaintext

====
---- QUERY
use alter_table_test_db
---- RESULTS
====
---- QUERY
# First create an unpartitioned table
create external table t1 (i int) location '$FILESYSTEM_PREFIX/test-warehouse/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'
---- TYPES
string
====
---- QUERY
# Move the table to a different database
alter table t2 rename to alter_table_test_db2.t1_inotherdb
---- RESULTS
====
---- QUERY
# No longer appears in this database
show tables
---- RESULTS
---- TYPES
string
====
---- QUERY
# Shows up in the second database
show tables in alter_table_test_db2
---- RESULTS
't1_inotherdb'
---- TYPES
string
====
---- QUERY
# Move the table back to this database
alter table alter_table_test_db2.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/t_part_tmp'
---- RESULTS
====
---- QUERY
alter table t_part add partition (j=cast(2-1 as int), s='2012')
---- RESULTS
====
---- QUERY
alter table t_part add if not exists partition (j=1, s='2012')
---- RESULTS
====
---- QUERY
alter table t_part add if not exists partition (j=1, s='2012/withslash')
---- RESULTS
====
---- QUERY
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/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/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
DROP TABLE IF EXISTS imp1016
====
---- QUERY
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
DROP TABLE IF EXISTS imp1016Large
====
---- QUERY
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 alter_table_test_db.mv (x int, y string);
insert into alter_table_test_db.mv values(1, 'a'), (2, 'b'), (NULL, NULL);
compute stats alter_table_test_db.mv;
alter table alter_table_test_db.mv rename to alter_table_test_db2.mv2;
invalidate metadata alter_table_test_db2.mv2
---- RESULTS
====
---- QUERY
show tables in alter_table_test_db like '%mv%'
---- RESULTS
---- TYPES
STRING
====
---- QUERY
show tables in alter_table_test_db2 like '%mv%'
---- RESULTS
---- TYPES
STRING
====
---- QUERY
show table stats alter_table_test_db2.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 alter_table_test_db2.mv2
---- RESULTS
'x','INT',2,-1,4,4
'y','STRING',2,-1,1,1
---- TYPES
STRING, STRING, BIGINT, BIGINT, INT, DOUBLE
====
---- QUERY
drop table alter_table_test_db2.mv2
---- RESULTS
====
---- QUERY
show tables in alter_table_test_db2 like '%mv%'
---- RESULTS
---- TYPES
STRING
====
---- QUERY
# Test tblproperties and serdeproperties key and property value length
create database if not exists test_alter_property_length_db
====
---- QUERY
show databases like 'test_alter_property_length_db'
---- RESULTS
'test_alter_property_length_db',''
---- TYPES
STRING,STRING
====
---- QUERY
drop table if exists test_alter_property_length_db.property_length
---- RESULTS
====
---- QUERY
# alter with serde property lengths just within limits
create table test_alter_property_length_db.property_length (i int);
alter table test_alter_property_length_db.property_length
set serdeproperties(
'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk'
=
'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue'
)
---- RESULTS
====
---- QUERY
# alter with property lengths just within limits
alter table test_alter_property_length_db.property_length
set tblproperties(
'keykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeyk'
=
'valuevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevaluevalue'
)
---- RESULTS
====
---- QUERY
drop table if exists test_alter_property_length_db.property_length
---- RESULTS
====
---- QUERY
# Need to switch databases before dropping
use default;
drop database if exists test_alter_property_length_db
---- RESULTS
====
---- QUERY
show databases like 'test_alter_property_length_db'
---- RESULTS
---- TYPES
STRING,STRING
====
---- QUERY
-- Change table location after a partition has been created in the original table location
create table alter_table_test_db.change_loc (s string) partitioned by (i int);
insert into alter_table_test_db.change_loc partition (i=1) values ('a');
alter table alter_table_test_db.change_loc
set location '$FILESYSTEM_PREFIX/test-warehouse/alter_table_test_db.db/garbage';
select * from alter_table_test_db.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 alter_table_test_db.table_one_part (s string) partitioned by (i int);
create table alter_table_test_db.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 alter_table_test_db.table_one_part partition (i=0) values ('a');
insert into alter_table_test_db.table_one_part partition (i=1) values ('b');
insert into alter_table_test_db.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 alter_table_test_db.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 alter_table_test_db.table_one_part partition (i=1)
set location '$FILESYSTEM_PREFIX/test-warehouse/alter_table_test_db.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 alter_table_test_db.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/alter_table_test_db.db/table_one_part/i=0/';
select i,s from alter_table_test_db.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 alter_table_test_db.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 alter_table_test_db.table_one_part
---- RESULTS
'0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.db/table_one_part/i=0
'1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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 alter_table_test_db.table_many_part
---- RESULTS
'0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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/alter_table_test_db.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 alter_table_test_db.table_one_part;
refresh alter_table_test_db.table_many_part;
select i,s from alter_table_test_db.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 alter_table_test_db.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 alter_table_test_db.table_one_part
---- RESULTS
'0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.db/table_one_part/i=0
'1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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 alter_table_test_db.table_many_part
---- RESULTS
'0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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/alter_table_test_db.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 alter_table_test_db.table_one_part set location '$FILESYSTEM_PREFIX/garbage/';
alter table alter_table_test_db.table_many_part set location '$FILESYSTEM_PREFIX/garbage/';
select i,s from alter_table_test_db.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 alter_table_test_db.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 alter_table_test_db.table_one_part
---- RESULTS
'0',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.db/table_one_part/i=0
'1',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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 alter_table_test_db.table_many_part
---- RESULTS
'0','1','2','3','4','5','6','7','8','9',-1,1,regex:.+,regex:.+,regex:.+,regex:.+,regex:.+,regex:.*/test-warehouse/alter_table_test_db.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/alter_table_test_db.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
====