Java 如何使用cassandra中的rowUpdateBuilder写入包含复合分区键的审核表?

Java 如何使用cassandra中的rowUpdateBuilder写入包含复合分区键的审核表?,java,triggers,cassandra,cassandra-3.0,Java,Triggers,Cassandra,Cassandra 3.0,我在网上看到了各种使用cassandra触发器写入审计表的示例。我一直在关注这一点: 然而,在我的用例中,我有一个审计表,它有一个复合分区键(主键((col1,col2),col3,col4))和多个集群列。 我已经能够通过添加audit.clustering(值)来添加集群列,但是我无法理解如何实现复合分区键。 如果我将update.partitionKey.partition()作为RowUpdateBuilder的第三个参数传递,则RowUpdateBuilder会给我一个错误 错误是:

我在网上看到了各种使用cassandra触发器写入审计表的示例。我一直在关注这一点:

然而,在我的用例中,我有一个审计表,它有一个复合分区键(主键((col1,col2),col3,col4))和多个集群列。 我已经能够通过添加audit.clustering(值)来添加集群列,但是我无法理解如何实现复合分区键。 如果我将update.partitionKey.partition()作为RowUpdateBuilder的第三个参数传递,则RowUpdateBuilder会给我一个错误

错误是: Java.lang.IllegalArgumentException:组件数无效,应为2,但得到1

当我将大小为2的数组作为第三个参数传递给rowUpdateBuilder时,会出现相同的错误


任何帮助都将不胜感激。

使用所有分区密钥构建复合分区密钥

要从一个或多个分区键生成复合分区键,请使用以下方法:

public DecoratedKey buildCompositePartitionKey(CFMetaData metadata, Object... partitionKey) {
    return metadata.decorateKey(
            CFMetaData.serializePartitionKey(
                    metadata.getKeyValidatorAsClusteringComparator().make(partitionKey)
            )
    );
}
例如:

CFMetaData metadata = Schema.instance.getCFMetaData("test_ks", "test_cf");
DecoratedKey compositePartitionKey = buildCompositePartitionKey(metadata, "col1 value", "col2 value");
RowUpdateBuilder audit = new RowUpdateBuilder(metadata, FBUtilities.timestampMicros(), compositePartitionKey);

谢谢!很好用!