Получить ключ группы из таблицы моста

Я разрабатываю процесс ETL, и мне нужна таблица моста для отношения один ко многим между таблицей фактов и таблицей измерений (база данных MySQL). Количество комбинаций ограничено (несколько тысяч), поэтому я хочу повторно использовать групповые ключи из таблицы мостов, чтобы ограничить размер.

Любая группа измерений, принадлежащая строке фактов, будет состоять из нескольких ключей измерений (от 1 до 15), назначенных уникальному ключу группы, как показано ниже:

group_key | dimension_key
-----------------------
1         | 1
1         | 3
1         | 4
2         | 1
2         | 2
2         | 3
3         | 1
3         | 4

Как мне получить уникальный ключ группы для измерений 1,3,4 (т.е. 1)?

2 ответа

Решение

Я думаю, что вы запрашиваете запрос, который возвращает группы так, что все измерения в определенном списке связаны с группой. То есть должны существовать строки, сопоставляющие эту группу каждому измерению, и вы хотите знать, какие группы удовлетворяют этому.

SELECT f1.group_key
FROM facts f1
JOIN facts f2 ON (f1.group_key = f2.group_key)
JOIN facts f2 ON (f1.group_key = f2.group_key)
WHERE f1.dimension_key = 1
  AND f2.dimension_key = 3
  AND f3.dimension_key = 4;

Другое решение заключается в подсчете совпадающих строк в группе:

SELECT f.group_key
FROM facts f
WHERE f.dimension_key IN (1,3,4)
GROUP BY f.group_key
HAVING COUNT(*) = 3;

Но я нахожу это обычно GROUP BY является убийцей производительности, особенно в MySQL.

Если я вас правильно понимаю, вам нужна таблица-мост, которая выглядит следующим образом:

group_key | dimension_set
-----------------------
1         | (1, 3, 4)
2         | (1, 2, 3)
3         | (1, 4)

У вас есть 2 варианта, которые я вижу.

Вы можете вытащить всю таблицу мостов в программу и программно определить ключ группы из набора измерений.

Или вы можете закодировать ключ измерения, используя математическую формулу, чтобы получить целое число, которое вы не можете индексировать.

Что-то вроде a + (b * 32) + (c * 32 * 32) + ... Используйте самую низкую степень 2, которая включает в себя количество уникальных измерений.

Другие вопросы по тегам