DataWorks回滚此次写入, 采用每次写入一行方式提交. 因为:java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x90\xB8' for column 'symbol' at row 35?2023-11-27 20:21:38.690 [140187727-0-1-writer] WARN CommonRdbmsWriter$Task -
针对已经XA PREPARE的事务数据,实时同步会将其同步到目标端,如果XA ROLLBACK,实时同步不会针对XA PREPARE的数据做回滚写入的操作。若要处理XA ROLLBACK场景,需要手动将XA ROLLBACK的表从实时同步任务中移除,再添加表后重新进行同步。https://help.aliyun.com/zh/dataworks/user-guide/mysql-data-source?spm=a2c4g.11186623.0.i19
这个错误是由于在插入数据时,某个字段的值包含了非法的字符。在这个例子中,'symbol'字段的值是'\xF0\x9F\x90\xB8',这是一个表情符号。你需要检查你的数据源,确保所有的字符串值都是合法的。
如果你使用的是JDBC进行批量插入,你可以尝试使用PreparedStatement来避免这个问题。以下是一个示例:
String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
for (YourData data : yourDataList) {
pstmt.setString(1, data.getColumn1());
pstmt.setString(2, data.getColumn2());
pstmt.addBatch();
}
pstmt.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}
在这个示例中,我们使用了占位符(?)来代替实际的值,然后在循环中为每个占位符设置值。这样,即使有非法的字符,也不会影响其他值的插入。
这个错误是由于在向数据库插入数据时,某个字段(symbol)的值包含了不正确的字符。具体来说,这个值是'\xF0\x9F\x90\xB8',它可能是一个表情符号。为了解决这个问题,你需要检查插入数据的代码,确保所有字段的值都是正确的字符串。如果需要处理特殊字符,可以使用Java的URLDecoder类进行解码。
在DataWorks中回滚此次写入并采用每次写入一行方式提交,这可能是由于在写入过程中出现了java.sql.BatchUpdateException
异常。该异常的错误信息为Incorrect string value: '\xF0\x9F\x90\xB8' for column 'symbol' at row 35
。
这个错误通常表示在写入数据时,数据库检测到一个无效的字符串值。具体来说,对于第35行的symbol
字段,值\xF0\x9F\x90\xB8
被认为是不正确的字符串值。
解决此问题的方法如下:
检查编码:确保数据库表的字符集和字段的编码与要写入的数据的编码兼容。如果数据包含特殊字符或使用了非标准编码,可能需要调整数据库表或字段的编码设置。
使用合适的数据类型:如果symbol
字段是一个字符串类型,确保它的长度足够容纳要写入的数据。如果长度不足,可以扩展字段长度或者使用更合适的数据类型来存储数据。
特殊字符处理:如果数据中包含特殊字符,尤其是Unicode字符或表情符号等,可以尝试使用转义字符或替代字符来存储这些数据,以避免引发异常。
逐行提交:根据您提到的回滚和每次写入一行的方式进行提交,将数据以单行的形式写入数据库,这可以帮助您更方便地定位具体引发异常的数据,并进行相应的处理。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。