mirror of
https://github.com/apache/impala.git
synced 2026-01-10 09:00:16 -05:00
I used some ideas from Alex Leblang's abandoned patch: https://gerrit.cloudera.org/#/c/137/ in order to run .test files through HS2. The advantage of using Impyla is that much of the code will be reusable for any Python client implementing the standard Python dbapi and does not require us implementing yet another thrift client. This gives us better coverage of non-trivial result sets from HS2, including handling of NULLs, error logs and more interesting result sets than the basic HS2 tests. I added HS2 coverage to TestQueries, which has a reasonable variety of queries and covers the data types in alltypes. I also added TestDecimalQueries, TestStringQuery and TestCharFormats to get coverage of DECIMAL, CHAR and VARCHAR that aren't in alltypes. Coverage of results sets with NULLs was limited so I added a couple of queries. Places where results differ from Beeswax: * Impyla is a Python dbapi client so must convert timestamps into python datetime objects, which only have microsecond precision. Therefore result timestamps within nanosecond precision are truncated. * The HS2 interface reports the NULL type as BOOLEAN as a workaround for IMPALA-914. * The Beeswax interface reported VARCHAR as STRING, but HS2 reports VARCHAR. I dealt with different results by adding additional result sections so that the expected differences between the clients/protocols were explicit. Limitations: * Not all of the same methods are implemented as for beeswax, so some tests that have more complicated interactions with the client will not work with HS2 yet. * We don't have a way to get the affected row count for inserts. I also simplified the ImpalaConnection API by removing some unnecessary methods and moved some generic methods to the base class. Testing: * Confirmed that it detected IMPALA-7588 by re-applying the buggy patch. * Ran exhaustive and CentOS6 tests. Change-Id: I9908ccc4d3df50365be8043b883cacafca52661e Reviewed-on: http://gerrit.cloudera.org:8080/11546 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
200 lines
5.8 KiB
Plaintext
200 lines
5.8 KiB
Plaintext
====
|
|
---- QUERY
|
|
select (cast("xyzzzzz12" as char(-1)))
|
|
---- CATCH
|
|
Syntax error
|
|
====
|
|
---- QUERY
|
|
select count(*), count(cs), count(cl), count(vc) from chars_tiny
|
|
---- TYPES
|
|
bigint,bigint,bigint,bigint
|
|
---- RESULTS
|
|
9,8,8,8
|
|
====
|
|
---- QUERY
|
|
select * from chars_tiny where cs = cast('6a' as CHAR(2))
|
|
---- TYPES
|
|
char,char,string
|
|
---- HS2_TYPES
|
|
char,char,varchar
|
|
---- RESULTS
|
|
'6a ','6b ','6c'
|
|
'6a ','6b ','6c'
|
|
====
|
|
---- QUERY
|
|
select count(*) from chars_tiny where vc != cast('5c' as varchar(3))
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
7
|
|
====
|
|
---- QUERY
|
|
select count(*) from chars_tiny where cs != cast('a' as char(3))
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
7
|
|
====
|
|
---- QUERY
|
|
select count(DISTINCT cs) from chars_tiny where vc = cast('5c' as varchar(10))
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
1
|
|
====
|
|
---- QUERY
|
|
select count(DISTINCT cs) from chars_tiny where cs = cast('5a' as char(10))
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
1
|
|
====
|
|
---- QUERY
|
|
select cs, count(cl) from chars_tiny group by cs having count(vc) > 1
|
|
---- TYPES
|
|
char, bigint
|
|
---- RESULTS
|
|
'6a ',2
|
|
====
|
|
---- QUERY
|
|
select A.cs from chars_tiny as A, chars_tiny as B where
|
|
cast(A.cs as char(1)) = cast(B.cl as char(1)) order by A.cs
|
|
---- TYPES
|
|
char
|
|
---- RESULTS
|
|
'1aaaa'
|
|
'2aaaa'
|
|
'3aaa '
|
|
'4aa '
|
|
'5a '
|
|
'6a '
|
|
'6a '
|
|
'6a '
|
|
'6a '
|
|
====
|
|
---- QUERY
|
|
# Regression test for IMPALA-1316
|
|
select A.vc from chars_tiny as A join chars_tiny using (vc) order by A.vc
|
|
---- TYPES
|
|
string
|
|
---- HS2_TYPES
|
|
varchar
|
|
---- RESULTS
|
|
'1cccc'
|
|
'2cccccc'
|
|
'3ccc'
|
|
'4cc'
|
|
'5c'
|
|
'6c'
|
|
'6c'
|
|
'6c'
|
|
'6c'
|
|
'c'
|
|
====
|
|
---- QUERY
|
|
# Regression test for IMPALA-1322
|
|
select count(*) from chars_tiny as A, chars_tiny as B
|
|
where cast(A.cs as CHAR(1)) = cast(B.vc as CHAR(1));
|
|
---- TYPES
|
|
bigint
|
|
---- RESULTS
|
|
9
|
|
====
|
|
---- QUERY
|
|
select min(cs), max(vc), ndv(cl), ndv(vc), appx_median(cs), appx_median(vc)
|
|
from chars_tiny
|
|
---- TYPES
|
|
string, string, bigint, bigint, string, string
|
|
---- RESULTS
|
|
'1aaaa','c',7,7,'5a ','5c'
|
|
====
|
|
---- QUERY
|
|
# Regression test for IMPALA-1316
|
|
select t1.vc, COUNT(1) FROM chars_tiny t1 GROUP BY 1 ORDER BY t1.vc
|
|
---- TYPES
|
|
string, bigint
|
|
---- HS2_TYPES
|
|
varchar, bigint
|
|
---- RESULTS
|
|
'1cccc',1
|
|
'2cccccc',1
|
|
'3ccc',1
|
|
'4cc',1
|
|
'5c',1
|
|
'6c',2
|
|
'c',1
|
|
'NULL',1
|
|
====
|
|
---- QUERY
|
|
# Regression test for IMPALA-1316
|
|
select t1.cl, COUNT(1) FROM chars_tiny t1 GROUP BY 1 ORDER BY t1.cl
|
|
---- TYPES
|
|
char, bigint
|
|
---- RESULTS
|
|
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',1
|
|
'2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',1
|
|
'3bbbbb ',1
|
|
'4bbbb ',1
|
|
'5bbb ',1
|
|
'6b ',2
|
|
'b ',1
|
|
'NULL',1
|
|
====
|
|
---- QUERY
|
|
# Regression test for IMPALA-1344
|
|
select cs, LAST_VALUE(cs) OVER (ORDER BY cs rows between unbounded preceding and
|
|
current row) FROM chars_tiny;
|
|
---- TYPES
|
|
char, string
|
|
---- RESULTS
|
|
'1aaaa','1aaaa'
|
|
'2aaaa','2aaaa'
|
|
'3aaa ','3aaa '
|
|
'4aa ','4aa '
|
|
'5a ','5a '
|
|
'6a ','6a '
|
|
'6a ','6a '
|
|
'a ','a '
|
|
'NULL','NULL'
|
|
====
|
|
---- QUERY
|
|
# Test returning mix of nulls and non-nulls.
|
|
WITH numbered AS (
|
|
SELECT *, row_number() over (order by cs) as rn
|
|
FROM chars_tiny)
|
|
SELECT *
|
|
FROM (
|
|
SELECT CASE WHEN rn % 2 = 0 THEN cs END cs,
|
|
CASE WHEN rn % 2 = 1 THEN cl END cl,
|
|
CASE WHEN rn % 3 = 0 THEN vc END vc
|
|
FROM numbered
|
|
UNION ALL
|
|
SELECT CASE WHEN rn % 2 = 1 THEN cs END cs,
|
|
CASE WHEN rn % 2 = 0 THEN cl END cl,
|
|
CASE WHEN rn % 3 = 1 THEN vc END vc
|
|
FROM numbered) v
|
|
---- TYPES
|
|
char, char, string
|
|
---- HS2_TYPES
|
|
char, char, varchar
|
|
---- RESULTS
|
|
'NULL','1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','NULL'
|
|
'2aaaa','NULL','NULL'
|
|
'NULL','3bbbbb ','3ccc'
|
|
'4aa ','NULL','NULL'
|
|
'NULL','5bbb ','NULL'
|
|
'6a ','NULL','6c'
|
|
'NULL','6b ','NULL'
|
|
'a ','NULL','NULL'
|
|
'NULL','NULL','NULL'
|
|
'1aaaa','NULL','1cccc'
|
|
'NULL','2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','NULL'
|
|
'3aaa ','NULL','NULL'
|
|
'NULL','4bbbb ','4cc'
|
|
'5a ','NULL','NULL'
|
|
'NULL','6b ','NULL'
|
|
'6a ','NULL','6c'
|
|
'NULL','b ','NULL'
|
|
'NULL','NULL','NULL'
|
|
====
|