我正在将我的一个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后,我看到很多与墓碑有关的警告。有什么办法可以摆脱墓碑吗?
答案 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