versiones ventajas tutorial para nombre mitologia desventajas descargar cassandra

ventajas - Cassandra-Cómo crear un nombre de columna compuesto(no clave) usando cqlsh



descargar cassandra para windows (2)

Estoy intentando modelar una familia de columnas en Cassandra 1.1, que lógicamente se ve así:

Entp: //CF //rowkey-> entp_name_xyz: {entp_full_name: "full_name_xyz", some_value: 1, policy: {policy_name: "default policy", type: "type 1", prop_1: "prop 1", ... }, rules: {rule_1:, rule_2:,rule_3:} }

Las consultas que intento modelar son: Obtenga todas las políticas con un nombre entp, Obtenga todas las reglas otorgadas a entp, Obtenga todas las columnas con un entp_name Estoy planeando modelar esta familia de columnas como si tuviera "filas anchas" donde una fila se parece a esto:

RowKey:- entp_name_xyz, column_name:- policy:p1 Value:-{JSON object - {policy_name: "default policy", type: "type 1", prop_1: "prop 1", ...}} column_name:- policy:p2 Value:-{JSON object - {policy_name: "default policy2", type: "type 1", prop_1: "prop 1", ...}} column_name: rule:r1 where r1 is a rowkey of a Rules column family Value: Null

Ahora mi pregunta es en cqlsh o cassandra-cli,

  1. ¿Cómo puedo insertar un nombre de columna compuesto como policy: p1?
  2. Con este esquema, ¿es posible tener una consulta como: seleccione * de entp donde column_name como "policy: *" y entp_name = xyz para poder leer todas las columnas de política?
  3. ¿Cómo establezco un valor nulo para una columna? Leí en algunos foros que no debería necesitar establecer un valor nulo porque es equivalente a no tener un valor. Pero considere el caso donde tiene un esquema estático con col1, col2 y col3 y quiero insertar una fila con col3 = null, pero con col1 y col2 con algunos valores. ¿Cuál es la sintaxis de cqlsh para insertar dichos datos (no pude encontrarlo en la documentación) porque el siguiente da un error:

    insertar en valores entp (col1, col2, col3) ("abc", "xyz", nulo)

¡Gracias!


  1. Los compuestos son mucho más fáciles de usar en CQL3, que está disponible para usted en cassandra 1.1, así que lo usaré en mi respuesta. Las tablas con claves primarias de componentes múltiples en CQL3 son equivalentes a filas anchas en la capa del motor de almacenamiento (Cassandra).

    Si he interpretado a qué se parecen sus datos de política y reglas, esta es una posible respuesta:

    CREATE TABLE entp_policies ( entp_name text, policy_name text, policy_value text, PRIMARY KEY (entp_name, policy_name) ); CREATE TABLE entp_rules ( entp_name text, rule_name text, rule_value text, PRIMARY KEY (entp_name, rule_name) );

    Lo usarías así:

    INSERT INTO entp_policies (entp_name, policy_name, policy_value) VALUES (''entp_name_xyz'', ''p1'', ''{policy_name: "default policy", type: "type 1", ...}''); INSERT INTO entp_policies (entp_name, policy_name, policy_value) VALUES (''entp_name_xyz'', ''p2'', ''{policy_name: "default policy2", type: "type 1", ...}''); INSERT INTO entp_rules (entp_name, rule_name) VALUES (''entp_name_xyz'', ''r1''); -- Get all policies given an entp name SELECT * FROM entp_policies WHERE entp_name = ''entp_name_xyz''; -- Get all rules given an entp SELECT * FROM entp_rules WHERE entp_name = ''entp_name_xyz''; -- Get all columns given an entp_name (both of the above)

  2. Con su esquema, sí, sería posible tener una consulta como esa, pero sería un poco más meticuloso que con mi versión, además de que CQL2 está en desuso.

  3. Así es, solo evita insertar el valor. No hay ningún NULL explícito en cql ( todavía ), pero podrías hacer:

    insert into entp (col1,col2) values (''abc'',''xyz'');

¡Espero que ayude!


Puede usar ambas reglas y políticas en una tabla si define otra columna en el compuesto

create table entp_details( entp_name text, type text, name text, value text, primary key (entp_name, type, name));

Aquí el tipo es (Política o Regla).

INSERT INTO entp_details (entp_name, type, name, value) VALUES (''entp_name_xyz'', ''Policy'', ''p1'', ''{policy_name: "default policy", type: "type 1", ...}''); INSERT INTO entp_details (entp_name, type, name, value) VALUES (''entp_name_xyz'', ''Policy'', ''p2'', ''{policy_name: "default policy2", type: "type 1", ...}''); INSERT INTO entp_details (entp_name, type, name, value) VALUES (''entp_name_xyz'', ''Rule'', ''r1'', null);

Y las consultas son como

select * from entp_details WHERE entp_name = ''entp_name_xyz'' and type = ''Policy''; select * from entp_details WHERE entp_name = ''entp_name_xyz'' and type = ''Rule'';