簡體   English   中英

使用Astyanax客戶端刪除除一列以外的所有列及其數據?

[英]Delete all the columns and its data except for one columns using Astyanax client?

我正在一個項目中,需要使用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
    }
}

現在如何刪除所有列及其數據,除了我的rowKey的所有用戶ID的一列以外...

有什么想法可以有效地使用Astyanax客戶端完成此操作嗎?

看來Astyanax當前不支持切片刪除功能,這是存儲引擎和Thrift API的最新功能。 如果您查看節儉的API參考: http ://wiki.apache.org/cassandra/API10您會看到刪除操作采用了SlicePredicate,后者可以采用列列表或SliceRange。 SliceRange可以指定大於或小於您要保留的列的所有列,因此允許您執行兩次切片刪除操作以刪除該行中除一列以外的所有列。

不幸的是,Astyanax僅能刪除整行或已定義的列列表,而不能包裝完整的SlicePredicate功能。 這樣看來,您有兩種選擇:1)有關發送原始節儉切片刪除,繞過Astyanax包裝程序的信息,或2)進行列讀取,然后進行行刪除,然后進行列寫入。 這在理想情況下不是很有效,但是如果不經常進行的話就不應該太過禁止。 或3)閱讀整行並明確刪除除要保留的列以外的所有列。

我應該注意,盡管存儲引擎和Thrift API都支持切片刪除,但CQL還沒有明確支持。

我提交了這張票以解決最后的限制: https : //issues.apache.org/jira/browse/CASSANDRA-6292

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM