Files
impala/testdata/workloads/functional-query/queries/QueryTest/partition-location.test
wzhou-code 02043744be IMPALA-11445: Fix bug in firing insert event of partitions located in different FS
When adding a partition with location in a file system which is
different from the file system of the table location, Impala accept
it. But when insert values to the table, catalogd throw exception.

This patch fix the issue by using the right FileSystem object.

Testing:
 - Added new test case with partitions on different file systems.
   Ran the test on S3.
 - Did manual tests in cluster with partitions on HDFS and Ozone.
 - Passed core test.

Change-Id: I0491ee1bf40c3d5240f9124cef3f3169c44a8267
Reviewed-on: http://gerrit.cloudera.org:8080/18759
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2022-07-22 04:23:30 +00:00

87 lines
2.6 KiB
Plaintext

====
---- QUERY
# Create a table with location in HDFS as default.
CREATE EXTERNAL TABLE hdfs_table_location_1 (name STRING, age INT, grade STRING)
PARTITIONED BY (course STRING);
====
---- QUERY
# Add partition with location in HDFS as default.
ALTER TABLE hdfs_table_location_1 ADD PARTITION (course = "Sport");
====
---- QUERY
INSERT INTO hdfs_table_location_1 PARTITION (course)
VALUES ("Joe", 33, "A", "Sport");
====
---- QUERY
select count(*) from hdfs_table_location_1;
---- RESULTS
1
====
---- QUERY
# Create a table with location in HDFS as default.
CREATE EXTERNAL TABLE hdfs_table_location_2 (name STRING, age INT, grade STRING)
PARTITIONED BY (course STRING);
====
---- QUERY
# Add partition with location in local file system.
ALTER TABLE hdfs_table_location_2 ADD PARTITION (course = "Sport")
LOCATION 'file:///tmp/$DATABASE.db/hdfs_table_location_2/course=Sport';
====
---- QUERY
# Add partition with location in HDFS.
ALTER TABLE hdfs_table_location_2 ADD PARTITION (course = "Math");
====
---- QUERY
INSERT INTO hdfs_table_location_2 PARTITION (course)
VALUES ("Joe", 33, "A", "Sport"), ("Melinda", 27, "B", "Math");
====
---- QUERY
select count(*) from hdfs_table_location_2;
---- RESULTS
2
====
---- QUERY
# Create a table with location in local file system.
CREATE EXTERNAL TABLE local_fs_table_location_1 (name STRING, age INT, grade STRING)
PARTITIONED BY (course STRING)
LOCATION 'file:///tmp/$DATABASE.db/local_fs_table_location_1/';
====
---- QUERY
# Add partition with location in local file system.
ALTER TABLE local_fs_table_location_1 ADD PARTITION (course = "Sport");
====
---- QUERY
INSERT INTO local_fs_table_location_1 PARTITION (course)
VALUES ("Joe", 33, "A", "Sport");
====
---- QUERY
select count(*) from local_fs_table_location_1;
---- RESULTS
1
====
---- QUERY
# Create a table with location in local file system.
CREATE EXTERNAL TABLE local_fs_table_location_2 (name STRING, age INT, grade STRING)
PARTITIONED BY (course STRING)
LOCATION 'file:///tmp/$DATABASE.db/local_fs_table_location_2/';
====
---- QUERY
# Add partition with location in HDFS.
ALTER TABLE local_fs_table_location_2 ADD PARTITION (course = "Sport")
LOCATION
'$FILESYSTEM_PREFIX/test-warehouse/$DATABASE.db/local_fs_table_location_2/course=Sport';
====
---- QUERY
# Add partition with location in local file system.
ALTER TABLE local_fs_table_location_2 ADD PARTITION (course = "Math");
====
---- QUERY
INSERT INTO local_fs_table_location_2 PARTITION (course)
VALUES ("Joe", 33, "A", "Sport"), ("Melinda", 27, "B", "Math");
====
---- QUERY
select count(*) from local_fs_table_location_2;
---- RESULTS
2
====