我们如何使用 cassandra 中的 rowUpdateBuilder 写入包含复合分区键的审计 table?

How do we use rowUpdateBuilder in cassandra to write to an audit table containing a composite partition key?

我在网上看到了各种使用 cassandra 触发器写入审计的示例 table。我正在关注这个: https://github.com/apache/cassandra/blob/cassandra-3.0/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java

但是在我的用例中,我有一个审计 table,它有一个复合分区键( PRIMARY KEY ((col1,col2),col3,col4) )和多个集群列。 我已经能够通过添加 audit.clustering(values) 来添加集群列,但我无法弄清楚如何实现复合分区键。 如果我将 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);