Files
impala/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test
wzhou-code 40da36414f IMPALA-11809: Support non unique primary key for Kudu
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>
2023-02-04 07:34:56 +00:00

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
====