我在一些我想了解的遗留代码中有一个查询。 Cassandra表是这样的:
cqlsh:mykeyspace> desc table "logTable"
CREATE TABLE mykeyspace."logTable" (
key text,
key2 text,
column1 text,
column2 text,
column3 text,
column4 text,
value blob,
PRIMARY KEY ((key, key2), column1, column2, column3, column4)
)
我不是开玩笑,这些列确实是这样命名的,所以每列都可以以任何方式使用。这使得代码非常难以阅读。现在,Java中有一些代码我不明白:
private static final StringSerializer ss = StringSerializer.get();
public void logProgressMetadata(String affiliationId, String datasetId, String jobId, ProgressMetadata metadata) {
Composite rowKey = new Composite();
rowKey.addComponent("JOB_PROGRESS", ss);
Composite column = new Composite();
column.addComponent(affiliationId, ss);
column.addComponent(datasetId, ss);
column.addComponent(jobId, ss);
Mutator<Composite> mutator = HFactory.createMutator(keyspace, CompositeSerializer.get());
mutator.addInsertion(rowKey, LOG_CF, HFactory.createColumn(column, metadata.toJson(), CompositeSerializer.get(), ss));
mutator.execute();
}
关于此代码的问题与 rowKey 有关:&#34; key&#34;和&#34; key2&#34;?如果我尝试在CQL中指定只是键而不是key2,那么我会收到错误。如果我没有任何限制地查询(选择*来自&#34; logTable&#34;),那么我找不到包含&#34; JOB_PROGRESS&#34;的任何列。作为一个例子,所以我只能从代码中解决这个问题。
谢谢, 谢尔班