我正在开发一个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)?
发布于 2010-06-07 16:18:30
我认为您正在请求一个返回组的查询,以便特定列表中的所有维度都与该组相关联。也就是说,必须存在将该组映射到每个维度的行,并且您希望知道哪些组满足这一要求。
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中。
发布于 2010-06-07 16:12:15
如果我没理解错的话,你想要的是一个桥接表,看起来像这样:
group_key | dimension_set
-----------------------
1 | (1, 3, 4)
2 | (1, 2, 3)
3 | (1, 4)
我可以看到你有两个选项。
您可以将整个桥接表放入一个程序中,然后通过编程方式从维度集中确定组键。
或者,您可以使用数学公式对维键进行编码,得到一个整数,然后再对其进行索引。
像a + (b * 32) + (c * 32 * 32) + ...
这样的东西使用2的最低幂,它包含了唯一维度的数量。
https://stackoverflow.com/questions/2987652
复制相似问题