| #!/bin/env python |
| # -*- coding: utf-8 -*- |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| ############################################################################ |
| # |
| # @file test_sys_hll_basic.py |
| # @date 2017-04-10 15:02:22 |
| # @brief This file is a test file for palo small load in complex scenarios. |
| # |
| ############################################################################# |
| |
| """ |
| 测试hll data type |
| """ |
| |
| import os |
| import sys |
| import time |
| import pytest |
| |
| from data import small_load_complex as DATA |
| from data import schema as SCHEMA |
| sys.path.append("../") |
| from lib import palo_config |
| from lib import palo_client |
| from lib import util |
| from lib import common |
| |
| client = None |
| |
| config = palo_config.config |
| hdfs = palo_config.gen_remote_file_path("/qe/baseall.txt") |
| rollup_column_name_list = DATA.rollup_column_name_list |
| CLUSTER = 'default_cluster' |
| ERROR = 100 |
| broker_info = palo_config.broker_info |
| |
| |
| def setup_module(): |
| """ |
| setUp |
| """ |
| global client |
| client = palo_client.get_client(config.fe_host, config.fe_query_port, user=config.fe_user, |
| password=config.fe_password, http_port=config.fe_http_port) |
| ret = client.execute('drop database if exists test_hll_simple') |
| retry_times = 10 |
| while retry_times > 0: |
| try: |
| client.create_database('test_hll_simple') |
| client.use('test_hll_simple') |
| break |
| except Exception as e: |
| print(str(e)) |
| if 'Try' in str(e): |
| retry_times -= 1 |
| time.sleep(10) |
| else: |
| break |
| |
| |
| def wait_end(database_name): |
| """ |
| wait to finished |
| """ |
| ret = True |
| retry_times = 200 |
| while ret and retry_times > 0: |
| job_list = client.get_unfinish_load_job_list(database_name) |
| if len(job_list) == 0: |
| ret = False |
| else: |
| time.sleep(3) |
| retry_times -= 1 |
| |
| |
| def execute(line): |
| """execute palo sql and return reuslt""" |
| print(line) |
| palo_result = client.execute(line) |
| print(palo_result) |
| return palo_result |
| |
| |
| def test_hll_bitmap_create_table(): |
| """ |
| { |
| "title": "test_sys_hll_bitmap_basic.test_hll_bitmap_create_table", |
| "describe": "hll create table sql, for issue 3768", |
| "tag": "system,p1,fuzz" |
| } |
| """ |
| sql = 'CREATE TABLE t (c_date date NOT NULL COMMENT "date", user_id bitmap NULL DEFAULT " " COMMENT "userid")' \ |
| 'ENGINE=OLAP DUPLICATE KEY(c_date) DISTRIBUTED BY HASH(c_date)' |
| msg = 'is not compatible with primitive type bitmap' |
| util.assert_return(False, msg, execute, sql) |
| sql = 'CREATE TABLE t (c_date date NOT NULL COMMENT "date", user_id hll NULL DEFAULT " " COMMENT "userid")' \ |
| 'ENGINE=OLAP DUPLICATE KEY(c_date) DISTRIBUTED BY HASH(c_date)' |
| msg = 'is not compatible with primitive type hll' |
| util.assert_return(False, msg, execute, sql) |
| sql = 'CREATE TABLE bitmaptable (TSID BIGINT NOT NULL, PKEY VARCHAR(96) NOT NULL, EDITFLAG BITMAP NULL)' \ |
| 'UNIQUE KEY(TSID,PKEY) DISTRIBUTED BY HASH(TSID) BUCKETS 10' |
| msg = 'is not compatible with primitive type bitmap' |
| util.assert_return(False, msg, execute, sql) |
| |
| |
| def compute_deviation(actual, computed): |
| """ |
| Args: |
| actual: 实际值 |
| computed: 计算值 |
| Returns: 误差 |
| """ |
| tmp = abs(actual - computed) |
| return tmp / float(actual) |
| |
| |
| hll_db = 'test_hll_simple' |
| |
| |
| def test_tinyint(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_tinyint", |
| "describe": "test intsert tinyint", |
| "tag": "system,p1" |
| } |
| """ |
| """test intsert tinyint""" |
| client.use(hll_db) |
| table_name = 'test_tinyint' |
| columns = [('id', 'tinyint'), ('hll_set', 'hll', 'hll_union')] |
| client.execute('drop table if exists %s' % table_name) |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k1, hll_hash(k1) from test_query_qa.test' % table_name |
| r = execute(line) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| |
| line = 'select count(distinct k1) from test_query_qa.test' |
| r2 = execute(line) |
| # check |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_smallint(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_smallint", |
| "describe": "test insert hll smallint", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll smallint""" |
| client.use(hll_db) |
| table_name = 'test_smallint' |
| columns = [('id', 'smallint'), ('hll_set', 'hll', 'hll_union')] |
| client.execute('drop table if exists %s' % table_name) |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k2, hll_hash(k2) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k2) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_int(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_int", |
| "describe": "test hll insert int", |
| "tag": "system,p1" |
| } |
| """ |
| """test hll insert int""" |
| table_name = 'test_int' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'int'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k3, hll_hash(k3) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k3) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_bigint(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_bigint", |
| "describe": "test insert hlll bigint", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hlll bigint""" |
| table_name = 'test_bigint' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'bigint'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k4, hll_hash(k4) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k4) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_decimal(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_decimal", |
| "describe": "test insert hll decimal", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll decimal""" |
| table_name = 'test_decimal' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'decimal(9, 3)'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k5, hll_hash(k5) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k5) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_char(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_char", |
| "describe": "test insesrt hll char", |
| "tag": "system,p1" |
| } |
| """ |
| """test insesrt hll char""" |
| table_name = 'test_char' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'char(11)'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k6, hll_hash(k6) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k6) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_varchar(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_varchar", |
| "describe": "test insert hll varchar", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll varchar""" |
| table_name = 'test_varchar' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'varchar(51)'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k7, hll_hash(k7) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k7) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_date(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_date", |
| "describe": "test insert hll date", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll date""" |
| table_name = 'test_date' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'date'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k10, hll_hash(k10) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k10) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_datetime(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_datetime", |
| "describe": "test insert hll datetime", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll datetime""" |
| table_name = 'test_datetime' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'datetime'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k11, hll_hash(k11) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(id), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k11) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_double(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_double", |
| "describe": "test insert hll double", |
| "tag": "system,p1" |
| } |
| """ |
| """test insert hll double""" |
| table_name = 'test_double' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'int'), ('id1', 'tinyint'), |
| ('c_double', 'double', 'sum'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k4, k1, k8, hll_hash(k8) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(c_double), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k8) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def test_float(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_float", |
| "describe": "test hll insert float", |
| "tag": "system,p1" |
| } |
| """ |
| """test hll insert float""" |
| table_name = 'test_float' |
| client.use(hll_db) |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'int'), ('id1', 'tinyint'), |
| ('c_float', 'float', 'sum'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select k4, k1, k9, hll_hash(k9) from test_query_qa.test' % table_name |
| execute(line) |
| wait_end(hll_db) |
| line = 'select ndv(c_float), hll_union_agg(hll_set) from %s' % table_name |
| r1 = execute(line) |
| retry_times = 60 |
| while int(r1[0][0]) == 0 and retry_times > 0: |
| time.sleep(1) |
| r1 = execute(line) |
| retry_times -= 1 |
| line = 'select count(distinct k9) from test_query_qa.test' |
| r2 = execute(line) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][1])) |
| print('actual count is : %s, computed is: %s, deviation is : %s\n' % (r2[0][0], r1[0][1], \ |
| deviation)) |
| deviation = compute_deviation(int(r2[0][0]), int(r1[0][0])) |
| print('actual count is %s, ndv is: %s, deviation is : %s \n' % (r2[0][0], r1[0][0], deviation)) |
| assert deviation < ERROR |
| client.execute('drop table %s' % table_name) |
| |
| |
| def checkwrong(sql): |
| """check sql execute error""" |
| try: |
| client.execute(sql) |
| assert 0 == 1, 'expect failed' |
| except Exception as e: |
| pass |
| |
| |
| def test_union_agg(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_union_agg", |
| "describe": "test union agg", |
| "tag": "system,p1,fuzz" |
| } |
| """ |
| """test union agg""" |
| table_name = 'test_union_agg_table' |
| init_union_agg(table_name) |
| union_agg_1(table_name) |
| union_agg_2(table_name) |
| union_agg_3(table_name) |
| union_agg_4(table_name) |
| |
| |
| def init_union_agg(table_name): |
| """init union agg""" |
| client.execute('drop table if exists %s' % table_name) |
| columns = [('id', 'int'), ('hll_set', 'hll', 'hll_union')] |
| assert client.create_table(table_name, columns) |
| line = 'insert into %s select 0, unhex(null) union select 1, unhex(null)' % table_name |
| checkwrong(line) |
| line = 'insert into %s select 0, hll_hash(null) union select 1, hll_hash(null)' % table_name |
| line = 'insert into %s select 0, hll_hash(null)' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 1, hll_hash(null)' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 2, hll_hash(null)' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 3, hll_hash(null)' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 4, hll_hash("")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 5, hll_hash("")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 6, hll_hash("")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 7, hll_hash("")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 8, hll_hash("118b7f")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 9, hll_hash("118b7f")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 10, hll_hash("118b7f")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 11, hll_hash("118b7f")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 12, hll_hash("128b7f1111111111111111")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 13, hll_hash("128b7f1111111111111111")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 14, hll_hash("128b7f2222222222222222")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 15, hll_hash("128b7f3333333333333333")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 16, hll_hash("138b7f0001")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 17, hll_hash("138b7f0022")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 18, hll_hash("138b7f0041")' % table_name |
| ret = client.execute(line) |
| line = 'insert into %s select 19, hll_hash("138b7f0061")' % table_name |
| ret = client.execute(line) |
| wait_end(client.database_name) |
| line = 'SELECT count(*) from %s' % table_name |
| ret = client.execute(line) |
| assert int(ret[0][0]) == 20 |
| |
| |
| def union_agg_1(table_name): |
| """select union_aggg_1""" |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id > 100;' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(8, 9, 10, 11);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(8, 9, 10, 11) OR id IN(0, 1, 2, 3)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(8, 9, 10, 11) OR id IN(4, 5, 6, 7)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(8, 9, 10, 11) OR \ |
| id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(0, 1, 2, 3)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(4, 5, 6, 7)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(4, 5, 6, 7) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(8, 9,10,11)'\ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(8, 9,10,11) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(8, 9,10,11) \ |
| OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(12, 13, 14, 15) OR id IN(8, 9,10,11) \ |
| OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| |
| |
| def union_agg_2(table_name): |
| """ |
| # Don't feel like a full sparse/explicit permuatation is adding |
| # anything here...just replace explicit w / sparse. |
| """ |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(0, 1, 2, 3)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(4, 5, 6, 7)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(4, 5, 6, 7) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(8, 9,10,11)' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(8, 9, 10, 11) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(8, 9, 10, 11) \ |
| OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s WHERE id IN(16, 17, 18, 19) OR id IN(8, 9, 10, 11) \ |
| OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| #-- ---------------------------------------------------------------- |
| #-- Aggregate Cardinality |
| #-- ---------------------------------------------------------------- |
| |
| # No rows selected |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id > 100;' % table_name |
| r = execute(line) |
| |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(4, 5, 6, 7) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| |
| |
| def union_agg_3(table_name): |
| """test union agg""" |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(8, 9, 10, 11);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(8, 9, 10, 11) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(8, 9, 10, 11) \ |
| OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(8, 9, 10, 11) \ |
| OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15);' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(8, 9, 10, 11);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(8, 9, 10, 11) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(8, 9, 10, 11) OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(12, 13, 14, 15) \ |
| OR id IN(8, 9, 10, 11) OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| |
| |
| def union_agg_4(table_name): |
| """ |
| # Don't feel like a full sparse/explicit permuatation is adding |
| # anything here...just replace explicit w / sparse. |
| """ |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19);' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(8, 9, 10, 11);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(8, 9, 10, 11) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| line = 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(8, 9, 10, 11) OR id IN(4, 5, 6, 7);' % table_name |
| r = execute(line) |
| line= 'SELECT ceiling(hll_union_agg(hll_set)) FROM %s WHERE id IN(16, 17, 18, 19) \ |
| OR id IN(8, 9, 10, 11) OR id IN(4, 5, 6, 7) OR id IN(0, 1, 2, 3);' % table_name |
| r = execute(line) |
| time.sleep(10) |
| line = 'SELECT count(id) FROM %s WHERE hll_set is null' % table_name |
| r = execute(line) |
| line = 'SELECT count(hll_cardinality(hll_set)) FROM %s WHERE hll_cardinality(hll_set) = 1' \ |
| % table_name |
| r = execute(line) |
| line = 'SELECT count(id) FROM %s WHERE hll_cardinality(hll_set) is null' % table_name |
| r = execute(line) |
| line = 'SELECT hll_union_agg(hll_set) FROM %s' % table_name |
| r = execute(line) |
| |
| |
| def test_hll_issue_5798(): |
| """ |
| { |
| "title": "test_hll_insert_5798", |
| "describe": "update数据类型tinyint, 数据溢出,Null,数据校验正确", |
| "tag": "function,p0,fuzz" |
| } |
| """ |
| database_name, table_name, index_name = util.gen_num_format_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, SCHEMA.hll_tinyint_column_list) |
| assert ret, 'create table failed' |
| sql = 'insert into %s values(1, hll_hash("test_uv"), 0)' % table_name |
| assert client.execute(sql) == (), 'insert error' |
| sql1 = 'select * from %s' % table_name |
| sql2 = 'select 1, null, 0' |
| common.check2(client, sql1=sql1, sql2=sql2) |
| msg = "Hll type dose not support operand: `v1` = 'a'" |
| sql = "select * from %s where v1='a'" % table_name |
| util.assert_return(False, msg, client.execute, sql) |
| client.clean(database_name) |
| |
| |
| def test_hll_issue_5424(): |
| """ |
| { |
| "title": "test_hll_issue_5424", |
| "describe": "update数据类型tinyint, 数据溢出,Null,数据校验正确", |
| "tag": "function,p0,fuzz" |
| } |
| """ |
| database_name, table_name, index_name = util.gen_num_format_name_list() |
| client = common.create_workspace(database_name) |
| column_list = [('id', 'int'), ] |
| ret = client.create_table(table_name, column_list) |
| assert ret, 'create table failed' |
| t = list() |
| for i in range(0, 1000): |
| t.append(str(i)) |
| values = '),('.join(t) |
| sql = 'insert into %s values (%s)' % (table_name, values) |
| assert client.execute(sql) == (), 'insert error' |
| sql1 = 'select hll_union_agg(cast(hll_hash(id) as hll)) from %s where id < 160' % table_name |
| sql2 = 'select 160' |
| common.check2(client, sql1=sql1, sql2=sql2) |
| client.clean(database_name) |
| |
| |
| def test_hll_empty(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_hll_empty", |
| "describe": "返回一个空的HLL类型值", |
| "tag": "function,p0" |
| } |
| """ |
| sql1 = "select hll_cardinality(hll_empty())" |
| sql2 = "select 0" |
| common.check2(client, sql1=sql1, sql2=sql2) |
| |
| |
| def test_hll_union(): |
| """ |
| { |
| "title": "test_sys_hll_basic.test_hll_union", |
| "describe": "返回一组HLL值的并集", |
| "tag": "function,p0" |
| } |
| """ |
| table_name = 'test_hll_union' |
| init_union_agg(table_name) |
| sql1 = "select hll_cardinality(hll_union(hll_set)) from %s" % table_name |
| sql2 = "select hll_union_agg(hll_set) from %s" % table_name |
| common.check2(client, sql1=sql1, sql2=sql2) |
| sql1 = "select hll_cardinality(hll_raw_agg(hll_set)) from %s" % table_name |
| common.check2(client, sql1=sql1, sql2=sql2) |
| |
| |
| if __name__ == '__main__': |
| setup_module() |
| print(client) |
| test_union_agg() |
| |