我正在尝试转储压缩列族的猪关系。它是一个单独的列,其值为json blob。它通过snappy压缩进行压缩,值验证器为BytesType。在我创建关系和转储后,我得到了垃圾。这是描述:
ColumnFamily: CF
Key Validation Class: org.apache.cassandra.db.marshal.TimeUUIDType
Default column value validator: org.apache.cassandra.db.marshal.BytesType
Cells sorted by: org.apache.cassandra.db.marshal.UTF8Type
GC grace seconds: 86400
Compaction min/max thresholds: 2/32
Read repair chance: 0.1
DC Local Read repair chance: 0.0
Populate IO Cache on flush: false
Replicate on write: true
Caching: KEYS_ONLY
Bloom Filter FP chance: default
Built indexes: []
Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
Compression Options:
sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor
然后我:
grunt> rows = LOAD 'cql://Keyspace/CF' using CqlStorage();
我也试过了:
grunt> rows = LOAD 'cql://Keyspace/CF' using CqlStorage()as (key: chararray, col1: chararray, value: chararray);
但是当我转储它时它仍然看起来像它的二进制文件。
压缩是不是透明处理还是我只是遗漏了什么?我做了一些谷歌搜索,但没有看到任何关于这个问题。我也在使用Datastax Enterprise。 3.1。提前谢谢!
答案 0 :(得分:0)
我能够解决这个问题。在DAO中发生了另一层压缩,它使用java.util.zip.Deflater / Inflater,以及CF上定义的snappy压缩。解决方案是扩展CassandraStorage并覆盖getNext()方法。新实现调用super.getNext()并在适当的位置膨胀元组。