我正在尝试转储压缩列族的pig关系。它是一个值为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);
但当我扔掉它的时候,它看起来还是二进制的。
是压缩处理不透明还是我遗漏了什么?我在谷歌上搜索了一下,但没有看到关于这个问题的任何东西。同时我也在使用datasax enterprise。3.1. 提前谢谢!
1条答案
按热度按时间zujrkrfu1#
我能解决这个问题。dao中使用java.util.zip.deflater/inflater进行了另一层压缩,并在cf上定义了snapy压缩。解决方案是扩展cassandrastorage并重写getnext()方法。新的实现调用super.getnext(),并在适当的地方膨胀元组。