1480 lines
67 KiB
Python
1480 lines
67 KiB
Python
#!/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_partition_multi_col.py
|
|
* @brief Test for partition by multi column
|
|
*
|
|
**************************************************************************/
|
|
"""
|
|
import time
|
|
import pytest
|
|
|
|
from data import schema as DATA
|
|
from data import load_file as FILE
|
|
from lib import palo_client
|
|
from lib import util
|
|
from lib import common
|
|
from lib import palo_job
|
|
from lib import palo_task
|
|
|
|
LOG = palo_client.LOG
|
|
L = palo_client.L
|
|
|
|
|
|
def setup_module():
|
|
"""
|
|
setUp
|
|
"""
|
|
pass
|
|
|
|
|
|
def teardown_module():
|
|
"""
|
|
tearDown
|
|
"""
|
|
pass
|
|
|
|
|
|
def test_update_tinyint():
|
|
"""
|
|
{
|
|
"title": "test_update_tinyint",
|
|
"describe": "update数据类型tinyint, 数据溢出,Null,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.tinyint_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1=1')
|
|
# 溢出
|
|
msg = 'Number out of range[-129]. type: TINYINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=-129'], 'k1=1')
|
|
msg = 'Number out of range[128]. type: TINYINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=128'], 'k1=1')
|
|
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_tinyint_unique_file)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, -1, -1, -1, -1 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=-1', 'v2=-1', 'v3=-1', 'v4=-1'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_smallint():
|
|
"""
|
|
{
|
|
"title": "test_update_smallint",
|
|
"describe": "update数据类型smallint,数据溢出,Null,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.smallint_column_no_agg_list, keys_desc=DATA.unique_key, set_null=True)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
ret = client.update(table_name, ['v1=null'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
common.check2(client, sql1='select * from %s' % table_name, sql2='select 1, null, 3, 4, 5')
|
|
# 溢出
|
|
msg = 'Number out of range[-32769]. type: SMALLINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=-32769'], 'k1=1')
|
|
msg = 'Number out of range[32768]. type: SMALLINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=32768'], 'k1=1')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_smallint_file, max_filter_ratio=0.1)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, -1, -1, -1, -1 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=-1, v2=-1, v3=-1, v4=-1'], 'k1 is not null or k1 is null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_int():
|
|
"""
|
|
{
|
|
"title": "test_update_int",
|
|
"describe": "update数据类型int,数据溢出,Null,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null, not null列 update failed
|
|
util.assert_return(False, '', client.update, table_name, ['v1=NULL'], 'k1=1')
|
|
# 溢出
|
|
msg = 'Number out of range[-2147483649]. type: INT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=-2147483649'], 'k1=1')
|
|
msg = 'Number out of range[2147483648]. type: INT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=2147483648'], 'k1=1')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_int_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, -1, -1, -1, -1 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=-1, v2=-1, v3=-1, v4=-1'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_bigint():
|
|
"""
|
|
{
|
|
"title": "test_update_bigint",
|
|
"describe": "update数据类型bigint,数据溢出,Null,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.bigint_column_no_agg_list, keys_desc=DATA.unique_key, set_null=True)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null todo
|
|
ret = client.update(table_name, ['v1=null'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
common.check2(client, sql1='select * from %s' % table_name, sql2='select 1, null, 3, 4, 5')
|
|
# 溢出
|
|
msg = 'Number out of range[-9223372036854775809]. type: BIGINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=-9223372036854775809'], 'k1=1')
|
|
msg = 'Number out of range[9223372036854775808]. type: BIGINT'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=9223372036854775808'], 'k1=1')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_bigint_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, -1, -1, -1, -1 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=-1, v2=-1, v3=-1, v4=-1'], 'k1 is not null or k1 is null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_largeint():
|
|
"""
|
|
{
|
|
"title": "test_update_largeint",
|
|
"describe": "update数据类型largeint,数据溢出,Null,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.largeint_column_no_agg_list, keys_desc=DATA.unique_key, set_null=True)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
ret = client.update(table_name, ['v1=null'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
common.check2(client, sql1='select * from %s' % table_name, sql2='select 1, null, 3, 4, 5')
|
|
# 溢出
|
|
msg = 'Numeric overflow'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=-170141183460469231731687303715884105729'], 'k1=1')
|
|
msg = 'Number Overflow. literal: 170141183460469231731687303715884105728'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1=170141183460469231731687303715884105728'], 'k1=1')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_largeint_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, "-1", "-1", "-1", "-1" from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=-1, v2=-1, v3=-1, v4=-1'], 'k1 is not null or k1 is null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_char():
|
|
"""
|
|
{
|
|
"title": "test_update_char",
|
|
"describe": "update数据类型char,长度溢出,Null,空串,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.char_normal_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values("1", "2")' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1=1')
|
|
# 溢出
|
|
util.assert_return(False, '', client.update, table_name,
|
|
['v1="-170141183460469231731687303715884105729"'], 'k1=1')
|
|
# 空串
|
|
ret = client.update(table_name, ['v1=""'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
common.check2(client, sql1='select * from %s' % table_name, sql2='select "1", ""')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_char_normal_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, "-1" from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1="-1"'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_varchar():
|
|
"""
|
|
{
|
|
"title": "test_update_varchar",
|
|
"describe": "update数据类型varchar,长度溢出,Null,空串,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.varchar_least_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values("1", "2")' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1=1')
|
|
# 溢出
|
|
util.assert_return(False, '', client.update, table_name,
|
|
['v1="-170141183460469231731687303715884105729"'], 'k1=1')
|
|
# 空串
|
|
ret = client.update(table_name, ['v1=""'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
common.check2(client, sql1='select * from %s' % table_name, sql2='select "1", ""')
|
|
# 多个数据导入
|
|
assert client.drop_table(table_name)
|
|
ret = client.create_table(table_name, DATA.varchar_normal_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_varchar_normal_file, max_filter_ratio=0.02)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, "-1" from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1="-1"'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_date():
|
|
"""
|
|
{
|
|
"title": "test_update_date",
|
|
"describe": "update数据类型date,各种日期格式,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.date_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values("2000-01-01", "2000-01-02", "2000-01-03", "2000-01-04")' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1="2000-01-01"')
|
|
# 正常数据
|
|
ret = client.update(table_name, ['v1="2020-01-01"'], 'k1="2000-01-01"')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select cast("2000-01-01" as date), cast("2020-01-01" as date), ' \
|
|
'cast("2000-01-03" as date), cast("2000-01-04" as date)'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# int数据
|
|
ret = client.update(table_name, ['v1="20200102"'], 'k1="2000-01-01"')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select cast("2000-01-01" as date), cast("2020-01-02" as date), ' \
|
|
'cast("2000-01-03" as date), cast("2000-01-04" as date)'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# 00数据
|
|
util.assert_return(False, '', client.update, table_name, ['v1="0000-00-00"'], 'k1="2000-01-01"')
|
|
# 不支持数据
|
|
util.assert_return(False, '', client.update, table_name, ['v1="2000-13-01"'], 'k1="2000-01-01"')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_date_file, max_filter_ratio=0.015)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, "2021-01-01", "2021-01-03", "2021-01-02" from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1="2021-01-01"', 'v2="2021-01-03"', 'v3="2021-01-02"'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_datetime():
|
|
"""
|
|
{
|
|
"title": "test_update_datetime",
|
|
"describe": "update数据类型datetime,各种日期格式,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.datetime_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values("2000-01-01 00:00:00", "2000-01-02 01:00:00", ' \
|
|
'"2000-01-03 00:00:00", "2000-01-04 00:00:01")' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1="2000-01-01 00:00:00"')
|
|
# 正常
|
|
ret = client.update(table_name, ['v1="2020-01-01 00:00:00"'], 'k1="2000-01-01 00:00:00"')
|
|
assert ret, 'update failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select cast("2000-01-01 00:00:00" as datetime), cast("2020-01-01 00:00:00" as datetime), ' \
|
|
'cast("2000-01-03 00:00:00" as datetime), cast("2000-01-04 00:00:01" as datetime)'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# 溢出
|
|
util.assert_return(False, '', client.update, table_name, ['v1="10020-01-01 00:00:00"'], 'k1="2000-01-01 00:00:00"')
|
|
# 00数据
|
|
util.assert_return(False, '', client.update, table_name, ['v1="2020-01-00 00:00:00"'], 'k1="2000-01-01 00:00:00"')
|
|
# 不支持datetime
|
|
util.assert_return(False, '', client.update, table_name, ['v1="2020-13-01 00:00:00"'], 'k1="2000-01-01 00:00:00"')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_datetime_file, max_filter_ratio=0.015)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, "2021-01-01 08:00:00", "2021-01-03 08:00:00", "2021-01-02 08:00:00" ' \
|
|
'from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1="2021-01-01 08:00:00"',
|
|
'v2="2021-01-03 08:00:00"',
|
|
'v3="2021-01-02 08:00:00"'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_decimal():
|
|
"""
|
|
{
|
|
"title": "test_update_decimal",
|
|
"describe": "update数据类型decimal,精度溢出,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.decimal_normal_column_no_agg_list,
|
|
keys_desc=DATA.unique_key, set_null=True)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1.001, 2.002, 3.003, 4.004, 5.006)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
ret = client.update(table_name, ['v1=null'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1.001, null, 3.003, 4.004, 5.006'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# 溢出
|
|
ret = client.update(table_name, ['v1="0.00000001"'], 'k1 = 1.001')
|
|
assert ret, 'update failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1.001, 0, 3.003, 4.004, 5.006'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
util.assert_return(False, '', client.update, table_name, ['v1=100000000000.001'], 'k1 = 1.001')
|
|
# 格式不正确
|
|
util.assert_return(False, '', client.update, table_name, ['v1=123456'], 'k1 = 1.001')
|
|
msg = 'Unexpected exception: Character a is neither a decimal digit number, ' \
|
|
'decimal point, nor "e" notation exponential mark'
|
|
util.assert_return(False, msg, client.update, table_name, ['v1="aaa"'], 'k1 = 1.001')
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_decimal_normal_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, 2.002, 3.003, 4.004, 5.006 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=2.002', 'v2=3.003', 'v3=4.004', 'v4=5.006'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_double():
|
|
"""
|
|
{
|
|
"title": "test_update_double",
|
|
"describe": "update数据类型double,精度,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2.002, 3.003, 4.004, 5.006)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1=1')
|
|
# 溢出
|
|
ret = client.update(table_name, ['v2="1.99999999999999999"'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2.002, 2.0, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# 格式
|
|
ret = client.update(table_name, ['v2="1.009e2"'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql2 = 'select 1, 2.002, 100.9, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v2=2.0003e-2'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql2 = 'select 1, 2.002, 0.020003, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# msg = "'a3' is not a number"
|
|
msg = 'error totally whack'
|
|
util.assert_return(False, msg, client.update, table_name, ['v2="a3"'], 'k1=1')
|
|
print(client.select_all(table_name))
|
|
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_double_int_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, 2.002, 3.003, 4.004, 5.006 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=2.002', 'v2=3.003', 'v3=4.004', 'v4=5.006'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_float():
|
|
"""
|
|
{
|
|
"title": "test_update_float",
|
|
"describe": "update数据类型float,精度,数据校验正确",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.float_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2.002, 3.003, 4.004, 5.006)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# null
|
|
util.assert_return(False, '', client.update, table_name, ['v1=null'], 'k1 = 1')
|
|
# 溢出, todo
|
|
ret = client.update(table_name, ['v2="1.99999999999999999"'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2.002, 2.0, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# 格式不正确
|
|
ret = client.update(table_name, ['v2="1.009e2"'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2.002, 100.9, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v2=2.0003e-2'], 'k1=1')
|
|
assert ret, 'update table failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2.002, 0.020003, 4.004, 5.006'
|
|
common.check2(client, sql1, sql2=sql2)
|
|
# msg = "'a3' is not a number"
|
|
msg = 'error totally whack'
|
|
util.assert_return(False, msg, client.update, table_name, ['v2="a3"'], 'k1=1')
|
|
print(client.select_all(table_name))
|
|
# 多个数据导入
|
|
assert client.truncate(table_name)
|
|
assert len(client.select_all(table_name)) == 0
|
|
ret = client.stream_load(table_name, FILE.test_float_int_file, max_filter_ratio=0.01)
|
|
assert ret, 'stream load failed'
|
|
sql = 'select k1, 2.002, 3.003, 4.004, 5.006 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql)
|
|
ret = client.update(table_name, ['v1=2.002', 'v2=3.003', 'v3=4.004', 'v4=5.006'], 'k1 is not null')
|
|
assert ret, 'update table failed'
|
|
sql = 'select k1, v1, v2, v3, v4 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_other_table():
|
|
"""
|
|
{
|
|
"title": "test_update_other_table",
|
|
"describe": "update只支持unique表,不支持duplicate表和aggregate表",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
# 创建不同类型的表,并导入数据
|
|
agg_tb = table_name + '_agg'
|
|
dup_tb = table_name + '_dup'
|
|
uniq_tb = table_name + '_uniq'
|
|
ret = client.create_table(agg_tb, DATA.partition_column_list)
|
|
assert ret, 'create table failed'
|
|
ret = client.create_table(dup_tb, DATA.partition_column_no_agg_list)
|
|
assert ret, 'create table failed'
|
|
ret = client.create_table(uniq_tb, DATA.partition_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
for tb in [agg_tb, dup_tb, uniq_tb]:
|
|
ret = client.stream_load(tb, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
# update不同类型的表
|
|
ret = client.update(uniq_tb, ['v2="2"'], 'k1=1')
|
|
assert ret, 'update failed'
|
|
msg = 'Only unique table could be updated'
|
|
util.assert_return(False, msg, client.update, agg_tb, ['v2="2"'], 'k1=1')
|
|
msg = 'Only unique table could be updated'
|
|
util.assert_return(False, msg, client.update, dup_tb, ['v2="2"'], 'k1=1')
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_key():
|
|
"""
|
|
{
|
|
"title": "test_update_key",
|
|
"describe": "update只支持value列,不支持key列,包括分区列,分桶列",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["-10", "0", "10", "100", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'load data failed'
|
|
# update key列/分桶列/分区列
|
|
msg = 'Only value columns of unique table could be updated'
|
|
util.assert_return(False, msg, client.update, table_name, ['k3=0'], 'k1=1')
|
|
msg = 'Only value columns of unique table could be updated'
|
|
util.assert_return(False, msg, client.update, table_name, ['k1=-10'], 'k4=1000')
|
|
msg = 'Only value columns of unique table could be updated'
|
|
util.assert_return(False, msg, client.update, table_name, ['k2=-10'], 'k4=1000')
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_multi_row():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_row",
|
|
"describe": "update多行数据,多个分区的多条数据",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'load data failed'
|
|
sql1 = 'select k1, k2, k3, k4, k5, v1, v2, "after update" v3, v4, v5, v6 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql1)
|
|
# update多个分区的多个值
|
|
ret = client.update(table_name, ['v3="after update"'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select * from %s order by k1' % table_name
|
|
ret2 = client.execute(sql2)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_multi_col():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_col",
|
|
"describe": "update多个列",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'load data failed'
|
|
sql1 = 'select k1, k2, k3, k4, k5, "2020-01-20", "-", "after update" v3, 0, 0, 0 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql1)
|
|
# update多个分区的多个值
|
|
ret = client.update(table_name, ['v3="after update"',
|
|
'v2="-"',
|
|
'v1="2020-01-20"',
|
|
'v4=0',
|
|
'v5=0',
|
|
'v6=0'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select * from %s order by k1' % table_name
|
|
ret2 = client.execute(sql2)
|
|
util.check(ret1, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_empty():
|
|
"""
|
|
{
|
|
"title": "test_update_empty",
|
|
"describe": "update空表",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
# update多个分区的多个值
|
|
ret = client.update(table_name, ['v3="after update"',
|
|
'v2="-"',
|
|
'v5=0',
|
|
'v6=0'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select * from %s order by k1' % table_name
|
|
ret2 = client.execute(sql2)
|
|
assert len(ret2) == 0, 'check data error'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'load data failed'
|
|
assert client.verify(FILE.partition_local_file, table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_condition():
|
|
"""
|
|
{
|
|
"title": "test_update_condition",
|
|
"describe": "update中where条件,in,like,< > =,between...and,not,is null,is not null,函数,子查询,and,or, empty",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file, partition_list=["p5"], max_filter_ratio=1)
|
|
assert ret, 'load data failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2579.668636'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
|
|
# in
|
|
ret = client.update(table_name, ['v6=0'], 'v2 in ("d", "a", "b")')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 0'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
|
|
# like
|
|
ret = client.update(table_name, ['v6=1'], 'v3 like "%%wnrk"')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 0'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=1'], 'v3 like "%%wnrk%%"')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
|
|
# 比较
|
|
ret = client.update(table_name, ['v6=2'], 'k1=30')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=3'], 'k1 > 30')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=3'], 'k1<=20')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
|
|
# and
|
|
ret = client.update(table_name, ['v6=3'], 'k1 >= 30 and k2 < 300')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
|
|
ret = client.update(table_name, ['v6=3'], 'k1 in (3, 30) and k5="2040-01-01 00:00:00"')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 3'
|
|
# or
|
|
ret = client.update(table_name, ['v6=4'], 'k1 >= 30 or k2 < 300')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 4'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# is not null
|
|
ret = client.update(table_name, ['v6=5'], 'v6 is not null')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 5'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=6'], 'v6 is null')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 5'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# function
|
|
ret = client.update(table_name, ['v6=6'], 'abs(v5) > 900')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 6'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# 常量表达式
|
|
ret = client.update(table_name, ['v6=7'], '1=3')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 6'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=7'], '1=1')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 7'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=8'], 'true')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 8'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
ret = client.update(table_name, ['v6=9'], 'null is not null')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 8'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_set():
|
|
"""
|
|
{
|
|
"title": "test_update_set",
|
|
"describe": "update中的set设置,包含自增,函数,表达式等,",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3, k4, k5)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file, partition_list=["p5"], max_filter_ratio=1)
|
|
assert ret, 'load data failed'
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 2579.668636'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# set计算表达式
|
|
ret = client.update(table_name, 'v6 = v6 + v5', 'k1=30')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 976.26649, 3555.935126'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# set自增
|
|
ret = client.update(table_name, 'v5 = v5 + 1', 'k1=30')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-01-30" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 977.26649, 3555.935126'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# set自增 & 函数
|
|
ret = client.update(table_name, 'v1 = date_add(v1, interval 2 day)', 'k1=30')
|
|
assert ret, 'update failed'
|
|
sql2 = 'select 30, 300, 3000, 30000, cast("2040-01-01 00:00:00" as datetime), cast("2010-02-1" as date), "d", ' \
|
|
'"tbuvpobzluhbwkljlhwnrkrhowybk", 949.57562, 977.26649, 3555.935126'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_multi_table():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table",
|
|
"describe": "同时对不同表执行update操作,update操作均可执行成功",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
# init table
|
|
tb1 = table_name + '_1'
|
|
tb2 = table_name + '_2'
|
|
ret = client.create_table(tb1, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % tb1
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
ret = client.create_table(tb2, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % tb2
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# update
|
|
client1 = common.get_client()
|
|
client2 = common.get_client()
|
|
update_task_1 = palo_task.SyncTask(client1.update, tb1, ['v1=v1+1'], 'k1=1', database_name)
|
|
update_thread_1 = palo_task.TaskThread(update_task_1)
|
|
update_thread_1.start()
|
|
update_task_2 = palo_task.SyncTask(client2.update, tb2, ['v2=v2+1'], 'k1=1', database_name)
|
|
update_thread_2 = palo_task.TaskThread(update_task_2)
|
|
update_thread_2.start()
|
|
time.sleep(10)
|
|
update_thread_1.stop()
|
|
update_thread_1.join()
|
|
update_thread_2.stop()
|
|
update_thread_2.join()
|
|
print(update_task_1.succ_count)
|
|
print(update_task_2.succ_count)
|
|
sql1 = 'select * from %s' % tb1
|
|
sql2 = 'select 1, 2 + %s, 3, 4, 5' % update_task_1.succ_count
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
sql1 = 'select * from %s' % tb2
|
|
sql2 = 'select 1, 2, 3 + %s, 4, 5' % update_task_2.succ_count
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_concurrent_update_table_1():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_1",
|
|
"describe": "enable_concurrent_update=false,对同一个表执行update操作,偶发报错:There is an update operation in progress for the current table. Please try again later, or set enable_concurrent_update in fe.conf to true",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
if client.user in ('root', 'admin'):
|
|
ret = client.admin_show_config('enable_concurrent_update')
|
|
fe_config = palo_job.AdminShowConfig(ret[0])
|
|
if fe_config.get_value() == 'true':
|
|
raise pytest.skip("need to set fe config: enable_concurrent_update=false")
|
|
# init table
|
|
ret = client.create_table(table_name, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
print(client.select_all(table_name))
|
|
# update
|
|
client1 = common.get_client()
|
|
client2 = common.get_client()
|
|
update_task_1 = palo_task.SyncTask(client1.update, table_name, ['v1=v1+1'], 'k1=1', database_name)
|
|
update_thread_1 = palo_task.TaskThread(update_task_1)
|
|
update_thread_1.start()
|
|
update_task_2 = palo_task.SyncTask(client2.update, table_name, ['v2=v2+1'], 'k1=1', database_name)
|
|
update_thread_2 = palo_task.TaskThread(update_task_2)
|
|
update_thread_2.start()
|
|
time.sleep(10)
|
|
update_thread_1.stop()
|
|
update_thread_1.join()
|
|
time.sleep(1)
|
|
update_thread_2.stop()
|
|
update_thread_2.join()
|
|
time.sleep(1)
|
|
LOG.info(L('there are %s update v1=v1+1 succ' % update_task_1.succ_count))
|
|
LOG.info(L('there are %s update v2=v2+1 succ' % update_task_2.succ_count))
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2 + %s, 3 + %s, 4, 5' % (update_task_1.succ_count, update_task_2.succ_count)
|
|
#common.check2(client, sql1=sql1, sql2=sql2)
|
|
# msg = 'There is an update operation in progress for the current table. Please try again later, or set enable_concurrent_update in fe.conf to true'
|
|
|
|
|
|
def test_concurrent_update_table_2():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_2",
|
|
"describe": "enable_concurrent_update=fasle,对同一个表执行update操作,update的数据不冲突,偶发报错:There is an update operation in progress for the current table. Please try again later, or set enable_concurrent_update in fe.conf to true",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
if client.user in ('root', 'admin'):
|
|
ret = client.admin_show_config('enable_concurrent_update')
|
|
fe_config = palo_job.AdminShowConfig(ret[0])
|
|
if fe_config.get_value() == 'true':
|
|
raise pytest.skip("need to set fe config: enable_concurrent_update=false")
|
|
# init table
|
|
ret = client.create_table(table_name, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5), (2, 3, 4, 5, 6)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# update
|
|
client1 = common.get_client()
|
|
client2 = common.get_client()
|
|
update_task_1 = palo_task.SyncTask(client1.update, table_name, ['v1=v1+1'], 'k1=1', database_name)
|
|
update_thread_1 = palo_task.TaskThread(update_task_1)
|
|
update_thread_1.start()
|
|
update_task_2 = palo_task.SyncTask(client2.update, table_name, ['v2=v2+1'], 'k1=2', database_name)
|
|
update_thread_2 = palo_task.TaskThread(update_task_2)
|
|
update_thread_2.start()
|
|
time.sleep(10)
|
|
update_thread_1.stop()
|
|
update_thread_1.join()
|
|
update_thread_2.stop()
|
|
update_thread_2.join()
|
|
LOG.info(L('there are %s update k1=1 succ' % update_task_1.succ_count))
|
|
LOG.info(L('there are %s update k1=2 succ' % update_task_2.succ_count))
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2 + %s, 3, 4, 5 union select 2, 3, 4 + %s, 5, 6' \
|
|
% (update_task_1.succ_count, update_task_2.succ_count)
|
|
common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_concurrent_update_table_3():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_2",
|
|
"describe": "enable_concurrent_update=true,对同一个表执行update操作,update的数据不冲突"
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
if client.user in ('root', 'admin'):
|
|
ret = client.admin_show_config('enable_concurrent_update')
|
|
fe_config = palo_job.AdminShowConfig(ret[0])
|
|
if fe_config.get_value() == 'false':
|
|
raise pytest.skip("need to set fe config: enable_concurrent_update=true")
|
|
# init table
|
|
ret = client.create_table(table_name, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5), (2,3,4,5,6)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
# update
|
|
client1 = common.get_client()
|
|
client2 = common.get_client()
|
|
update_task_1 = palo_task.SyncTask(client1.update, table_name, ['v1=v1+1'], 'k1=1', database_name)
|
|
update_thread_1 = palo_task.TaskThread(update_task_1)
|
|
update_thread_1.start()
|
|
update_task_2 = palo_task.SyncTask(client2.update, table_name, ['v2=v2+1'], 'k1=2', database_name)
|
|
update_thread_2 = palo_task.TaskThread(update_task_2)
|
|
update_thread_2.start()
|
|
time.sleep(10)
|
|
update_thread_1.stop()
|
|
update_thread_1.join()
|
|
update_thread_2.stop()
|
|
update_thread_2.join()
|
|
LOG.info(L('there are %s update k1=1 succ' % update_task_1.succ_count))
|
|
LOG.info(L('there are %s update k1=2 succ' % update_task_2.succ_count))
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2 + %s, 3, 4, 5 union select 2, 3, 4 + %s, 5, 6' \
|
|
% (update_task_1.succ_count, update_task_2.succ_count)
|
|
common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_concurrent_update_table_4():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_4",
|
|
"describe": "enable_concurrent_update=true,对同一个表执行update操作,update的数据冲突"
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
if client.user in ('root', 'admin'):
|
|
ret = client.admin_show_config('enable_concurrent_update')
|
|
fe_config = palo_job.AdminShowConfig(ret[0])
|
|
if fe_config.get_value() == 'false':
|
|
raise pytest.skip("need to set fe config: enable_concurrent_update=true")
|
|
# init table
|
|
ret = client.create_table(table_name, DATA.double_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert ret, 'create table failed'
|
|
sql = 'insert into %s values(1, 2, 3, 4, 5)' % table_name
|
|
ret = client.execute(sql)
|
|
assert ret == (), 'insert date failed'
|
|
print(client.select_all(table_name))
|
|
# update
|
|
client1 = common.get_client()
|
|
client2 = common.get_client()
|
|
update_task_1 = palo_task.SyncTask(client1.update, table_name, ['v1=v1+1'], 'k1=1', database_name)
|
|
update_thread_1 = palo_task.TaskThread(update_task_1)
|
|
update_thread_1.start()
|
|
update_task_2 = palo_task.SyncTask(client2.update, table_name, ['v2=v2+1'], 'k1=1', database_name)
|
|
update_thread_2 = palo_task.TaskThread(update_task_2)
|
|
update_thread_2.start()
|
|
time.sleep(10)
|
|
update_thread_1.stop()
|
|
update_thread_1.join()
|
|
time.sleep(1)
|
|
update_thread_2.stop()
|
|
update_thread_2.join()
|
|
time.sleep(1)
|
|
LOG.info(L('there are %s update v1=v1+1 succ' % update_task_1.succ_count))
|
|
LOG.info(L('there are %s update v2=v2+1 succ' % update_task_2.succ_count))
|
|
sql1 = 'select * from %s' % table_name
|
|
sql2 = 'select 1, 2 + %s, 3 + %s, 4, 5' % (update_task_1.succ_count, update_task_2.succ_count)
|
|
# common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_with_idx():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_2",
|
|
"describe": "update带有索引的表,bloom filter,bitmap Index",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'load data failed'
|
|
sql1 = 'select k1, k2, k3, k4, k5, v1, "-", v3, v4, v5, 0.01 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql1)
|
|
sql2 = 'select k1, k2, k3, 0, k5, v1, "-", v3, v4, v5, 0.01 from %s order by k1' % table_name
|
|
ret2 = client.execute(sql2)
|
|
|
|
ret = client.schema_change(table_name, bloom_filter_column_list=['v2', 'v6'], is_wait=True)
|
|
assert ret, 'alter add bloom filter failed'
|
|
ret = client.update(table_name, ['v2="-"', 'v6=0.01'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
ret1_sut = client.select_all(table_name)
|
|
util.check(ret1, ret1_sut, True)
|
|
time.sleep(10)
|
|
ret = client.create_bitmap_index_table(table_name, index_name, 'k4', is_wait=True)
|
|
assert ret
|
|
ret = client.update(table_name, 'k4=0', 'k1 > 0')
|
|
ret2_sut = client.select_all(table_name)
|
|
util.check(ret2, ret2_sut, True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_with_batch_delete():
|
|
"""
|
|
{
|
|
"title": "test_update_table_with_batch_delete",
|
|
"describe": "update开启batch delte的表 update成功",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
try:
|
|
client.enable_feature_batch_delete(table_name)
|
|
except Exception as e:
|
|
pass
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
sql1 = 'select k1, k2, k3, k4, k5, v1, "-", v3, v4, v5, 0.01 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql1)
|
|
ret = client.update(table_name, ['v2="-"', 'v6=0.01'], 'k1 > 0')
|
|
assert ret, 'update failed'
|
|
ret1_sut = client.select_all(table_name)
|
|
util.check(ret1, ret1_sut, True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_load():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_2",
|
|
"describe": "在update的同时,导入数据",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
time.sleep(1)
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
assert len(ret) == 30, 'check data error'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_delete():
|
|
"""
|
|
{
|
|
"title": "test_update_multi_table_2",
|
|
"describe": "在update的同时,删除数据,偶发:doris-1130",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_task.interval = 0
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
ret = client.delete(table_name, [("k1", ">", "20")])
|
|
assert ret, 'delete failed'
|
|
time.sleep(1)
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
print(len(ret))
|
|
# assert len(ret) == 20, 'check data error, there are %s rows' % len(ret)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_add_column():
|
|
"""
|
|
{
|
|
"title": "test_update_table_while_add_column",
|
|
"describe": "在update的同时,加列",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
# add column
|
|
ret = client.schema_change_add_column(table_name, [('v_add', 'INT', '', '0')], is_wait_job=True)
|
|
assert ret, 'add column failed'
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_drop_column():
|
|
"""
|
|
{
|
|
"title": "test_update_table_while_drop_column",
|
|
"describe": "在update的同时,减列",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
sql1 = 'select k1, k2, k3, k4, k5, v1, "0", v3, v4, v5 from %s order by k1' % table_name
|
|
ret1 = client.execute(sql1)
|
|
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
# add column
|
|
ret = client.schema_change_drop_column(table_name, ['v6'], is_wait_job=True)
|
|
assert ret, 'add column failed'
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
util.check(ret, ret1, True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_modify_column():
|
|
"""
|
|
{
|
|
"title": "test_update_table_while_modify_column",
|
|
"describe": "在update的同时,修改列",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
# modify column
|
|
ret = client.schema_change_modify_column(table_name, 'v2', 'char(5)', is_wait_job=True, aggtype='-')
|
|
assert ret, 'add column failed'
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_update_table_while_rollup():
|
|
"""
|
|
{
|
|
"title": "test_update_table_while_rollup",
|
|
"describe": "在update的同时,创建rollup",
|
|
"tag": "function,p0,fuzz"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_num_format_name_list()
|
|
LOG.info(L('', database_name=database_name,
|
|
table_name=table_name, index_name=index_name))
|
|
client = common.create_workspace(database_name)
|
|
partition_info = palo_client.PartitionInfo("k2",
|
|
["p1", "p2", "p3", "p4", "p5"],
|
|
["0", "100", "200", "300", "MAXVALUE"])
|
|
distribution_info = palo_client.DistributionInfo('hash(k1)', 10)
|
|
keys_desc = "UNIQUE KEY(k1, k2, k3)"
|
|
ret = client.create_table(table_name, DATA.partition_column_no_agg_list, keys_desc=keys_desc,
|
|
partition_info=partition_info, distribution_info=distribution_info)
|
|
assert ret, 'create table failed'
|
|
ret = client.stream_load(table_name, FILE.partition_local_file)
|
|
assert ret, 'stream load failed'
|
|
client1 = common.get_client()
|
|
update_task = palo_task.SyncTask(client1.update, table_name, ['v2="0"'], 'k1 > 0', database_name)
|
|
update_thread = palo_task.TaskThread(update_task)
|
|
update_thread.start()
|
|
# create rollup
|
|
ret = client.create_rollup_table(table_name, index_name, ['k1', 'k3', 'k2', 'v2', 'v6'], is_wait=True)
|
|
assert ret, 'create rollup failed'
|
|
update_thread.stop()
|
|
update_thread.join()
|
|
ret = client.select_all(table_name)
|
|
client.clean(database_name)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
setup_module()
|
|
#test_update_condition()
|
|
test_update_table_while_add_column()
|