mirror of
https://github.com/apache/impala.git
synced 2026-01-23 03:00:12 -05:00
Currently EXPLAIN statements might open ACID transactions and create locks on ACID tables. This is not necessary since we won't modify the table. But the real problem is that these transactions and locks are leaked and open forever. They are even getting heartbeated while the coordinator is still running. The solution is to not consume any ACID resources for EXPLAIN statements. Testing: * Added EXPLAIN INSERT OVERWRITE in front of an actual INSERT OVERWRITE in an e2e test Change-Id: I05113b1fd9a3eb2d0dd6cf723df916457f3fbf39 Reviewed-on: http://gerrit.cloudera.org:8080/16923 Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
185 lines
4.0 KiB
Plaintext
185 lines
4.0 KiB
Plaintext
====
|
|
---- QUERY
|
|
create table insertonly_nopart (i int)
|
|
tblproperties('transactional'='true', 'transactional_properties'='insert_only');
|
|
insert into insertonly_nopart values (1), (2);
|
|
====
|
|
---- QUERY
|
|
select i from insertonly_nopart order by i;
|
|
---- RESULTS
|
|
1
|
|
2
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
insert into insertonly_nopart values (3);
|
|
====
|
|
---- QUERY
|
|
select i from insertonly_nopart order by i;
|
|
---- RESULTS
|
|
1
|
|
2
|
|
3
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
# IMPALA-10422: Run EXPLAIN before INSERT OVERWRITE to check that
|
|
# EXPLAIN statements don't leak transactions and locks.
|
|
explain insert overwrite insertonly_nopart values (10);
|
|
insert overwrite insertonly_nopart values (10);
|
|
====
|
|
---- QUERY
|
|
select i from insertonly_nopart order by i;
|
|
---- RESULTS
|
|
10
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
insert overwrite insertonly_nopart select 100;
|
|
====
|
|
---- QUERY
|
|
select i from insertonly_nopart order by i;
|
|
---- RESULTS
|
|
100
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
create table insertonly_nopart_ctas
|
|
tblproperties('transactional'='true', 'transactional_properties'='insert_only')
|
|
as select * from insertonly_nopart;
|
|
select * from insertonly_nopart_ctas;
|
|
---- RESULTS
|
|
100
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
show files in insertonly_nopart_ctas;
|
|
---- LABELS
|
|
Path,Size,Partition
|
|
---- RESULTS
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_nopart_ctas/delta_1_1/.*','\d+B',''
|
|
---- TYPES
|
|
STRING,STRING,STRING
|
|
====
|
|
---- QUERY
|
|
drop table insertonly_nopart_ctas;
|
|
====
|
|
---- QUERY
|
|
insert overwrite insertonly_nopart
|
|
select * from insertonly_nopart limit 0;
|
|
====
|
|
---- QUERY
|
|
select i from insertonly_nopart order by i;
|
|
---- RESULTS
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
create table if not exists insertonly_part (i int)
|
|
partitioned by (p int)
|
|
tblproperties('transactional'='true', 'transactional_properties'='insert_only');
|
|
insert into insertonly_part partition (p=1) values (10), (11);
|
|
insert into insertonly_part partition (p=2) values (20);
|
|
====
|
|
---- QUERY
|
|
select p, i from insertonly_part order by i;
|
|
---- RESULTS
|
|
1,10
|
|
1,11
|
|
2,20
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
insert into insertonly_part partition (p=2) values (21);
|
|
insert into insertonly_part partition (p=3) values (30);
|
|
====
|
|
---- QUERY
|
|
select p, i from insertonly_part order by i;
|
|
---- RESULTS
|
|
1,10
|
|
1,11
|
|
2,20
|
|
2,21
|
|
3,30
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
insert overwrite insertonly_part partition (p=2) values (22);
|
|
insert overwrite insertonly_part partition (p=3) values (31);
|
|
====
|
|
---- QUERY
|
|
select p, i from insertonly_part order by i;
|
|
---- RESULTS
|
|
1,10
|
|
1,11
|
|
2,22
|
|
3,31
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
insert overwrite insertonly_part partition (p=1)
|
|
select * from insertonly_nopart limit 0;
|
|
insert overwrite insertonly_part partition (p=2)
|
|
select * from insertonly_nopart limit 0;
|
|
====
|
|
---- QUERY
|
|
select p, i from insertonly_part order by i;
|
|
---- RESULTS
|
|
3,31
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
insert overwrite insertonly_part partition (p)
|
|
values (1000, 1), (2000, 2), (4000, 4), (5000, 5), (5001, 5);
|
|
====
|
|
---- QUERY
|
|
select p, i from insertonly_part order by p, i;
|
|
---- RESULTS
|
|
1,1000
|
|
2,2000
|
|
3,31
|
|
4,4000
|
|
5,5000
|
|
5,5001
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
create table insertonly_part_ctas
|
|
partitioned by (p)
|
|
tblproperties('transactional'='true', 'transactional_properties'='insert_only')
|
|
as select * from insertonly_part;
|
|
select p, i from insertonly_part_ctas;
|
|
---- RESULTS
|
|
1,1000
|
|
2,2000
|
|
3,31
|
|
4,4000
|
|
5,5000
|
|
5,5001
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
show files in insertonly_part_ctas;
|
|
---- LABELS
|
|
Path,Size,Partition
|
|
---- RESULTS
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_part_ctas/p=1/delta_1_1/.*','\d+B','p=1'
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_part_ctas/p=2/delta_1_1/.*','\d+B','p=2'
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_part_ctas/p=3/delta_1_1/.*','\d+B','p=3'
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_part_ctas/p=4/delta_1_1/.*','\d+B','p=4'
|
|
row_regex:'$NAMENODE/$MANAGED_WAREHOUSE_DIR/$DATABASE.db/insertonly_part_ctas/p=5/delta_1_1/.*','\d+B','p=5'
|
|
---- TYPES
|
|
STRING,STRING,STRING
|
|
====
|