请教一个匹配分库分表的table-pattern,是否有bug

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本:centos7
  • TiDB 版本:2.1.15
  • 磁盘型号:
  • 集群节点分布:
  • 数据量 & region 数量 & 副本数:
  • 集群 QPS、.999-Duration、读写比例:
  • 问题描述(我做了什么):

线上有4张表:

  1. asset_fund_1_201901
  2. asset_fund_2_201903
  3. asset_fund_month_1
  4. asset_fund_month_10

匹配以asset_fund_ 开头,后面是数字且带下划线的table 1 和2,使用正则: asset_fund_[0-9]+_[0-9]+

发现不生效,很奇怪,这么简单的正则,为啥dm识别不了?

正则需要声明

声明了哈。这样:

table-pattern: “~asset_fund_[0-9]+_[0-9]+”

没有报错。

但是,依然不行

^[0-9].* 试试这个

我试了,不能用哈。。

在分库分表的case里,table-pattern必须没有歧义…因为线上可能很多表 都有数字在表名里面。。

所以,必须asset_fund_ 开头 ,后缀是带下划线和数字的。

其实用“~asset_fund_[0-9]+_[0-9]{6}” 最合适。因为这些表有一个规律: asset_fund开头 + 一个随机数值(0-128)+ 年月(比如,201909)

这里提到的 table-pattern 是否是 配置库表路由 table routing ? table routing 规则中,匹配 pattern 支持通配符,不支持正则表达式

的确是table routing。。。

那我这个问题,难道要无解了:cold_sweat:

在table routing写128条规则匹配,真的,很尴尬…

尝试使用以下方式试下呢?

table-pattern: "asset_fund_?_*"   #匹配随机数 0-9
table-pattern: "asset_fund_??_*" #匹配随机数 10-99
table-pattern: "asset_fund_???_*" #匹配随机数 100-128
1 个赞

:sweat_smile: 忘了 还有“?”

虽然怪,但好歹解决了…谢谢!

麻烦,在文档里标准下,不支持正则…我没有看到这个提示,所以一直尝试正则匹配去解决~

好的,感谢反馈,我们看看如何明确标注一下文档内容。

在 table routing 中参数解释,有关于 schema-pattern/ table-pattern ,点击链接后有说明。

https://pingcap.com/docs-cn/v3.0/reference/tools/data-migration/table-selector/

1 个赞

目前的通配符只支持 ? 和 * 两种,后续我们会增强语法哦

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。