mirror of
https://github.com/apache/impala.git
synced 2026-02-02 15:00:38 -05:00
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>
87 lines
2.6 KiB
Plaintext
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
|
|
====
|