1

我正在尝试转储压缩列族的猪关系。它是一个单列,其值为 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。提前致谢!

4

1 回答 1

0

我能够解决这个问题。在使用 java.util.zip.Deflater/Inflater 的 DAO 中发生了另一层压缩,以及在 CF 上定义的 snappy 压缩。解决方案是扩展 CassandraStorage 并覆盖 getNext() 方法。新的实现调用 super.getNext() 并在适当的地方膨胀元组。

于 2014-04-29T19:27:30.090 回答