Cannot read system catalog (sysindices).

并发导数与表锁冲突
在使用Hive导出数据到Informix时,尝试并发执行导致表锁冲突及系统目录读取错误。通过调整锁模式及在并发语句后添加延迟指令(sleep5),成功解决了并发导数过程中的报错问题。

场景:我将脚本计算后表A导出(从hive中导出到informix)到实例库的表中,改成并发执行(&)的时候,报错并锁表!
报错:step5.log:20/07/01 04:51:05 WARN tool.EvalSqlTool: SQL exception executing statement: java.sql.SQLException: Cannot read system catalog (sysindices)
报错:step5.log:Caused by: java.sql.SQLException: ISAM error: record is locked.

原因:锁和隔离级别用的不好的时候就会这样,需要先看下当前导出表的锁模式是P还是R,默认是P的,改成R;

解决:我测试过的结果是,在并发导数的语句行下面加上sleep 5就完美解决不报错,因为前一个清库有延迟,我估计是我们这边机器环境的问题;

`Could not write JSON: com.ruoyi.system.domain.L2250DcVaT cannot be cast to java.lang.String` 错误通常是在使用 Jackson 进行 JSON 序列化时,代码尝试将 `com.ruoyi.system.domain.L2250DcVaT` 类型的对象强制转换为 `java.lang.String` 类型,而这两种类型不兼容导致的。以下是一些可能的解决办法: ### 1. 检查数据类型 确保在序列化之前,代码没有错误地尝试将 `com.ruoyi.system.domain.L2250DcVaT` 对象当作 `String` 处理。例如,在将对象添加到列表或其他数据结构时,要保证类型一致。 ```java import java.util.ArrayList; import java.util.List; // 假设这是 com.ruoyi.system.domain.L2250DcVaT 类 class L2250DcVaT { // 类的属性和方法 } public class Main { public static void main(String[] args) { List<Object> list = new ArrayList<>(); L2250DcVaT obj = new L2250DcVaT(); // 正确添加对象,不要错误地尝试转换 list.add(obj); } } ``` ### 2. 自定义序列化器 如果确实需要将 `com.ruoyi.system.domain.L2250DcVaT` 对象序列化为 JSON 字符串,可以自定义 Jackson 序列化器。 ```java import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; // 自定义序列化器 public class L2250DcVaTSerializer extends JsonSerializer<L2250DcVaT> { @Override public void serialize(L2250DcVaT value, JsonGenerator gen, SerializerProvider serializers) throws IOException { // 在这里定义如何将 L2250DcVaT 对象序列化为 JSON gen.writeString(value.toString()); // 示例:调用 toString 方法 } } ``` 然后在 `com.ruoyi.system.domain.L2250DcVaT` 类上使用 `@JsonSerialize` 注解指定自定义序列化器: ```java import com.fasterxml.jackson.databind.annotation.JsonSerialize; @JsonSerialize(using = L2250DcVaTSerializer.class) class L2250DcVaT { // 类的属性和方法 } ``` ### 3. 检查数据来源 确保从数据源(如数据库、文件等)获取的数据类型正确。有时候,数据在传输或处理过程中可能会被错误地转换类型。 ### 4. 调试代码 使用调试工具(如 IDE 的调试器)逐步执行代码,找出尝试进行类型转换的具体位置,然后进行修正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值