2015-10-05 41 views
0

我有一個樣本表結構是這樣的:如何應用cassandra中每個唯一組合列值的限制?

CREATE TABLE testcomposite ( day text, name text, lpt varint, details text, PRIMARY KEY (day, name, lpt) )

,我有這樣的數據:

cqlsh:KS> select * from testcomposite;

day | name | lpt | details ------+---------+---------+-------- day1 | name1 | 10 | abcdef day1 | name1 | 11 | abcdef day1 | name1 | 21 | abcdef day1 | name2 | 10 | abcdef day1 | name2 | 11 | abcdef

是否可以查詢得到像這樣的結果,其中每行包含唯一的name字段,其​​最大值爲lpt值?

day | name | lpt | details ------+---------+---------+-------- day1 | name1 | 21 | abcdef day1 | name2 | 11 | abcdef

+0

你將不得不使用用戶定義的函數。 http://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateFunctionsTOC.html –

回答

1
CREATE FUNCTION state_group_and_max(state map<text, int>, type text, amount int) 
    CALLED ON NULL INPUT 
    RETURNS map<text, int> 
    LANGUAGE java AS ' 
    Integer count = (Integer) state.get(type); if (count == null) count = amount; else count = Math.max(count, amount); state.put(type, count); return state; ' ; 


    CREATE OR REPLACE AGGREGATE group_and_max(text, int) 
    SFUNC state_group_and_max 
    STYPE map<text, int> 
    INITCOND {}; 

cqlsh:test> select group_and_max(name,lpt) from testcomposite where day = 'day1'; 

test.group_and_max(name, lpt) 
------------------------------- 
    {'name1': 21, 'name2': 11} 
+0

感謝您的答案,但我的版本的cassandra不支持UDF。我打算重新設計數據模型。看起來我們只能從左到右依次對複合列應用標準。 – Vigneshwaran

相關問題