【JDBC】jdbc 操作 sr,传入正则

sr2.4.x,2.5.x 都有此问题
预编译sql,传入字符串正则,会出现错误
audit日志查看最终提交的sql 如下

Stmt=select regexp("2021-01-01",'^\\d{4}(-|\\/)?(0[1-9]|1[0-2])\\1(0[1-9]|[12][0-9]|3[01])$')|Digest=|PlanCpuCost=0.0|PlanMemCost=0.0

Q:

  1. hive 上是正常的,不存该问题,sr 这边是做了什么限制?
  2. 有什么好办法处理该问题嘛?


public class TestSRRegex {
    public static void main(String[] args) {
        String str = "^\\d{4}(-|\\/)?(0[1-9]|1[0-2])\\1(0[1-9]|[12][0-9]|3[01])$";
        try (SimpleDataSource ds = new SimpleDataSource("jdbc:mysql:ip:9030/", "root", "123456");
             Connection conn = DbUtil.use(ds).getConnection()) {
            PreparedStatement stat = conn.prepareStatement("select regexp(\"2021-01-01\",?)");
            stat.setString(1, str);
            ResultSet resultSet = stat.executeQuery();
            ResultSetMetaData metaData = resultSet.getMetaData();
            System.out.println(metaData.getColumnName(1));
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

你是说传给sr侧的正则多了一个\吗?

升到 2.5最新的试试?

使用jdbc 形式执行sr sql,在java 中声明正则的时候会有一个转义符 \,提交执行就会报错。
问题本质是 sr 如果出现了带有转义字符的正则表达式,就无法执行成功,如 hive 是正常的

我测试过 2.5.14,也存在问题