簡體   English   中英

Trident Storm-Cassandra,使用多個主鍵寫入表

[英]Trident Storm-Cassandra, writing to a table with multiple primary keys

我正在學習如何在Cassandra 2.0.5和Storm版本0.9.0.1中使用Storm's Trident。 我也在使用com.hmsonline storm-cassandra 0.4.0-rc4 contrib。

我的目標只是將一些文本行插入具有id(int),name(text)和句子(text)列的表中。 id和name是主鍵。

partitionPersist需要一個StateUpdater ,為此,我正在使用com.hmsonline.storm.cassandra.trident.CassandraUpdater<K, C, V> 但是從看來,它只能得到一個鍵作為輸入,而不是兩個(我需要id和name)。 元組映射器( TridentTupleMapper )也使用一個鍵:

TridentTupleMapper<K, C, V> tupleMapper

也許我遺漏了一些東西,但是如何定義多個列作為鍵?

讓我指出您和我和Brian一起從事的項目,該項目利用了帶有風暴的卡桑德拉: https : //github.com/hmsonline/storm-cassandra-cql

您可以查看幾個示例,以了解如何開發適合您的鍵/列映射的CqlTupleMapper。 該代碼仍在開發中,但是對於CQL3有合適的支持映射實現,該實現可用於持久聚合以及僅存儲分區持久性。

為了滿足您的需要,您需要定義一個三叉戟拓撲,該拓撲通過以下方法對傳入數據(句子)進行分組:

inputStream.groupBy(new Field("sentences"))

然后,您將實現CqlTupleMapper-特別是map(K鍵,V值),該映射將具有自定義CQL插入語句,該語句將鍵映射到其傳遞的值。 您的查詢將類似於:

@Override
public Statement map(List<String> keys, String value) {
    Insert statement = QueryBuilder.insertInto(KEYSPACE_NAME, TABLE_NAME);
    statement.value("id", keys.get(0));
    statement.value("name", keys.get(1));
    statement.value("sentence", value);
    return statement;
}

希望對您有所幫助。

暫無
暫無

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

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