2015-10-05 1 views
0

j'ai une structure de la table d'échantillons comme ceci:Comment appliquer une limite pour chaque valeur de colonne composite unique dans Cassandra?

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

et j'ai les données comme ceci:

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

Est-il possible d'interroger pour obtenir un le résultat comme ceci où chaque rangée contient le champ name unique avec leur plus haute valeur lpt?

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

+0

Vous devrez utiliser les fonctions définies par l'utilisateur. http://docs.datastax.com/fr/cql/3.3/cql/cql_using/useCreateFunctionsTOC.html –

Répondre

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

Merci pour la réponse, mais les fonctions UDF ne sont pas supportées dans ma version de cassandra. Je prévois de repenser le modèle de données. Il semble que nous puissions appliquer les critères sur les colonnes composites un par un de gauche à droite seulement. – Vigneshwaran