Кассандра: перечислить все таблицы в пространстве ключей на основе ограничений, таких как LIKE или CONTAINS?
У меня много таблиц на каждое пространство ключей, поэтому я хотел бы отфильтровать таблицы на основе критериев ограничения. Я пробовал этот запрос, но он не дает желаемого результата:
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'
Другой выход - использовать LIKE
ключевое слово путем создания вторичного индекса для table_name. Но я немного скептически отношусь, если это может вызвать проблемы, поскольку это системная таблица. Другая проблема заключается в том, поддерживает ли столбец кластеризации ФАКТИЧЕСКИЙ вспомогательный индекс?
1 ответ
Создать SASI
Индекс с режимом содержит на table_name
столбец после удаления предыдущего индекса и попробуйте запрос как
SELECT table_name FROM system_schema.tables
WHERE keyspace_name = 'test'
and table_name LIKE '%test_001_%';
Команда для создания 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
,