mirror of
https://github.com/apache/impala.git
synced 2026-02-01 12:00:22 -05:00
Kudu engine recently enables the auto-incrementing column feature (KUDU-1945). The feature works by appending a system generated auto-incrementing column to the primary key columns to guarantee the uniqueness on primary key when the primary key columns can be non unique. The non unique primary key columns and the auto-incrementing column form the effective unique composite primary key. This auto-incrementing column is named as 'auto_incrementing_id' with big int type. The assignment to it during insertion is automatic so insertion statements should not specify values for auto-incrementing column. In current Kudu implementation, there is no central key provider for auto-incrementing columns. It uses a per tablet-server global counter to assign values for auto-incrementing columns. So the values of auto-incrementing columns are not unique in a Kudu table, but unique within a continuous region of the table served by a tablet-server. This patch also upgraded Kudu version to 345fd44ca3 to pick up Kudu changes needed for supporting non-unique primary key. It added syntactic support for creating Kudu table with non unique primary key. When creating a Kudu table, specifying PRIMARY KEY is optional. If there is no primary key attribute specified, the partition key columns will be promoted as non unique primary key if those columns are the beginning columns of the table. New column "key_unique" is added to the output of 'describe' table command for Kudu table. Examples of CREATE TABLE statement with non unique primary key: CREATE TABLE tbl (i INT NON UNIQUE PRIMARY KEY, s STRING) PARTITION BY HASH (i) PARTITIONS 3 STORED as KUDU; CREATE TABLE tbl (i INT, s STRING, NON UNIQUE PRIMARY KEY(i)) PARTITION BY HASH (i) PARTITIONS 3 STORED as KUDU; CREATE TABLE tbl NON UNIQUE PRIMARY KEY(id) PARTITION BY HASH (id) PARTITIONS 3 STORED as KUDU AS SELECT id, string_col FROM functional.alltypes WHERE id = 10; CREATE TABLE tbl NON UNIQUE PRIMARY KEY(id) PARTITION BY RANGE (id) (PARTITION VALUES <= 1000, PARTITION 1000 < VALUES <= 2000, PARTITION 2000 < VALUES <= 3000, PARTITION 3000 < VALUES) STORED as KUDU AS SELECT id, int_col FROM functional.alltypestiny ORDER BY id ASC LIMIT 4000; CREATE TABLE tbl (id INT, name STRING, NON UNIQUE PRIMARY KEY(id)) STORED as KUDU; CREATE TABLE tbl (a INT, b STRING, c FLOAT) PARTITION BY HASH (a, b) PARTITIONS 3 STORED as KUDU; SELECT statement does not show the system generated auto-incrementing column unless the column is explicitly specified in the select list. Auto-incrementing column cannot be added, removed or renamed with ALTER TABLE statements. UPSERT operation is not supported now for Kudu tables with auto incrementing column due to limitation in Kudu engine. Testing: - Ran manual test in impala-shell with queries to create Kudu tables with non unique primary key, and tested insert/update/delete operations for these tables with non unique primary key. - Added front end tests, and end to end unit tests for Kudu tables with non unique primary key. - Passed exhaustive test. Change-Id: I4d7882bf3d01a3492cc9827c072d1f3200d9eebd Reviewed-on: http://gerrit.cloudera.org:8080/19383 Reviewed-by: Riza Suminto <riza.suminto@cloudera.com> Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
476 lines
18 KiB
Plaintext
476 lines
18 KiB
Plaintext
====
|
|
---- QUERY
|
|
create table tdata
|
|
(id int primary key, valf float null, vali bigint null, valv string null,
|
|
valb boolean null, valt tinyint null, vals smallint null, vald double null,
|
|
valdec4 decimal(9,9) null, valdec8 decimal(18,2) null,
|
|
valdec16 decimal(38, 0) null, valdate date null, valvc varchar(10) null)
|
|
PARTITION BY RANGE (PARTITION VALUES < 100, PARTITION 100 <= VALUES < 1000,
|
|
PARTITION 1000 <= VALUES <= 10000) STORED AS KUDU
|
|
---- RESULTS
|
|
'Table has been created.'
|
|
====
|
|
---- QUERY
|
|
insert into table tdata values
|
|
(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1, DATE '2019-01-01', CAST('one' AS VARCHAR(10))),
|
|
(2, -2, 20, 'two', false, 0, 1, NULL, 0.000000002, 2.22, 2, DATE '2019-01-02', CAST('two' AS VARCHAR(10))),
|
|
(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60, DATE '2019-01-03', CAST('three' AS VARCHAR(10))),
|
|
(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12, DATE '2019-01-04', CAST('four' AS VARCHAR(10))),
|
|
(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40, DATE '2019-01-05', CAST('five' AS VARCHAR(10))),
|
|
(6, 9, 12, 'six', true, -1, -2, cast('inf' as double), -0.000000001, -1.11, -1, DATE '2019-01-06', CAST('six' AS VARCHAR(10))),
|
|
(7, NULL, 7, 'seven', false, 77, 777, NULL, NULL, NULL, NULL, NULL, CAST('seven' AS VARCHAR(10))),
|
|
(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15, DATE '2019-01-08', NULL),
|
|
(9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
|
(127, 1, 2, '127', false, 3, 4, 5, 0.000000000, 0.00, 0, DATE '2019-01-27', CAST('127' AS VARCHAR(10)))
|
|
---- RESULTS
|
|
: 10
|
|
====
|
|
---- QUERY
|
|
# single row, predicate on key
|
|
delete from tdata where id = 1
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL,'seven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27,'127'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on key, NULL
|
|
delete from tdata where id is NULL
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 0
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL,'seven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27,'127'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on key, nothing is deleted
|
|
delete from tdata where id = 10
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 0
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL,'seven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
127,1,2,'127',false,3,4,5,0.000000000,0.00,0,2019-01-27,'127'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on key, boundary value
|
|
delete from tdata where id = max_tinyint()
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
7,NULL,7,'seven',false,77,777,NULL,NULL,NULL,NULL,NULL,'seven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# compound predicate on key
|
|
delete from tdata where id > 6 and id < 8
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on key, multiple rows
|
|
delete from tdata where id % 4 = 0
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 2
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# insert new values, including some that were previously deleted
|
|
insert into table tdata values
|
|
(10, 20, 30, 'ten', true, 40, 50, 60, 0.000000070, 80.80, 90, DATE '2019-01-10', CAST('ten' AS VARCHAR(10))),
|
|
(1, 1.0, 1, 'one', true, 1, 1, 1, 0.000000001, 1.11, 1, DATE '2019-01-01', CAST('one' AS VARCHAR(10))),
|
|
(11, -11, 11, 'eleven', false, 1, 11, 111, 0.000000011, 11.00, 11, DATE '2019-01-11', CAST('eleven' AS VARCHAR(10))),
|
|
(8, 0, 80, NULL, true, 10, 11, 12, 0.000000013, 0.14, 15, DATE '2019-01-08', NULL)
|
|
====
|
|
---- QUERY
|
|
# single row, predicate on non-key
|
|
delete from tdata where valv = 'five'
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
9,NULL,NULL,'NULL',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NULL'
|
|
10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10,'ten'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11,'eleven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on non-key, NULL
|
|
delete from tdata where valb is NULL
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10,'ten'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11,'eleven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on non-key, nothing is deleted
|
|
delete from tdata where vals = -100
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 0
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10,'ten'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11,'eleven'
|
|
8,0,80,'NULL',true,10,11,12,0.000000013,0.14,15,2019-01-08,'NULL'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on non-key, compound predicate
|
|
delete from tdata where valf = 0 and vali = 80
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
10,20,30,'ten',true,40,50,60,0.000000070,80.80,90,2019-01-10,'ten'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11,'eleven'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on non-key, multiple rows
|
|
delete from tdata where vals % 10 = 0
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 2
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
11,-11,11,'eleven',false,1,11,111,0.000000011,11.00,11,2019-01-11,'eleven'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# 'from' syntax - the join results in four deletes, 3 of which fail
|
|
delete a from tdata a, tdata b where a.id = 11
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 3
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# Try to delete a row with a primary key value that is not covered by the existing range
|
|
# partitions. This doesn't actually end up selecting any rows to modify.
|
|
delete from tdata where id = 10001
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 0
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
2,-2,20,'two',false,0,1,NULL,0.000000002,2.22,2,2019-01-02,'two'
|
|
6,9,12,'six',true,-1,-2,Infinity,-0.000000001,-1.11,-1,2019-01-06,'six'
|
|
1,1.0,1,'one',true,1,1,1,0.000000001,1.11,1,2019-01-01,'one'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# Add a couple more rows back
|
|
insert into table tdata values
|
|
(3, 0, NULL, 'three', false, 10, 20, 30, 0.000000040, 50.00, 60, DATE '2019-01-03', CAST('three' AS VARCHAR(10))),
|
|
(4, 5, 6, 'four', true, 7, 8, 9, 0.000000010, 11.11, 12, DATE '2019-01-04', CAST('four' AS VARCHAR(10))),
|
|
(5, 0, 10, 'five', NULL, 15, 20, 25, 0.000000030, 35.35, 40, DATE '2019-01-05', CAST('five' AS VARCHAR(10)))
|
|
---- RESULTS
|
|
: 3
|
|
====
|
|
---- QUERY
|
|
# predicate on decimal, multiple rows
|
|
delete from tdata where valdec8 < 11.11
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 3
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
5,0,10,'five',NULL,15,20,25,0.000000030,35.35,40,2019-01-05,'five'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
# predicate on decimal, single row
|
|
delete from tdata where valdec4 = 0.000000030
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
3,0,NULL,'three',false,10,20,30,0.000000040,50.00,60,2019-01-03,'three'
|
|
4,5,6,'four',true,7,8,9,0.000000010,11.11,12,2019-01-04,'four'
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
insert into tdata
|
|
select cast(id + 100 as int), float_col, bigint_col, string_col, bool_col, tinyint_col,
|
|
smallint_col, double_col, NULL, NULL, NULL, NULL, NULL
|
|
from functional_kudu.alltypes
|
|
---- RESULTS
|
|
: 7300
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 7300
|
|
NumRowErrors: 0
|
|
====
|
|
---- QUERY
|
|
# Test a larger DELETE
|
|
delete from tdata where id > -1
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 7302
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
ID, VALF, VALI, VALV, VALB, VALT, VALS, VALD, VALDEC4, VALDEC8, VALDEC16, VALDATE, VALVC
|
|
---- DML_RESULTS: tdata
|
|
---- TYPES
|
|
INT,FLOAT,BIGINT,STRING,BOOLEAN,TINYINT,SMALLINT,DOUBLE,DECIMAL,DECIMAL,DECIMAL,DATE,STRING
|
|
====
|
|
---- QUERY
|
|
create table multiple_key_cols
|
|
(string_col string, bigint_col bigint, tinyint_col tinyint,
|
|
smallint_col smallint, bool_col boolean null, int_col int null,
|
|
double_col double null, float_col float null,
|
|
primary key (string_col, bigint_col, tinyint_col, smallint_col))
|
|
PARTITION BY HASH (string_col) PARTITIONS 16 STORED AS KUDU
|
|
====
|
|
---- QUERY
|
|
insert into multiple_key_cols values
|
|
('a', 1, 2, 3, true, 4, 5, NULL),
|
|
('b', 1, 2, 3, false, 7, NULL, 9),
|
|
('c', 4, 5, 6, true, 0, -1, 0),
|
|
('d', 10, 20, 30, false, NULL, 40, 50)
|
|
---- RESULTS
|
|
: 4
|
|
====
|
|
---- QUERY
|
|
# multiple key cols, predicate on one of them
|
|
delete from multiple_key_cols where bigint_col = 1
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 2
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
STRING_COL, BIGINT_COL, TINYINT_COL, SMALLINT_COL, BOOL_COL, INT_COL, DOUBLE_COL, FLOAT_COL
|
|
---- DML_RESULTS: multiple_key_cols
|
|
'c',4,5,6,true,0,-1,0
|
|
'd',10,20,30,false,NULL,40,50
|
|
---- TYPES
|
|
STRING,BIGINT,TINYINT,SMALLINT,BOOLEAN,INT,DOUBLE,FLOAT
|
|
====
|
|
---- QUERY
|
|
# multiple key cols, predicate on non-key col
|
|
delete from multiple_key_cols where bool_col = false
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 1
|
|
NumRowErrors: 0
|
|
---- LABELS
|
|
STRING_COL, BIGINT_COL, TINYINT_COL, SMALLINT_COL, BOOL_COL, INT_COL, DOUBLE_COL, FLOAT_COL
|
|
---- DML_RESULTS: multiple_key_cols
|
|
'c',4,5,6,true,0,-1,0
|
|
---- TYPES
|
|
STRING,BIGINT,TINYINT,SMALLINT,BOOLEAN,INT,DOUBLE,FLOAT
|
|
====
|
|
---- QUERY
|
|
# IMPALA-3454: A delete that requires a rewrite may not get the Kudu column order correct
|
|
# if the Kudu columns are of different types.
|
|
create table impala_3454 (key_1 tinyint, key_2 bigint, PRIMARY KEY (key_1, key_2))
|
|
PARTITION BY HASH PARTITIONS 3 STORED AS KUDU
|
|
---- RESULTS
|
|
'Table has been created.'
|
|
====
|
|
---- QUERY
|
|
insert into impala_3454 values
|
|
(1, 1),
|
|
(2, 2),
|
|
(3, 3)
|
|
---- RESULTS
|
|
: 3
|
|
====
|
|
---- QUERY
|
|
delete from impala_3454 where key_1 < (select max(key_2) from impala_3454)
|
|
---- RESULTS
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 2
|
|
NumRowErrors: 0
|
|
====
|
|
---- QUERY
|
|
select * from impala_3454
|
|
---- RESULTS
|
|
3,3
|
|
---- TYPES
|
|
TINYINT,BIGINT
|
|
====
|
|
---- QUERY
|
|
# Create Kudu table with non unique primary key
|
|
create table delete_non_unique_key_test non unique primary key (id)
|
|
partition by hash (id) partitions 3 stored as kudu
|
|
as select id, int_col from functional.alltypestiny;
|
|
select * from delete_non_unique_key_test order by id;
|
|
---- RESULTS
|
|
0,0
|
|
1,1
|
|
2,0
|
|
3,1
|
|
4,0
|
|
5,1
|
|
6,0
|
|
7,1
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
# Test a DELETE with non unique primary key
|
|
delete delete_non_unique_key_test where id < 3;
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 3
|
|
NumRowErrors: 0
|
|
====
|
|
---- QUERY
|
|
select * from delete_non_unique_key_test order by id;
|
|
---- RESULTS
|
|
3,1
|
|
4,0
|
|
5,1
|
|
6,0
|
|
7,1
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
# Test a DELETE with non key column
|
|
delete delete_non_unique_key_test where int_col = 0;
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 2
|
|
NumRowErrors: 0
|
|
====
|
|
---- QUERY
|
|
select * from delete_non_unique_key_test order by id;
|
|
---- RESULTS
|
|
3,1
|
|
5,1
|
|
7,1
|
|
---- TYPES
|
|
INT,INT
|
|
====
|
|
---- QUERY
|
|
# Test a DELETE with auto-incrementing column in where clause
|
|
delete delete_non_unique_key_test where auto_incrementing_id < 10;
|
|
---- RUNTIME_PROFILE
|
|
NumModifiedRows: 3
|
|
NumRowErrors: 0
|
|
====
|
|
---- QUERY
|
|
select count(*) from delete_non_unique_key_test;
|
|
---- RESULTS
|
|
0
|
|
==== |