mirror of
https://github.com/apache/impala.git
synced 2026-02-01 03:00:22 -05:00
Because of a bug the INSERT part of a CTAS statement didn't run in a transaction and it just put the new files under the root directory of the table. This didn't cause too much problems because there couldn't be any concurrent operations as the table was under construction. However, this behavior is not working particularly well in the context of replication, as the notification event needs a transaction id. With this fix the INSERT operation runs in a transaction and the new files are created under a delta directory. Testing: * Added CTAS statements and SHOW FILES <tbl> queries to acid-insert.test Check if the files are created in a delta directory, if so, then the INSERT must have been running in a transaction. Change-Id: I6ed96aeadbcead9fdc548da5922a066460ff9f77 Reviewed-on: http://gerrit.cloudera.org:8080/16472 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
182 lines
3.8 KiB
Plaintext
182 lines
3.8 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
|
|
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
|
|
====
|