我们如何使用 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);
我在网上看到了各种使用 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);