Cassandra:根据LIKE或CONTAINS等限制列出键空间中的所有表格?

时间:2018-04-05 14:53:53

标签: cassandra cassandra-3.0

每个键空间有很多表,因此我想根据限制条件过滤表。我尝试了这个查询,但它并没有真正给出我想要的预期结果:

SELECT table_name FROM system_schema.tables 
WHERE keyspace_name = 'test' 
and table_name >= 'test_001_%';

显示的输出是:

'table_name'
---------------------
 'test_001_metadata'    
 'test_001_time1'    
 'test_001_time2'    
 'test_001_time3'    
 'test_001_time4'    
 'test_002_metadata'    
 'test_002_time1'    
 'test_002_time2'
 'test_002_time3'

我真正想要的是: 显示的输出是:

'table_name'
---------------------
 'test_001_metadata'    
 'test_001_time1'    
 'test_001_time2'    
 'test_001_time3'    
 'test_001_time4'   

另一种方法是通过在table_name上创建二级索引来使用LIKE关键字。但是,如果它可能导致问题,我有点怀疑,因为它是一个系统表。另一个问题是,群集列ACTUALLY是否支持二级索引?

1 个答案:

答案 0 :(得分:1)

在删除上一个索引后,在SASI列上创建一个包含模式的table_name索引并尝试查询

SELECT table_name FROM system_schema.tables 
WHERE keyspace_name = 'test' 
and table_name LIKE '%test_001_%';

使用mode contains创建SASI索引的命令如下:

CREATE CUSTOM INDEX ON system_schema.tables(table_name) 
USING 'org.apache.cassandra.index.sasi.SASIIndex' 
WITH OPTIONS = {'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 
'case_sensitive': 'false', 'tokenization_normalize_uppercase': 'true', 'mode': 'CONTAINS'} 

对于第二个问题,您无法在PRIMARY KEY的任何内容上创建二级索引。