2016-04-20 2 views
0

J'ai un employé de table dans cassandra.Cassandra ordre par plusieurs colonnes

CREATE TABLE employee (
    emp_id  text, 
    joining_date TIMESTAMP, 
    salary  double, 
    first_name text, 
    dept   text, 
    last_name TIMESTAMP, 
    PRIMARY KEY (dept,emp_id)); 

J'ai besoin capacité de trier mes cql résultats de la requête basée sur des colonnes différentes. c'est-à-dire que j'ai besoin de support pour toutes les requêtes mentionnées ci-dessous. Y at-il un moyen que nous puissions atteindre cet objectif en cassandra natif.

select * from employee order by emp_id; 
select * from employee order by joining_date; 
select * from employee order by salary; 
select * from employee order by first_name; 
etc., 

Répondre

0

Ce n'est pas possible.

Le seul tri que vous pouvez avoir est sur la colonne de clustering et dans votre exemple c'est emp_id.

2

Vous n'avez pas commandé dans certaines instructions. Vous ne pouvez définir un ordre que dans votre instruction create. La raison en est simple: commander est un tueur de performance. Cassandras se concentre sur l'écriture de données. Cela signifie: Cassandra a une très bonne performance dans l'écriture de données à votre commande définie. L'ordre de Cassandras est basé sur la clé primaire. La première partie de la clé primaire est la clé de partition. La bonne clé de partition est vraiment importante! Toutes les lignes avec la même clé de partition sont sur la même machine. Cela signifie: Filtrer des lignes avec la même clé de partition est une opération avec de bonnes performances. Filtrer des lignes sans la même partition est vraiment lent. Mais vous ne pouvez pas utiliser seulement une ou deux clés de partition. Si vous faites cela, vous n'utilisez pas les avantages de Cassandra. Les autres parties de votre clé primaire sont les clés de colonnes. Cassandra triera vos données dans l'ordre des clés primaires. Dans votre exemple, Cassandra triera uniquement par emp_id. Si vous avez besoin de plusieurs commandes, créez une nouvelle famille de colonnes (table). Dans votre cas, vous pouvez créer cette table:

employeeByDeptDate (clé primaire (département, joining_date))

employeeByDeptSalary (clé primaire (dept, salaire))

employeeByDeptFirstName (clé primaire (département, prenom))

employeeByDeptEmp (clé primaire (département, emp_id))

maintenant, vous dira: que .. Pourquoi je dois créer plus d'une table. Cassandra est une base de données dénormalisée. Ce n'est pas un problème pour sauvegarder vos données plus d'une fois. Les stockages HDD sont bon marché. Cassandra 3.0 a une nouvelle fonctionnalité, appelée, les vues matérialisées. Un endroit où vous pouvez gérer vos données dupliquées.