使用sstableloader

时间:2018-05-22 05:38:50

标签: cassandra

我正在将我的一个cassandra表中的数据加载到具有修改的分区键的新表中。作为第一步,我将当前表的转储转换为csv文件。 之后我使用CQLSSTableWriter生成如下的sstables。

// Prepare SSTable writer 
CQLSSTableWriter.Builder builder = CQLSSTableWriter.builder();
// set output directory 
builder.inDirectory(outputDir)
   // set target schema 
   .forTable(SCHEMA)
   // set CQL statement to put data 
   .using(INSERT_STMT)
   // set partitioner if needed 
   // default is Murmur3Partitioner so set if you use different one. 
   .withPartitioner(new Murmur3Partitioner());
CQLSSTableWriter writer = builder.build();

// ...snip... 

while ((line = csvReader.read()) != null)
{
        writer.addRow(DATE_FORMAT.parse(line.get(0)),
               UUID.fromString(line.get(1)),
               line.get(2),
               line.get(3),
               line.get(4),
               Long.parseLong(line.get(5)),
               line.get(6));
}
writer.close();

当我的csv / existing表有一些空值时会出现问题。

在cassandra中加载sstables后,我看到很多与墓碑有关的警告。有什么办法可以摆脱墓碑吗?

1 个答案:

答案 0 :(得分:0)

在某些情况下,将列设置为NULL与编写逻辑删除相同。

确保在cassandra.yaml文件中设置足够高,因此查询不会失败,但不会太高,以至于您遇到GC问题。这种修改需要逐步调整并进行评估。

foo(?!\s+bar) - no "bar" after "foo" separated with 1+ whitespaces from it
foo(?!\W+bar) - no "bar" after "foo" separated with 1+ non-word chars from it
foo(?!\w*bar) - no "bar" after "foo" in the same "word" (digits, letters, _)
foo(?!\p{L}*bar) - no "bar" after "foo" in the same letter-word

现在您应该运行主要压缩(STCS,Cassandra 2.2+的LCS)或重置受影响表的所有SSTable(LCS Cassandra< 2.2)的级别。

如果您必须使用重置,那么您可以获得以下链接的帮助:

https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsSSTableLevelReset.html