【产品名称】
oceanbase社区版
【产品版本】
3.1.0-3.el7
【问题描述】
创建分区表之后尝试加入tablegroup,提示partition options不一致,建表语句如下:
相关语句.txt.zip (1335 KB)
【产品名称】
oceanbase社区版
【产品版本】
3.1.0-3.el7
【问题描述】
创建分区表之后尝试加入tablegroup,提示partition options不一致,建表语句如下:
相关语句.txt.zip (1335 KB)
绑定table group的表要求分区规则、数量等完全一致。
问题描述中看不到建表语句,请补充下具体细节。
1 建表语句 CREATE TABLE `t_hub_order_item_new` ( `item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Item顺序ID', `mall_id` varchar(32) DEFAULT NULL COMMENT '商城编号', `item_code` varchar(32) DEFAULT NULL COMMENT '渠道Item编码', `child_id` int(11) DEFAULT NULL COMMENT '行拆单后,ChildItem编号', `order_sn` varchar(64) NOT NULL COMMENT '所属渠道订单号', `sub_order_id` varchar(64) DEFAULT NULL COMMENT '子订单号', `warehouse_id` bigint(20) DEFAULT NULL COMMENT '零售圈ID', `goods_id` bigint(20) NOT NULL COMMENT '商品编号', `sku_id` bigint(20) NOT NULL COMMENT '商品规格编码', `erp_goods_id` varchar(32) DEFAULT NULL COMMENT '商品ERP编号', `erp_sku_code` varchar(32) DEFAULT NULL COMMENT '规格ERP编码', `goods_name` text DEFAULT NULL COMMENT '商品名称', `goods_spec` text DEFAULT NULL COMMENT '商品规格', `goods_count` int(11) DEFAULT NULL COMMENT '商品数量', `goods_price` float DEFAULT NULL COMMENT '商品销售价格', `total_amount` float DEFAULT NULL COMMENT '商品总金额+其他费用', `pay_amount` float DEFAULT NULL COMMENT '商品支付金额=总金额-商品级的折扣', `pmt_seller` float DEFAULT NULL COMMENT '商品级的商家折扣金额(含均摊)', `allocated` tinyint(1) NOT NULL COMMENT '是否已经:并单/拆单到ERP', `refunded` tinyint(1) NOT NULL COMMENT '是否已经生成退货单', `cancelled` tinyint(1) DEFAULT NULL COMMENT '是否已经:取消并归还库存', `erp_order_no` varchar(64) DEFAULT NULL COMMENT '关联的ERP订单编号', `rights_status` int(11) NOT NULL COMMENT '维权状态 (0-未维权,1-维权中,2-已退款)', `refund_no` varchar(64) DEFAULT NULL COMMENT '退单号,NULL表示未退单', `pre_sale_id` bigint(20) DEFAULT NULL COMMENT '预售活动id', `author_id` bigint(20) DEFAULT NULL COMMENT '主播id', `author_name` varchar(32) DEFAULT NULL COMMENT '主播名称', `extra` text DEFAULT NULL COMMENT 'json扩展字段', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ) primary_zone = 'zone2;zone3' partition by range columns(create_time) (partition M202001 values less than ('2021-02-01 00:00:00'), partition M202102 values less than ('2021-03-01 00:00:00'), partition M202103 values less than ('2021-04-01 00:00:00'), partition M202104 values less than ('2021-05-01 00:00:00'), partition M202105 values less than ('2021-06-01 00:00:00'), partition M202106 values less than ('2021-07-01 00:00:00'), partition M202107 values less than ('2021-08-01 00:00:00'), partition M202108 values less than ('2021-09-01 00:00:00'), partition M202109 values less than ('2021-10-01 00:00:00')) 2 创建tablegroup语句 CREATE TABLEGROUP od primary_zone = 'zone2;zone3' partition by range columns 1 ( partition M202001 values less than ('2021-02-01 00:00:00'), partition M202102 values less than ('2021-03-01 00:00:00'), partition M202103 values less than ('2021-04-01 00:00:00'), partition M202104 values less than ('2021-05-01 00:00:00'), partition M202105 values less than ('2021-06-01 00:00:00'), partition M202106 values less than ('2021-07-01 00:00:00'), partition M202107 values less than ('2021-08-01 00:00:00'), partition M202108 values less than ('2021-09-01 00:00:00'), partition M202109 values less than ('2021-10-01 00:00:00')) 3 加入tablegroup ALTER TABLE db_biz_hub.t_hub_order_item_new SET TABLEGROUP od; 错误提示: ERROR 4179 (HY000): table and tablegroup use different partition options not allowed
表分组的分区策略要求跟表的分区策略保持一致。
这里的问题是在定义表分组的分区策略的时候,对列的类型没有办法指定,默认是按字符串去解析的。
而建表的时候指定分区策略时,把那列是按datetime处理的。导致 OB 认为两个类型不一致,从而不能把表加到表分组里。
暂时的办法是改表的列类型为字符串,不过这个也不是很建议,时间列还是用datetime 合适一些。
此外,range分区用表分组的收益并不大,hash分区用表分组收益很大。
我这里使用range分组,是因为我两个表里面的时间字段的取值是完全一样的,做好分区之后,只需要单个分区做join操作就可以了,可以极大的减小join的数据量。 使用tablegroup之后,两个partition在同一分区,有可以避免exchange。 后续版本是否可以解决上面的问题?