From 3267a0fe9f38dd78f0b3704ea426a4c6945a458d Mon Sep 17 00:00:00 2001 From: jiacy-jcy Date: Fri, 27 May 2022 18:14:57 +0800 Subject: [PATCH 1/4] add case for percentile --- tests/system-test/2-query/bottom.py | 4 + tests/system-test/2-query/percentile.py | 150 ++---------------------- tests/system-test/2-query/top.py | 7 +- 3 files changed, 18 insertions(+), 143 deletions(-) diff --git a/tests/system-test/2-query/bottom.py b/tests/system-test/2-query/bottom.py index 96ae73c6c4..a4390372df 100644 --- a/tests/system-test/2-query/bottom.py +++ b/tests/system-test/2-query/bottom.py @@ -80,6 +80,9 @@ class TDTestCase: tdSql.checkRows(2) tdSql.checkEqual(tdSql.queryResult,[(2,),(1,)]) + tdSql.query("select bottom(col13,50) from test") + tdSql.checkRows(10) + tdSql.query("select bottom(col14, 2) from test") tdSql.checkRows(2) tdSql.checkEqual(tdSql.queryResult,[(2,),(1,)]) @@ -91,6 +94,7 @@ class TDTestCase: tdSql.query('select bottom(col2,1) from test interval(1y) order by col2') tdSql.checkData(0,0,1) + tdSql.error('select * from test where bottom(col2,1)=1') diff --git a/tests/system-test/2-query/percentile.py b/tests/system-test/2-query/percentile.py index 2122197ad2..958d47eb60 100644 --- a/tests/system-test/2-query/percentile.py +++ b/tests/system-test/2-query/percentile.py @@ -11,6 +11,7 @@ # -*- coding: utf-8 -*- +from platform import java_ver from util.log import * from util.cases import * from util.sql import * @@ -41,146 +42,16 @@ class TDTestCase: # percentile verifacation tdSql.error("select percentile(ts ,20) from test") - tdSql.error("select apercentile(ts ,20) from test") tdSql.error("select percentile(col7 ,20) from test") - tdSql.error("select apercentile(col7 ,20) from test") tdSql.error("select percentile(col8 ,20) from test") - tdSql.error("select apercentile(col8 ,20) from test") - tdSql.error("select percentile(col9 ,20) from test") - tdSql.error("select apercentile(col9 ,20) from test") + tdSql.error("select percentile(col9 ,20) from test") + table_list = [1,2,3,4,11,12,13,14] + percent_list = [0,50,100] + for i in table_list: + for j in percent_list: + tdSql.query(f"select percentile(col{i}, {j}) from test") + tdSql.checkData(0, 0, np.percentile(intData, j)) - tdSql.query("select percentile(col1, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col1, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col1, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col1, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col1, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col1, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col2, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col2, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col2, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col2, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col2, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col2, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col3, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col3, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col3, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col3, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col3, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col3, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col4, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col4, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col4, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col4, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col4, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col4, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col11, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col11, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col11, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col11, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col11, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col11, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col12, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col12, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col12, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col12, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col12, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col12, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col13, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col13, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col13, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col13, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col13, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col13, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col14, 0) from test") - tdSql.checkData(0, 0, np.percentile(intData, 0)) - tdSql.query("select apercentile(col14, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col14, 50) from test") - tdSql.checkData(0, 0, np.percentile(intData, 50)) - tdSql.query("select apercentile(col14, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col14, 100) from test") - tdSql.checkData(0, 0, np.percentile(intData, 100)) - tdSql.query("select apercentile(col14, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col5, 0) from test") - print("query result: %s" % tdSql.getData(0, 0)) - print("array result: %s" % np.percentile(floatData, 0)) - tdSql.query("select apercentile(col5, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col5, 50) from test") - print("query result: %s" % tdSql.getData(0, 0)) - print("array result: %s" % np.percentile(floatData, 50)) - tdSql.query("select apercentile(col5, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col5, 100) from test") - print("query result: %s" % tdSql.getData(0, 0)) - print("array result: %s" % np.percentile(floatData, 100)) - tdSql.query("select apercentile(col5, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - - tdSql.query("select percentile(col6, 0) from test") - tdSql.checkData(0, 0, np.percentile(floatData, 0)) - tdSql.query("select apercentile(col6, 0) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col6, 50) from test") - tdSql.checkData(0, 0, np.percentile(floatData, 50)) - tdSql.query("select apercentile(col6, 50) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) - tdSql.query("select percentile(col6, 100) from test") - tdSql.checkData(0, 0, np.percentile(floatData, 100)) - tdSql.query("select apercentile(col6, 100) from test") - print("apercentile result: %s" % tdSql.getData(0, 0)) tdSql.execute("create table meters (ts timestamp, voltage int) tags(loc nchar(20))") tdSql.execute("create table t0 using meters tags('beijing')") @@ -189,9 +60,8 @@ class TDTestCase: tdSql.execute("insert into t0 values(%d, %d)" % (self.ts + i, i + 1)) tdSql.execute("insert into t1 values(%d, %d)" % (self.ts + i, i + 1)) - tdSql.error("select percentile(voltage, 20) from meters") - tdSql.query("select apercentile(voltage, 20) from meters") - print("apercentile result: %s" % tdSql.getData(0, 0)) + # tdSql.error("select percentile(voltage, 20) from meters") + tdSql.execute("create table st(ts timestamp, k int)") diff --git a/tests/system-test/2-query/top.py b/tests/system-test/2-query/top.py index 12e81fa190..fbbbb2c99a 100644 --- a/tests/system-test/2-query/top.py +++ b/tests/system-test/2-query/top.py @@ -89,14 +89,15 @@ class TDTestCase: tdSql.checkEqual(tdSql.queryResult,[(9,),(10,)]) tdSql.query("select ts,top(col1, 2),ts from test1") tdSql.checkRows(2) - + tdSql.query("select top(col14, 100) from test") + tdSql.checkRows(10) tdSql.query("select ts,top(col1, 2),ts from test group by tbname") tdSql.checkRows(2) tdSql.query('select top(col2,1) from test interval(1y) order by col2') tdSql.checkData(0,0,10) - tdSql.error('select * from test where bottom(col2,1)=1') - + tdSql.error("select * from test where bottom(col2,1)=1") + tdSql.error("select top(col14, 0) from test;") def stop(self): tdSql.close() tdLog.success("%s successfully executed" % __file__) From 842551af7ee7d8e1baa5b92d96ac930153c2bcab Mon Sep 17 00:00:00 2001 From: jiacy-jcy Date: Fri, 27 May 2022 20:31:10 +0800 Subject: [PATCH 2/4] update percentile.py --- tests/system-test/2-query/percentile.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/system-test/2-query/percentile.py b/tests/system-test/2-query/percentile.py index 958d47eb60..8df9bcb9ce 100644 --- a/tests/system-test/2-query/percentile.py +++ b/tests/system-test/2-query/percentile.py @@ -45,14 +45,18 @@ class TDTestCase: tdSql.error("select percentile(col7 ,20) from test") tdSql.error("select percentile(col8 ,20) from test") tdSql.error("select percentile(col9 ,20) from test") - table_list = [1,2,3,4,11,12,13,14] + column_list = [1,2,3,4,11,12,13,14] percent_list = [0,50,100] - for i in table_list: + for i in column_list: for j in percent_list: tdSql.query(f"select percentile(col{i}, {j}) from test") tdSql.checkData(0, 0, np.percentile(intData, j)) - + for i in [5,6]: + for j in percent_list: + tdSql.query(f"select percentile(col{i}, {j}) from test") + tdSql.checkData(0, 0, np.percentile(floatData, j)) + tdSql.execute("create table meters (ts timestamp, voltage int) tags(loc nchar(20))") tdSql.execute("create table t0 using meters tags('beijing')") tdSql.execute("create table t1 using meters tags('shanghai')") From 9b546a3bdf33da1147a976f7807a362d4f115482 Mon Sep 17 00:00:00 2001 From: jiacy-jcy Date: Sat, 28 May 2022 09:52:05 +0800 Subject: [PATCH 3/4] add case for apercentile --- tests/system-test/2-query/apercentile.py | 99 ++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 tests/system-test/2-query/apercentile.py diff --git a/tests/system-test/2-query/apercentile.py b/tests/system-test/2-query/apercentile.py new file mode 100644 index 0000000000..699cf42150 --- /dev/null +++ b/tests/system-test/2-query/apercentile.py @@ -0,0 +1,99 @@ +################################################################### +# Copyright (c) 2016 by TAOS Technologies, Inc. +# All rights reserved. +# +# This file is proprietary and confidential to TAOS Technologies. +# No part of this file may be reproduced, stored, transmitted, +# disclosed or used in any form or by any means other than as +# expressly provided by the written permission from Jianhui Tao +# +################################################################### + +# -*- coding: utf-8 -*- + +from util.log import * +from util.cases import * +from util.sql import * +import numpy as np + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor()) + + self.rowNum = 10 + self.ts = 1537146000000 + + def check_apercentile(self,data,expect_data,param,percent): + if param == "default": + if abs((expect_data-data) <= expect_data * 0.2): + tdLog.info(f"apercentile function values check success with param={param},percent={percent}") + else: + tdLog.notice(f"apercentile function value has not as expected with param={param},percent={percent}") + sys.exit(1) + + elif param == "t-digest": + if abs((expect_data-data) <= expect_data * 0.2): + tdLog.info(f"apercentile function values check success with param={param},percent={percent}") + else: + tdLog.notice(f"apercentile function value has not as expected with param={param},percent={percent}") + sys.exit(1) + + def run(self): + tdSql.prepare() + + intData = [] + floatData = [] + + tdSql.execute('''create table test(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 float, col6 double, + col7 bool, col8 binary(20), col9 nchar(20), col11 tinyint unsigned, col12 smallint unsigned, col13 int unsigned, col14 bigint unsigned)''') + for i in range(self.rowNum): + tdSql.execute("insert into test values(%d, %d, %d, %d, %d, %f, %f, %d, 'taosdata%d', '涛思数据%d', %d, %d, %d, %d)" + % (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1)) + intData.append(i + 1) + floatData.append(i + 0.1) + + # percentile verifacation + + tdSql.error("select apercentile(ts ,20) from test") + tdSql.error("select apercentile(col7 ,20) from test") + tdSql.error("select apercentile(col8 ,20) from test") + tdSql.error("select apercentile(col9 ,20) from test") + + column_list = [1,2,3,4,5,6,11,12,13,14] + percent_list = [0,50,100] + param_list = ['default','t-digest'] + for i in column_list: + for j in percent_list: + for k in param_list: + tdSql.query(f"select apercentile(col{i},{j},'{k}') from test") + data = tdSql.getData(0, 0) + tdSql.query(f"select percentile(col{i},{j}) from test") + expect_data = tdSql.getData(0, 0) + self.check_apercentile(data,expect_data,k) + + tdSql.execute("create table meters (ts timestamp, voltage int) tags(loc nchar(20))") + tdSql.execute("create table t0 using meters tags('beijing')") + tdSql.execute("create table t1 using meters tags('shanghai')") + for i in range(self.rowNum): + tdSql.execute("insert into t0 values(%d, %d)" % (self.ts + i, i + 1)) + tdSql.execute("insert into t1 values(%d, %d)" % (self.ts + i, i + 1)) + + tdSql.query("select apercentile(voltage, 20) from meters") + print("apercentile result: %s" % tdSql.getData(0, 0)) + + + tdSql.execute("create table st(ts timestamp, k int)") + tdSql.execute("insert into st values(now, -100)(now+1a,-99)") + tdSql.query("select apercentile(k, 20) from st") + tdSql.checkData(0, 0, -100.00) + + + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From 72ad2fe8a348204247e81e5c980ae14af9527292 Mon Sep 17 00:00:00 2001 From: jiacy-jcy Date: Mon, 30 May 2022 10:38:10 +0800 Subject: [PATCH 4/4] update apercentile.py --- tests/system-test/2-query/apercentile.py | 50 ++++++++++++++---------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/tests/system-test/2-query/apercentile.py b/tests/system-test/2-query/apercentile.py index 699cf42150..150c4d3f17 100644 --- a/tests/system-test/2-query/apercentile.py +++ b/tests/system-test/2-query/apercentile.py @@ -21,23 +21,21 @@ class TDTestCase: def init(self, conn, logSql): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) - self.rowNum = 10 self.ts = 1537146000000 - def check_apercentile(self,data,expect_data,param,percent): + def check_apercentile(self,data,expect_data,param,percent,column): if param == "default": if abs((expect_data-data) <= expect_data * 0.2): - tdLog.info(f"apercentile function values check success with param={param},percent={percent}") + tdLog.info(f"apercentile function values check success with col{column}, param = {param},percent = {percent}") else: - tdLog.notice(f"apercentile function value has not as expected with param={param},percent={percent}") + tdLog.notice(f"apercentile function value has not as expected with col{column}, param = {param},percent = {percent}") sys.exit(1) - elif param == "t-digest": if abs((expect_data-data) <= expect_data * 0.2): - tdLog.info(f"apercentile function values check success with param={param},percent={percent}") + tdLog.info(f"apercentile function values check success with col{column}, param = {param},percent = {percent}") else: - tdLog.notice(f"apercentile function value has not as expected with param={param},percent={percent}") + tdLog.notice(f"apercentile function value has not as expected with col{column}, param = {param},percent = {percent}") sys.exit(1) def run(self): @@ -45,7 +43,8 @@ class TDTestCase: intData = [] floatData = [] - + percent_list = [0,50,100] + param_list = ['default','t-digest'] tdSql.execute('''create table test(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 float, col6 double, col7 bool, col8 binary(20), col9 nchar(20), col11 tinyint unsigned, col12 smallint unsigned, col13 int unsigned, col14 bigint unsigned)''') for i in range(self.rowNum): @@ -62,8 +61,7 @@ class TDTestCase: tdSql.error("select apercentile(col9 ,20) from test") column_list = [1,2,3,4,5,6,11,12,13,14] - percent_list = [0,50,100] - param_list = ['default','t-digest'] + for i in column_list: for j in percent_list: for k in param_list: @@ -71,7 +69,11 @@ class TDTestCase: data = tdSql.getData(0, 0) tdSql.query(f"select percentile(col{i},{j}) from test") expect_data = tdSql.getData(0, 0) - self.check_apercentile(data,expect_data,k) + self.check_apercentile(data,expect_data,k,j,i) + + error_param_list = [-1,101,'"a"'] + for i in error_param_list: + tdSql.error(f'select apercentile(col1,{i}) from test') tdSql.execute("create table meters (ts timestamp, voltage int) tags(loc nchar(20))") tdSql.execute("create table t0 using meters tags('beijing')") @@ -80,17 +82,23 @@ class TDTestCase: tdSql.execute("insert into t0 values(%d, %d)" % (self.ts + i, i + 1)) tdSql.execute("insert into t1 values(%d, %d)" % (self.ts + i, i + 1)) - tdSql.query("select apercentile(voltage, 20) from meters") - print("apercentile result: %s" % tdSql.getData(0, 0)) - + column_list = ['voltage'] + for i in column_list: + for j in percent_list: + for k in param_list: + tdSql.query(f"select apercentile({i}, {j},'{k}') from t0") + data = tdSql.getData(0, 0) + tdSql.query(f"select percentile({i},{j}) from t0") + expect_data = tdSql.getData(0,0) + self.check_apercentile(data,expect_data,k,j,i) + tdSql.query(f"select apercentile({i}, {j},'{k}') from meters") + tdSql.checkRows(1) + table_list = ["meters","t0"] + for i in error_param_list: + for j in table_list: + for k in column_list: + tdSql.error(f'select apercentile({k},{i}) from {j}') - tdSql.execute("create table st(ts timestamp, k int)") - tdSql.execute("insert into st values(now, -100)(now+1a,-99)") - tdSql.query("select apercentile(k, 20) from st") - tdSql.checkData(0, 0, -100.00) - - - def stop(self): tdSql.close() tdLog.success("%s successfully executed" % __file__)