TDengine/tests/system-test/2-query/twa.py

192 lines
8.5 KiB
Python
Raw Normal View History

2022-06-21 06:04:03 +00:00
from util.log import *
from util.cases import *
from util.sql import *
import numpy as np
import random ,os ,sys
import platform
import math
class TDTestCase:
2022-08-19 09:46:24 +00:00
updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 }
2022-06-21 06:04:03 +00:00
def init(self, conn, logSql, replicaVar=1):
self.replicaVar = int(replicaVar)
2022-06-21 06:04:03 +00:00
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor())
self.vnode_disbutes = None
self.ts = 1537146000000
self.tb_nums = 20
self.row_nums = 100
self.time_step = 1000
2022-08-19 09:46:24 +00:00
def prepare_datas_of_distribute(self, dbname="testdb"):
2022-07-20 06:07:52 +00:00
2022-06-21 06:04:03 +00:00
# prepate datas for 20 tables distributed at different vgroups
2022-08-19 09:46:24 +00:00
tdSql.execute(f"create database if not exists {dbname} keep 3650 duration 1000 vgroups 5")
2022-06-21 06:04:03 +00:00
tdSql.execute(
2022-08-19 09:46:24 +00:00
f'''create table {dbname}.stb1
2022-10-26 03:11:53 +00:00
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp,c11 int UNSIGNED, c12 bigint UNSIGNED, c13 smallint UNSIGNED, c14 tinyint UNSIGNED)
2022-06-21 06:04:03 +00:00
tags (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
'''
)
2022-07-20 06:07:52 +00:00
2022-06-21 06:04:03 +00:00
for i in range(self.tb_nums):
2022-08-19 09:46:24 +00:00
tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( now(), {1*i}, {11111*i}, {111*i}, {1*i}, {1.11*i}, {11.11*i}, {i%2}, "binary{i}", "nchar{i}" )')
2022-06-21 06:04:03 +00:00
ts = self.ts
for j in range(self.row_nums):
2022-07-20 06:07:52 +00:00
ts+=j*self.time_step
2022-06-21 06:04:03 +00:00
tdSql.execute(
2022-10-26 03:11:53 +00:00
f"insert into {dbname}.ct{i+1} values({ts}, 1, 11111, 111, 1, 1.11, 11.11, 2, 'binary{j}', 'nchar{j}', now()+{1*j}a, 1, 11111, 111, 1 )"
2022-06-21 06:04:03 +00:00
)
2022-07-20 06:07:52 +00:00
2022-10-26 03:11:53 +00:00
tdSql.execute(f"insert into {dbname}.ct1 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
tdSql.execute(f"insert into {dbname}.ct1 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
tdSql.execute(f"insert into {dbname}.ct1 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL ) ")
2022-06-21 06:04:03 +00:00
tdLog.info(" prepare data for distributed_aggregate done! ")
2022-08-19 09:46:24 +00:00
def twa_support_types(self, dbname="testdb"):
tdSql.query(f"desc {dbname}.stb1 ")
2022-06-21 06:39:20 +00:00
schema_list = tdSql.queryResult
for col_type in schema_list:
2022-10-26 03:11:53 +00:00
if col_type[1] in ["TINYINT" ,"SMALLINT","BIGINT" ,"INT","FLOAT","DOUBLE","TINYINT UNSIGNED" ,"SMALLINT UNSIGNED","BIGINT UNSIGNED" ,"INT UNSIGNED"]:
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa({col_type[0]}) from {dbname}.stb1 partition by tbname ")
2022-06-21 06:39:20 +00:00
else:
2022-08-19 09:46:24 +00:00
tdSql.error(f"select twa({col_type[0]}) from {dbname}.stb1 partition by tbname ")
2022-06-21 06:39:20 +00:00
2022-08-19 09:46:24 +00:00
def check_distribute_datas(self, dbname="testdb"):
2022-06-21 06:04:03 +00:00
# get vgroup_ids of all
2022-08-19 09:46:24 +00:00
tdSql.query(f"show {dbname}.vgroups ")
2022-06-21 06:04:03 +00:00
vgroups = tdSql.queryResult
vnode_tables={}
2022-07-20 06:07:52 +00:00
2022-06-21 06:04:03 +00:00
for vgroup_id in vgroups:
vnode_tables[vgroup_id[0]]=[]
# check sub_table of per vnode ,make sure sub_table has been distributed
2022-08-19 09:46:24 +00:00
tdSql.query(f"select * from information_schema.ins_tables where db_name = '{dbname}' and table_name like 'ct%'")
2022-06-21 06:04:03 +00:00
table_names = tdSql.queryResult
tablenames = []
for table_name in table_names:
2022-07-20 06:07:52 +00:00
vnode_tables[table_name[6]].append(table_name[0])
2022-06-21 06:04:03 +00:00
self.vnode_disbutes = vnode_tables
count = 0
for k ,v in vnode_tables.items():
if len(v)>=2:
count+=1
if count < 2:
tdLog.exit(" the datas of all not satisfy sub_table has been distributed ")
2022-08-19 09:46:24 +00:00
def distribute_twa_query(self, dbname="testdb"):
2022-06-21 06:04:03 +00:00
# basic filter
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c1) from {dbname}.ct1 ")
2022-06-21 06:04:03 +00:00
tdSql.checkData(0,0,1.000000000)
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c1) from {dbname}.stb1 partition by tbname ")
2022-06-21 06:04:03 +00:00
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,1.000000000)
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c2) from {dbname}.stb1 group by tbname ")
2022-06-21 06:04:03 +00:00
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,11111.000000000)
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c1+c2) from {dbname}.stb1 partition by tbname ")
2022-06-21 06:04:03 +00:00
tdSql.checkData(0,0,11112.000000000)
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c1) from {dbname}.stb1 partition by t1")
2022-06-21 06:04:03 +00:00
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,1.000000000)
2022-10-26 03:11:53 +00:00
tdSql.query(f"select twa(c11) from {dbname}.ct1 ")
tdSql.checkData(0,0,1.000000000)
tdSql.query(f"select twa(c11) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,1.000000000)
tdSql.query(f"select twa(c12) from {dbname}.stb1 group by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,11111.000000000)
tdSql.query(f"select twa(c11+c12) from {dbname}.stb1 partition by tbname ")
tdSql.checkData(0,0,11112.000000000)
tdSql.query(f"select twa(c11) from {dbname}.stb1 partition by t1")
tdSql.checkRows(self.tb_nums)
tdSql.checkData(0,0,1.000000000)
tdSql.query(f"select twa(c13) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.query(f"select twa(c13) from {dbname}.stb1 group by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.query(f"select twa(c14) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(self.tb_nums)
tdSql.query(f"select twa(c14) from {dbname}.stb1 group by tbname ")
tdSql.checkRows(self.tb_nums)
2022-06-21 06:04:03 +00:00
2022-07-20 06:07:52 +00:00
# union all
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(c1) from {dbname}.stb1 partition by tbname union all select twa(c1) from {dbname}.stb1 partition by tbname ")
2022-06-21 06:04:03 +00:00
tdSql.checkRows(40)
tdSql.checkData(0,0,1.000000000)
2022-10-26 03:11:53 +00:00
tdSql.query(f"select twa(c11) from {dbname}.stb1 partition by tbname union all select twa(c11) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.checkData(0,0,1.000000000)
tdSql.query(f"select twa(c2) from {dbname}.stb1 partition by tbname union all select twa(c2) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.query(f"select twa(c3) from {dbname}.stb1 partition by tbname union all select twa(c3) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.query(f"select twa(c4) from {dbname}.stb1 partition by tbname union all select twa(c4) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.query(f"select twa(c12) from {dbname}.stb1 partition by tbname union all select twa(c12) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.query(f"select twa(c13) from {dbname}.stb1 partition by tbname union all select twa(c13) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
tdSql.query(f"select twa(c14) from {dbname}.stb1 partition by tbname union all select twa(c14) from {dbname}.stb1 partition by tbname ")
tdSql.checkRows(40)
2022-06-21 06:04:03 +00:00
2022-07-20 06:07:52 +00:00
# join
2022-06-21 06:04:03 +00:00
tdSql.execute(" create database if not exists db ")
tdSql.execute(" use db ")
2022-08-19 09:46:24 +00:00
tdSql.execute(" create stable db.st (ts timestamp , c1 int ,c2 float) tags(t1 int) ")
tdSql.execute(" create table db.tb1 using db.st tags(1) ")
tdSql.execute(" create table db.tb2 using db.st tags(2) ")
2022-06-21 06:04:03 +00:00
2022-07-20 06:07:52 +00:00
2022-06-21 06:04:03 +00:00
for i in range(10):
ts = i*10 + self.ts
2022-08-19 09:46:24 +00:00
tdSql.execute(f" insert into db.tb1 values({ts},{i},{i}.0)")
tdSql.execute(f" insert into db.tb2 values({ts},{i},{i}.0)")
2022-06-21 06:04:03 +00:00
2022-08-19 09:46:24 +00:00
tdSql.query(f"select twa(tb1.c1), twa(tb2.c2) from db.tb1 tb1, db.tb2 tb2 where tb1.ts=tb2.ts ")
2022-06-21 06:04:03 +00:00
tdSql.checkRows(1)
tdSql.checkData(0,0,4.500000000)
tdSql.checkData(0,1,4.500000000)
2022-10-26 03:11:53 +00:00
2022-06-21 06:04:03 +00:00
# mixup with other functions
2022-09-13 10:32:17 +00:00
tdSql.query(f"select twa(c1),twa(c2),max(c1),elapsed(ts) from {dbname}.ct1 ")
2022-06-21 06:04:03 +00:00
tdSql.checkData(0,0,1.000000000)
tdSql.checkData(0,1,11111.000000000)
tdSql.checkData(0,2,1)
def run(self):
self.prepare_datas_of_distribute()
self.check_distribute_datas()
2022-06-21 06:39:20 +00:00
self.twa_support_types()
2022-06-21 06:04:03 +00:00
self.distribute_twa_query()
2022-07-20 06:07:52 +00:00
2022-06-21 06:04:03 +00:00
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())