关于压缩后字符串写入clickhouse再读取后无法反解压的问题

Posted 天涯泪小武

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于压缩后字符串写入clickhouse再读取后无法反解压的问题相关的知识,希望对你有一定的参考价值。

我们将一个长字符串进行了压缩,采用zstd或者snappy之类的,将字符串压成了byte[],然后将byte[]作为一个属性写入了clickhouse数据库,clickhouse会默认将byte[]转为String进行存储。

但是当从数据库读取到该字段,得到一个String类型的值,再用getBytes()方法获取到byte[],再试图用zstd的反解压功能对该byte[]试图还原为压缩前的字符串时,会发现报错,已经无法解压还原了。

 对应该图的情形,运行会报错

 那么做了如下修改,设置编码方式后,即可

String encode = "ISO8859-1";

        String s = "FilterRegistrationBean registration = new FilterRegistrationBean();";
        byte[] bytes = ZstdUtils.compress(s.getBytes(encode));


        String ss = new String(bytes, encode);


        byte[] sss = ZstdUtils.decompressBytes(ss.getBytes(encode));
        System.out.println(new String(sss));

 

以上是关于关于压缩后字符串写入clickhouse再读取后无法反解压的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于压缩后字符串写入clickhouse再读取后无法反解压的问题

关于压缩后字符串写入clickhouse再读取后无法反解压的问题

ClickHouse 内核原理图文详解关于分区索引标记和压缩数据的协同工作...

ClickHouse数据压缩

Flink 如何读取和写入 Clickhouse?

关于第三方支付后无session问题处理