我使用了logstash jdbc语句 “从表中选择utl_raw.cast_to_varchar2(dbms_lob.substr(field,length(field)));” 获取blob字段。在logstash中输出的是unicode字符,例如“ \ v \ u0004 \ u0000 \ u0000 \ u0000 \ u0001 \ u0001 \ u0005 \ u0001 \ u0004 \ u0019 \ u0000c \ u0000o \ u0000m \ u0000。\ u0000w \ u0000m \ u0000。\ u0000d \ u0000a \ u0000t \ u0000a \ u0000。\ u0000I \ u0000S \ u0000M \ u0000e \ u0000m“' 实际值为“ com.wm.data.ISMem” 我需要替换所有unicode字符并解析我的数据。 任何人都建议如何修改它以及在这里可以使用哪种logstash过滤器来解析SQL输出
答案 0 :(得分:1)
您可以从 Session session = entityManager.unwrap(Session.class);
CallableStatement callableStatement = session.doReturningWork(new ReturningWork<CallableStatement>() {
@Override
public CallableStatement execute(Connection connection) throws SQLException {
CallableStatement function = connection.prepareCall(
"{ ? = call package_name.function_name(?,?) }");
function.registerOutParameter(1, Types.INTEGER);
function.setLong(2, 56);
function.setString(3,"some text");
function.execute();
return function;
}
});
try {
return callableStatement.getBigDecimal(1);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
过滤器中使用gsub
。
mutate
第一个将删除mutate {
gsub ["field-name","\v\u0004\u0001\u0005\u0001\u0004\u0019",""]
gsub ["field=name","\u0000",""]
}
,它似乎是某种标题。
第二个将从您的字符串中删除其余的\v\u0004\u0001\u0005\u0001\u0004\u0019
。
答案 1 :(得分:1)
您可以使用
对其进行变异 mutate {
gsub => [
"message", "[\\]u0000", "",
"message", "[\\]v[\\]u0004[\\]u0001[\\]u0005[\\]u0001[\\]u0004[\\]u0019", ""]
}
我希望有一种方法可以将编码固定在红宝石过滤器中,但我不知道它是什么。