phoenix 5.0 CURSOR 游标(三) 不得不说的坑

本文详细解析了Apache Phoenix在多线程环境下因游标名称冲突引发的各种异常,如PhoenixIOException、ColumnNotFoundException等,并提供了一种通过生成唯一游标名称来避免此类问题的解决方案。

这个坑,不是phoenix 本身的问题。

只有在多线程并行的情况下才会发生。

 

会出现各种错误,比如:

org.apache.phoenix.exception.PhoenixIOException: null

org.apache.phoenix.schema.ColumnNotFoundException: ERROR 504 (42703): Undefined column. columnName=BROWSER

java.sql.SQLException: Can't declare cursor dataCursor, cursor identifier already in use.

 

这种情况下,所有的问题都是 游标名称引起的,因为在多线程场景下,游标创建导致的异常。

游标名称重复了,提示已经在使用。附带出现了一些奇怪的异常,比如null、列找不到。

 

知道原因了,解决的方法也很简单,那就是生成唯一的游标名称即可。

/**
     * 生成唯一的游标名称
     * 避免多线程情况,执行游标时,phoenix出现异常
     * @return
     */
    public static String getCursorName(){
        // 游标名称不能数字开头 Error: ERROR 603 (42P00): Syntax error. Unexpected input. Expecting "NAME", got...
        String first = "ag";
        String uuid = UUID.randomUUID().toString().replace("-","");
        String cursorName = first + uuid;
        return cursorName;
    }

我写的phoenix的工具类:https://blog.youkuaiyun.com/Cky079/article/details/88172671

 

--END

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值