| #!/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_boolean.py |
| # @date 2020-07-08 15:24:04 |
| # @brief This file is a test file for boolean data type |
| # |
| ############################################################################# |
| |
| """ |
| 测试boolean类型 |
| """ |
| |
| import os |
| from data import schema as DATA |
| from lib import palo_config |
| from lib import palo_client |
| from lib import util |
| from lib import common |
| |
| config = palo_config.config |
| fe_http_port = config.fe_http_port |
| broker_info = palo_config.broker_info |
| file_dir = os.path.abspath(os.path.dirname(__file__)) |
| |
| |
| def setup_module(): |
| """ |
| setUp |
| """ |
| pass |
| |
| |
| def test_bool_create_table_wrong_1(): |
| """ |
| { |
| "title": "test_bool_create_table_wrong_1", |
| "describe": "验证boolean类型不支持max, min, sum三种聚合方式", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| agg_type = ['MAX', 'MIN', 'SUM'] |
| for type in agg_type: |
| flag = True |
| try: |
| column_list = [('k1', 'BOOLEAN'), ('k2', 'INT'), ('v1', 'BOOLEAN', type)] |
| distribution = palo_client.DistributionInfo('Hash(k2)', 1) |
| client.create_table(table_name, column_list, distribution_info=distribution) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| pass |
| assert flag, 'expect create table faile' |
| client.clean(database_name) |
| |
| |
| def test_bool_create_table_wrong_2(): |
| """ |
| { |
| "title": "test_bool_create_table_wrong_2", |
| "describe": "验证boolean类型不支持作为分区列", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| partition_name_list = ['p1', 'p2', 'p3'] |
| partition_column = ['k1', 'k2'] |
| partition_value_list = [('0', 'True'), ('10', 'True'), ('100', 'False')] |
| partition_info = palo_client.PartitionInfo(partition_column, partition_name_list, partition_value_list) |
| distribution_info = palo_client.DistributionInfo('HASH(k2)', 10) |
| flag = True |
| try: |
| client.create_table(table_name, DATA.boolean_column_list, partition_info, |
| distribution_info) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag |
| client.clean(database_name) |
| |
| |
| def test_bool_create_table_wrong_3(): |
| """ |
| { |
| "title": "test_bool_create_table_wrong_3", |
| "describe": "验证不支持创建boolean类型的bloom filter", |
| "tag": "fuzz,p1" |
| } |
| """ |
| """bug: bool类型作为bloom filter""" |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| distribution_info = palo_client.DistributionInfo('HASH(k2)', 10) |
| flag = True |
| try: |
| client.create_table(table_name, DATA.boolean_column_list, distribution_info=distribution_info, |
| bloom_filter_column_list=['k1', 'k2']) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag |
| client.clean(database_name) |
| |
| |
| def test_bool_bucket_key(): |
| """ |
| { |
| "title": "test_bool_create_table_wrong_1", |
| "describe": "验证支持bool类型的hash分桶,导入,验证结果正确", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| client.clean(database_name) |
| |
| |
| def test_bool_broker_load(): |
| """ |
| { |
| "title": "test_bool_broker_load", |
| "describe": "验证broker导入bool类型,结果正确", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| # 建表 |
| agg_tb = table_name + '_agg' |
| duplicate_tb = table_name + "_dup" |
| unique_tb = table_name + "_uniq" |
| ret = client.create_table(agg_tb, DATA.boolean_column_list, distribution_info=DATA.boolean_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| ret = client.create_table(duplicate_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_duplicate_key, |
| set_null=True) |
| assert ret |
| ret = client.create_table(unique_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_unique_key, |
| set_null=True) |
| assert ret |
| # 导入 |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, agg_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, duplicate_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, unique_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| # 查询&验证结果 |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, agg_tb) |
| assert client.verify('%s/data/LOAD/expe_dup_bool_null_ns.data' % file_dir, duplicate_tb) |
| assert client.verify('%s/data/LOAD/expe_uniq_bool_null_ns.data' % file_dir, unique_tb) |
| client.clean(database_name) |
| |
| |
| def test_bool_stream_load(): |
| """ |
| { |
| "title": "test_bool_stream_load", |
| "describe": "验证stream导入bool类型,结果正确", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| # 建表 |
| agg_tb = table_name + '_agg' |
| duplicate_tb = table_name + "_dup" |
| unique_tb = table_name + "_uniq" |
| ret = client.create_table(agg_tb, DATA.boolean_column_list, distribution_info=DATA.boolean_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| ret = client.create_table(duplicate_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_duplicate_key, |
| set_null=True) |
| assert ret |
| ret = client.create_table(unique_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_unique_key, |
| set_null=True) |
| assert ret |
| # 导入 |
| local_file = '%s/data/LOAD/test_bool.data' % file_dir |
| print(file_dir) |
| ret = client.stream_load(agg_tb, local_file, max_filter_ratio=0.1) |
| assert ret |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| ret = client.stream_load(duplicate_tb, local_file, max_filter_ratio=0.1, column_name_list=column_name_list) |
| assert ret |
| ret = client.stream_load(unique_tb, local_file, max_filter_ratio=0.1, column_name_list=column_name_list) |
| assert ret |
| # 查询 & 验证 |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, agg_tb) |
| assert client.verify('%s/data/LOAD/expe_dup_bool_null_ns.data' % file_dir, duplicate_tb) |
| assert client.verify('%s/data/LOAD/expe_uniq_bool_null_ns.data' % file_dir, unique_tb) |
| client.clean(database_name) |
| |
| |
| def test_bool_insert(): |
| """ |
| { |
| "title": "test_bool_insert", |
| "describe": "验证insert导入bool类型,结果正确", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| # 建表 |
| agg_tb = table_name + '_agg' |
| duplicate_tb = table_name + "_dup" |
| unique_tb = table_name + "_uniq" |
| sql = "SET enable_insert_strict = false;" |
| client.execute(sql) |
| ret = client.create_table(agg_tb, DATA.boolean_column_list, distribution_info=DATA.boolean_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| ret = client.create_table(duplicate_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_duplicate_key, |
| set_null=True) |
| assert ret |
| ret = client.create_table(unique_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_unique_key, |
| set_null=True) |
| assert ret |
| # 导入 |
| sql_list = list() |
| sql_list.append("insert into %s(k1, k2, v1, v2) values (1, 1, 1, 1), (0, 0, 0, 0)") |
| sql_list.append("insert into %s(k1, k2, v1, v2) values ('true', 2, 'true', 'true'), ('false', 3, 'false', 'false')") |
| sql_list.append("insert into %s(k1, k2, v1, v2) values (true, 4, true, true), (false, 5, false, false)") |
| sql_list.append("insert into %s(k1, k2, v1, v2) values ('0', 6, '0', '0'), ('1', 7, '1', '8')") |
| sql_list.append("insert into %s(k1, k2, v1, v2) values ('hello', 8, 'a', 'b'), (null, 9, null, null)") |
| sql_list.append("insert into %s(k1, k2, v1, v2) values ('TRue', 2, 'TRUe', 'FALSE'), ('False', 3, 'TRUE', 'FALSe')") |
| for insert_sql in sql_list: |
| sql = insert_sql % agg_tb |
| ret = client.execute(sql) |
| assert ret == (), 'expect insert ok' |
| sql_list = list() |
| sql_list.append("insert into %s(k1, k2, v1) values (1, 1, 1), (0, 0, 0)") |
| sql_list.append("insert into %s(k1, k2, v1) values ('true', 2, 'true'), ('false', 3, 'false')") |
| sql_list.append("insert into %s(k1, k2, v1) values (true, 4, true), (false, 5, false)") |
| sql_list.append("insert into %s(k1, k2, v1) values ('0', 6, '0'), ('1', 7, '1')") |
| sql_list.append("insert into %s(k1, k2, v1) values ('hello', 8, 'a'), (null, 9, null)") |
| sql_list.append("insert into %s(k1, k2, v1) values ('TRue', 2, 'TRUe'), ('False', 3, 'TRUE')") |
| for insert_sql in sql_list: |
| for tb in [duplicate_tb, unique_tb]: |
| sql = insert_sql % tb |
| ret = client.execute(sql) |
| assert ret == (), 'expect insert ok' |
| # 验证 |
| assert client.verify('%s/data/LOAD/expe_bool_agg_insert_null_ns.data' % file_dir, agg_tb) |
| assert client.verify('%s/data/LOAD/expe_bool_dup_insert_null_ns.data' % file_dir, duplicate_tb) |
| assert client.verify('%s/data/LOAD/expe_bool_agg_insert_null_ns.data' % file_dir, unique_tb) |
| client.clean(database_name) |
| |
| |
| def test_bool_load_strict_null(): |
| """ |
| { |
| "title": "test_bool_load_strict_null", |
| "describe": "验证broker导入bool类型,设置strict为true,列为Null,验证导入结果正确", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| # 建表 |
| agg_tb = table_name + '_agg' |
| duplicate_tb = table_name + "_dup" |
| unique_tb = table_name + "_uniq" |
| ret = client.create_table(agg_tb, DATA.boolean_column_list, distribution_info=DATA.boolean_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| ret = client.create_table(duplicate_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_duplicate_key, |
| set_null=True) |
| assert ret |
| ret = client.create_table(unique_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_unique_key, |
| set_null=True) |
| assert ret |
| # 导入 |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, agg_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, duplicate_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, unique_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| # 查询&验证结果 |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_s.data' % file_dir, agg_tb) |
| assert client.verify('%s/data/LOAD/expe_dup_bool_null_s.data' % file_dir, duplicate_tb) |
| assert client.verify('%s/data/LOAD/expe_uniq_bool_null_s.data' % file_dir, unique_tb) |
| client.clean(database_name) |
| |
| |
| def test_bool_load_strict_not_null(): |
| """ |
| { |
| "title": "test_bool_load_strict_not_null", |
| "describe": "验证broker导入bool类型,设置strict为true,列为Null,验证导入结果正确", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| # 建表 |
| agg_tb = table_name + '_agg' |
| duplicate_tb = table_name + "_dup" |
| unique_tb = table_name + "_uniq" |
| ret = client.create_table(agg_tb, DATA.boolean_column_list, distribution_info=DATA.boolean_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=False) |
| assert ret |
| ret = client.create_table(duplicate_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_duplicate_key, |
| set_null=False) |
| assert ret |
| ret = client.create_table(unique_tb, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.boolean_distribution_info, keys_desc=DATA.boolean_unique_key, |
| set_null=False) |
| assert ret |
| # 导入 |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, agg_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.5, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, duplicate_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.5, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, unique_tb, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.5, |
| broker=broker_info, is_wait=True, strict_mode=True) |
| assert ret |
| # 查询&验证结果 |
| assert client.verify('%s/data/LOAD/expe_agg_bool_not_null_s.data' % file_dir, agg_tb) |
| assert client.verify('%s/data/LOAD/expe_dup_bool_not_null_s.data' % file_dir, duplicate_tb) |
| assert client.verify('%s/data/LOAD/expe_uniq_bool_not_null_s.data' % file_dir, unique_tb) |
| client.clean(database_name) |
| |
| |
| def test_add_bool_key_column(): |
| """ |
| { |
| "title": "test_add_bool_key_column", |
| "describe": "验证增加boolean类型的key列成功", |
| "tag": "system,p1" |
| } |
| """ |
| """bug: 增加bool类型的key列""" |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| sql = 'select k1, k2, 1, v1, v2 from %s order by 1, 2' % table_name |
| ret1 = client.execute(sql) |
| add_column = ['k3 boolean default "1"'] |
| ret = client.schema_change(table_name, add_column_list=add_column, is_wait=True) |
| assert ret |
| sql = "select * from %s order by k1, k2" % table_name |
| ret2 = client.execute(sql) |
| util.check(ret1, ret2) |
| client.clean(database_name) |
| |
| |
| def test_add_bool_value_column(): |
| """ |
| { |
| "title": "test_add_bool_value_column", |
| "describe": "验证增加boolean类型的value列成功", |
| "tag": "system,p1" |
| } |
| """ |
| """增加bool类型的value列""" |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| sql = 'select k1, k2, v1, v2, null from %s order by 1, 2' % table_name |
| ret1 = client.execute(sql) |
| add_column = ['v3 boolean replace_if_not_null'] |
| ret = client.schema_change(table_name, add_column_list=add_column, is_wait=True) |
| assert ret |
| sql = "select * from %s order by k1, k2" % table_name |
| ret2 = client.execute(sql) |
| util.check(ret1, ret2) |
| client.clean(database_name) |
| |
| |
| def test_drop_bool_column(): |
| """ |
| { |
| "title": "test_drop_bool_column", |
| "describe": "验证删除boolean类型的value列成功,key列失败因为有replace列", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| sql = 'select k1, k2, v1 from %s order by 1, 2' % table_name |
| ret1 = client.execute(sql) |
| # 删除bool key列失败,因为有replace聚合 |
| flag = True |
| try: |
| drop_column = ['k1'] |
| client.schema_change(table_name, drop_column_list=drop_column, is_wait=False) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag |
| |
| drop_column = ['v2'] |
| ret = client.schema_change(table_name, drop_column_list=drop_column, is_wait=True) |
| assert ret |
| sql = "select * from %s order by k1, k2" % table_name |
| ret2 = client.execute(sql) |
| util.check(ret1, ret2) |
| client.clean(database_name) |
| |
| |
| def test_alter_to_bool(): |
| """ |
| { |
| "title": "test_alter_to_bool", |
| "describe": "验证不支持其他列(tinyint/int/char/varchar/date/float)转为boolean类型列", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.baseall_column_list, distribution_info=DATA.hash_distribution_info, |
| set_null=True) |
| assert ret |
| flag = True |
| try: |
| modify_column = ['k1 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert tinyint to boolean' |
| flag = True |
| try: |
| modify_column = ['k4 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert bigint to boolean' |
| flag = True |
| try: |
| modify_column = ['k6 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert char to boolean' |
| flag = True |
| try: |
| modify_column = ['k7 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert varchar to boolean' |
| flag = True |
| try: |
| modify_column = ['k10 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert date to boolean' |
| flag = True |
| try: |
| modify_column = ['k9 boolean' ] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert float to boolean' |
| client.clean(database_name) |
| |
| |
| def test_alter_bool_to_other_type(): |
| """ |
| { |
| "title": "test_alter_bool_to_other_type", |
| "describe": "验证不支持boolean类型列转为其他列(tinyint/int/char/varchar/date/float)", |
| "tag": "fuzz,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| flag = True |
| try: |
| modify_column = ['v1 varchar(2) replace', 'v2 varchar(1) replace_if_not_null'] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert boolean to varchar' |
| try: |
| modify_column = ['v1 char(2) replace', 'v2 char(1) replace_if_not_null'] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert boolean to char' |
| try: |
| modify_column = ['v1 tinyint replace', 'v2 tinyint replace_if_not_null'] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert boolean to tinyint' |
| try: |
| modify_column = ['v1 float replace', 'v2 float replace_if_not_null'] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert boolean to float' |
| try: |
| modify_column = ['v1 date replace', 'v2 date replace_if_not_null'] |
| ret = client.schema_change(table_name, modify_column_list=modify_column, is_wait=True) |
| flag = False |
| except Exception as e: |
| print(str(e)) |
| assert flag, 'expcet alter modify failed, can not convert boolean to date' |
| client.clean(database_name) |
| |
| |
| def test_rollup_bool(): |
| """ |
| { |
| "title": "test_rollup_bool", |
| "describe": "验证试用boolean类型创建rollup", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, table_name) |
| int_tb_name = 'int_' + table_name |
| int_4_column_list = [('k1', 'BOOLEAN'), |
| ('k2', 'INT'), |
| ('k3', 'BOOLEAN', 'REPLACE'), |
| ('k4', 'INT', 'SUM')] |
| ret = client.create_table(int_tb_name, int_4_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_aggregate_key, set_null=True) |
| assert ret |
| insert_sql = 'insert into %s select * from %s' % (int_tb_name, table_name) |
| ret = client.execute(insert_sql) |
| assert ret == () |
| assert client.verify('%s/data/LOAD/expe_agg_bool_null_ns.data' % file_dir, int_tb_name) |
| sql = 'select k1, sum(k4) from %s group by k1 order by k1' % int_tb_name |
| ret1 = client.execute(sql) |
| rollup_column = ['k1', 'k4'] |
| ret = client.create_rollup_table(int_tb_name, rollup_table_name, rollup_column, is_wait=True) |
| assert ret |
| assert client.get_index(int_tb_name, rollup_table_name) |
| ret2 = client.execute(sql) |
| util.check(ret1, ret2) |
| client.clean(database_name) |
| |
| |
| def test_material_view_bool(): |
| """ |
| { |
| "title": "test_material_view_bool", |
| "describe": "验证支持试用boolean类型创建物化视图", |
| "tag": "system,p1" |
| } |
| """ |
| database_name, table_name, rollup_table_name = util.gen_name_list() |
| client = common.create_workspace(database_name) |
| ret = client.create_table(table_name, DATA.boolean_column_no_agg_list, |
| distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_duplicate_key, set_null=True) |
| assert ret |
| bool_hdfs = palo_config.gen_remote_file_path('sys/load/test_bool.data') |
| column_name_list = ['k1', 'k2', 'v1', 'v2'] |
| load_data_info = palo_client.LoadDataInfo(bool_hdfs, table_name, column_name_list=column_name_list) |
| ret = client.batch_load(util.get_label(), load_data_info, max_filter_ratio=0.01, broker=broker_info, is_wait=True) |
| assert ret |
| assert client.verify('%s/data/LOAD/expe_dup_bool_null_ns.data' % file_dir, table_name) |
| int_tb_name = 'int_' + table_name |
| int_4_column_list = [('k1', 'BOOLEAN'), |
| ('k2', 'INT'), |
| ('k3', 'INT')] |
| ret = client.create_table(int_tb_name, int_4_column_list, distribution_info=DATA.hash_distribution_info, |
| keys_desc=DATA.boolean_duplicate_key, set_null=True) |
| assert ret |
| insert_sql = 'insert into %s select * from %s' % (int_tb_name, table_name) |
| ret = client.execute(insert_sql) |
| assert ret == () |
| assert client.verify('%s/data/LOAD/expe_dup_bool_null_ns.data' % file_dir, int_tb_name) |
| sql = 'select k1, sum(k3) from %s group by k1 order by k1' % int_tb_name |
| ret1 = client.execute(sql) |
| ret = client.create_materialized_view(int_tb_name, rollup_table_name, sql, is_wait=True) |
| assert ret |
| assert client.get_index(int_tb_name, rollup_table_name) |
| ret2 = client.execute(sql) |
| util.check(ret1, ret2) |
| client.clean(database_name) |
| |
| |
| if __name__ == '__main__': |
| setup_module() |
| test_bool_create_table_wrong_3() |
| test_add_bool_key_column() |
| test_add_bool_value_column() |
| |
| |
| |