【发布时间】:2014-05-26 13:04:17
【问题描述】:
我有一个类似这样的 Cassandra 架构:
CREATE TABLE table1 (a1 text,
a2 text,
b1 text,
b2 text,
c1 text,
c2 text,
PRIMARY KEY ( (a1, a2), b1, b2) )
);
这是用于时间序列数据的。 a1 是我的 id,a2 是我的时间桶。
问题:如何正确选择整个时间段?
我可以通过 a1 或 a2 进行选择。但是如果我通过 a1 AND a2 选择请求超时。
SELECT * FROM table1 WHERE a1 = 'id1' AND a2 = 'time_bucket37' LIMIT 100 ALLOW FILTERING;
结果:请求未在 rpc_timeout 内完成。
这是我的::
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);
我正在尝试:
SELECT *
FROM DataSimple
WHERE dc_name = 'dc1'
AND time_bucket = '2014031922'
AND vm_name = 'vm1' LIMIT 1000;
【问题讨论】:
-
您确定您正在使用此架构吗?您甚至无法在架构中选择 a1 或 a2 。您会收到“错误请求:分区键部分 a2 必须受到限制,因为前一部分是”。请从 cqlsh 粘贴“DESCRIBE table table1”的输出。
-
我可以选择 ... 其中 a1='a';或选择 ... 其中 a2='g';没问题。描述显示了我的架构和索引。今晚我会贴上。
-
您还必须有一些索引才能运行这些查询。请将它们添加到帖子中。
-
取消允许过滤此查询。这可能对你有用。无论如何,请随时通知我们。
-
它让我使用允许过滤