Вам нужны данные в лучшем формате для запросов. Есть два возможных дизайна:
Одна таблица со столбцом для каждого атрибута
Table_Id | Categories | Value | CAT-AAA1 | CAT-AAA1-1 | CAT-AAA2
<ID> | AAA1; AAA1-1; AAA2 | 10 | TRUE | TRUE | TRUE
<ID> | AAA1; AAA1-2; AAA2 | 15 | TRUE | FALSE | TRUE
<ID> | AAA2 | 5 | FALSE | FALSE | TRUE
.....
Это будет включать добавление столбца для каждого атрибута, а затем запуск некоторых команд UPDATE для заполнения столбцов, таких как:
UPDATE <table> SET CAT-AAA1 = TRUE WHERE Categories CONTAINS '%AAA1;%'
Тогда было бы легко запросить таблицу:
SELECT SUM(Value) FROM <table> WHERE CAT-AAA1 AND CAT-AAA1-2;
Redshift может обрабатывать до 1600 столбцов на таблицу. Вполне нормально иметь широкие таблицы в хранилище данных.
Таблица один-ко-многим
Эта опция может включать создание новой таблицы, которая связывает каждую строку с несколькими категориями:
Table_Id | Category
1 | AAA1
1 | AAA1-1
1 | AAA1-2
2 | AAA1
Затем можно выполнить запрос, присоединившись к этой таблице поиска, чтобы найти правильные строки, например:
SELECT SUM(Value)
FROM <table>
JOIN <lookup-table> USING Table_Id
WHERE Category = 'AAA1';