Pregunta

Tengo un esquema de Cassandra similar a este:

CREATE TABLE table1 (a1 text,
  a2 text,
  b1 text,
  b2 text,
  c1 text,
  c2 text,
  PRIMARY KEY ( (a1, a2), b1, b2) )
);

Esto es para datos de series de tiempo.a1 es mi identificación y a2 es mi período de tiempo.
PREGUNTA:¿Cómo selecciono correctamente un período de tiempo completo?

Puedo seleccionar por a1 o a2.Pero si selecciono por a1 Y a2, la solicitud caduca.

SELECT * FROM table1 WHERE a1 = 'id1' AND a2 = 'time_bucket37' LIMIT 100 ALLOW FILTERING;

Resultado:La solicitud no se completó dentro de rpc_timeout.

Aquí está mi::

cqlsh:testmulti1> DESCRIBE TABLE datasimple;

CREATE TABLE datasimple (
  dc_name text,
  time_bucket text,
  partition int,
  perf_name text,
  vm_name text,
  measurement_time timestamp,
  perf_data int,
  platform text,
  PRIMARY KEY ((dc_name, time_bucket, partition), perf_name, vm_name, measurement_time)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

CREATE INDEX datasimple_dc_name_idx_10 ON datasimple (dc_name);

CREATE INDEX datasimple_time_bucket_idx_10 ON datasimple (time_bucket);

CREATE INDEX datasimple_perf_name_idx_10 ON datasimple (perf_name);

CREATE INDEX datasimple_vm_name_idx_10 ON datasimple (vm_name);

CREATE INDEX datasimple_platform_idx_10 ON datasimple (platform);

Estoy tratando de:

SELECT * 
FROM DataSimple 
WHERE dc_name = 'dc1' 
AND time_bucket = '2014031922' 
AND vm_name = 'vm1' LIMIT 1000;
¿Fue útil?

Solución

SELECT * 
FROM DataSimple 
WHERE dc_name = 'dc1' 
AND time_bucket = '2014031922'
AND vm_name = 'vm1'
LIMIT 1000;

Eso no va a funcionar.Su actual PRIMARY KEY es:

PRIMARY KEY ((dc_name, time_bucket, partition),
  perf_name, vm_name, measurement_time)

Intente pensar en el uso de una CLAVE PRIMARIA compuesta en Cassandra como una ruta jerárquica, comenzando de izquierda a derecha. dc_name, time_bucket, y partition son parte de su clave de partición, por lo que deberá incluir cada una de ellas en su WHERE para garantizar que Cassandra pueda encontrar dónde se almacenan sus datos.

Todas las columnas posteriores son columnas agrupadas (perf_name, vm_name, y measurement_time), que determinan el orden de clasificación de sus datos en el disco.Nuevamente, no puede elegir cuál de estos incluir.Debe buscarlos en el orden en que están definidos en su esquema.Así que si quieres consultar por vm_name, entonces también debe asegurarse de que las claves de la columna anterior (perf_name en este caso) también están presentes en su WHERE cláusula.

Básicamente para consultar este esquema, agregue ANDs a tu WHERE cláusula para:

  • dividir
  • nombre_perf
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top