gpt4 book ai didi

java - 使用 Astyanax 客户端删除除一列之外的所有列及其数据?

转载 作者:行者123 更新时间:2023-11-30 04:10:25 24 4
gpt4 key购买 nike

我正在开发一个项目,其中我需要使用 Astyanax 客户端删除 Cassandra 中除一列及其数据之外的所有列及其数据。

我有一个如下所示的动态列族,并且该列族中已经有几百万条记录。

create column family USER_TEST
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and gc_grace = 86400
and column_metadata = [ {column_name : 'lmd', validation_class : DateType}];

我有 user_id 作为 rowKey 和我拥有的其他列是这样的 -

a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,lmd

现在我需要删除除 a15 列之外的所有列及其数据。意思是,我想保留所有 user_id(rowKey)a15 列及其数据,并删除其余的列及其数据..

我已经知道如何使用 Astyanax 客户端针对特定 rowKey 从 Cassandra 删除数据 -

public void deleteRecord(final String rowKey) {

try {
MutationBatch m = AstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();

m.withRow(AstyanaxConnection.getInstance().getEmp_cf(), rowKey).delete();

m.execute();

} catch (ConnectionException e) {
// some code
} catch (Exception e) {
// some code
}
}

现在如何删除所有列及其数据,除了所有用户 ID 的一列(即我的 rowKey)...

您有什么想法如何使用 Astyanax 客户端有效地完成此操作?

最佳答案

Astyanax 目前似乎不支持切片删除功能,该功能是存储引擎和 Thrift API 中最近添加的功能。如果您查看 Thrift API 引用:http://wiki.apache.org/cassandra/API10您会看到删除操作采用 SlicePredicate,它可以采用列列表或 SliceRange。 SliceRange 可以指定大于或小于您想要保留的列的所有列,这样您就可以执行两个切片删除操作来删除行中除一列之外的所有列。

不幸的是,Astyanax 只能删除整行或定义的列列表,并且不能包含完整的 SlicePredicate 功能。所以看起来你有两个选择:1) 查看有关发送原始 thrift 切片删除、绕过 Astyanax 包装器的信息,或者2)先进行列读取,然后进行行删除,然后进行列写入。这并不是理想的效率,但如果不是太频繁地进行,也不应该令人望而却步。或者3) 读取整行并显式删除除要保留的列之外的所有列。

我应该注意到,虽然存储引擎和 thrift API 都支持切片删除,但 CQL 尚未明确支持这一点。

我提交此票证是为了解决最后一个限制: https://issues.apache.org/jira/browse/CASSANDRA-6292

关于java - 使用 Astyanax 客户端删除除一列之外的所有列及其数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19747005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com