当前位置: 首页 > 知识库问答 >
问题:

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

訾高明
2023-03-14

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

然而,在我的用例中,我有一个审计表,它有一个复合分区键(主键((col1,col2),col3,col4))和多个集群列。我已经能够通过添加审计来添加集群列。集群(值),但我不知道如何实现复合分区键。如果我通过更新,RowUpdateBuilder会给我一个错误。分区键。partition()作为rowUpdateBuilder的第三个参数。

错误是: Java.lang.IllegalArgumentExcoop:无效的组件数量,预期为2,但得到1。

当我将大小为2的数组作为第三个参数传递给rowUpdateBuilder时,我得到了同样的错误。

任何帮助都将不胜感激。

共有1个答案

陈嘉荣
2023-03-14

从所有分区密钥生成复合分区密钥

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

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);
 类似资料:
  • 问题内容: 我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。 我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。 现在的问题是关于复合PK映射。例如 表A具有复合PK。 表B也有一个复合PK,此复合PK的一部分是A的PK,此处也用作FK。 我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hi

  • 我们有一个叫做cassandra扫描的程序,它使用spark-cassandra连接器在一个非常大的表中列出分区键的所有值。该表有大约1700万个Cassandra分区,每个分区平均有200行。包含该表的Cassandra集群在6个节点上运行DSE 5.1.8。包含该表的键空间的复制因子为3。 以下是密钥空间和表的简化定义。 cassandra-scan中用于列出分区键的所有值的语句如下: 我们使

  • 类似Bigtable的数据库存储按其键排序的行。 Cassandra使用分区和聚类键的结合来保持数据的分布和排序;但是,您只能通过使用分区键来选择行! 用于上述查询的Cassandra存储层的可视化。

  • 问题内容: 我有以下内容: 我喜欢做的事情就是让不区分大小写,因此,它可以是,等,仍然匹配。 有没有办法说必须不区分大小写? 问题答案: 在之后添加。此方法将字符串转换为小写字符串。然后,使用using 代替。 使用正则表达式也可以实现相同的目的(在要针对动态模式进行测试时特别有用):

  • 我有一个带有复合分区键的 cassandra 表(time_bucket 时间戳,节点 int)。time_bucket值是插入数据的时间,秒转换为 00,节点值范围为 0 到 100 spark作业每分钟运行一次,从表中提取数据。该表包含近2500万条记录,每分钟都有记录被添加。 如果我的 Spark 作业每次运行时都选择所有记录,则作业将在 2 分钟内完成。但是如果我使用: s < code