Files
impala/testdata/workloads/functional-query/queries/QueryTest/kudu_delete.test
Attila Bukor 2576952655 IMPALA-5092 Add support for VARCHAR in Kudu tables
KUDU-1938 added VARCHAR column type support to Kudu.
This commit adds support for Kudu's VARCHAR type to Impala.

The length of a Kudu varchar is applied as a character length as opposed
to a byte length like Impala currently uses.

When writing data to Kudu, the VARCHAR length is not an issue because
Impala only officially supports ASCII characters and those characters are
the same size in bytes and characters. Additionally, extra bytes would be
truncated by the Kudu client if somehow a value was too long.

When reading data from Kudu, it is possible that the value written by
some other application is wider in bytes than Impala expects and can
handle. This can happen due to multi-byte UTF-8 characters. In that
case, we adjust the length in Impala to truncate the extra bytes of the
value. This isn’t a great solution, but one other integrations have taken
as well given Impala doesn’t support UTF-8 values.

IMPALA-5675 tracks adding UTF-8 Character length support to VARCHAR
columns and marked the truncation code with a TODO that references
that Jira.

Testing:
* Performed manual testing of standard DDL and DML interaction
* Manually reproduced a check failure due to multi-byte characters
  and tested that length truncation resolve that issue.
* Added/adjusted the following automated tests:
** AnalyzeDDLTest: CTAS into Kudu with varchar type
** AnalyzeKuduDDLTest: CREATE TABLE in Kudu with VARCHAR type
** kudu_create.test: Create table with VARCHAR column, key, hash
   partition, and range partition
** kudu_describe.test: Describe table with VARCHAR column and key
** kudu_insert.test: Insert with VARCHAR columns including null and
   non-null defaults
** kudu_update.test: Updates with VARCHAR column
** kudu_upsert.test: Upserts with VARCHAR column
** kudu_delete.test Deletes with VARCHAR columns
** kudu-scan-node.test Tests basic predicates with VARCHAR columns

Follow on work:
- IMPALA-9580: Add min-max runtime filter support/tests
- IMPALA-9581: Pushdown string predicates
- IMPALA-9583: Automated multibyte truncation tests

Change-Id: I0d4959410fdd882bfa980cb55e8a7837c7823da8
Reviewed-on: http://gerrit.cloudera.org:8080/14197
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Thomas Tauber-Marshall <tmarshall@cloudera.com>
2020-04-01 15:48:36 +00:00

413 lines
17 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
====