如何加入具有相同维度的 Apache Hive 多维数据集
How to join Apache Hive cubes with identical dimensions
我有两个具有以下结构的多维数据集:
-- cube 1
select
dimension1,
dimension2,
sum(measure1),
sum(measure2),
grouping__id
from
table1
group by
dimension1,
dimension2
with cube
;
-- cube 2
select
dimension1,
dimension2,
count(distinct measure3),
grouping__id
from
table2
group by
dimension1,
dimension2
with cube
;
我想将这两个多维数据集连接在一起,以便有一个包含 measure1、measure2 和 measure3 作为事实的多维数据集。之所以有两个单独的多维数据集,是因为第二个多维数据集涉及一个计数不同的操作,该操作对于 运行 在单个步骤中来说太昂贵了。
我尝试加入 grouping__id 和 nvl(a.dimension1, 0) = nvl(b.dimension1, 0) (对于每个维度)。但是,这似乎会创建更多的行。即使使用左连接,连接的立方体中的记录数也大于左立方体。
如何连接两个具有相同维度的多维数据集,以便不创建 duplicate/extraneous 记录?
事实证明,困难仅仅在于我选择 NULL 的默认值;当 0 是其中一个维度的可能值时选择 0 会导致许多无关的记录。最后,我将 0 更改为 -1000(我确认的值不是数据中包含的值)并按照我上面的描述加入。
于是,最终的查询结果如下:
select
c1.dimension1,
c2.dimension2,
c1.measure1,
c1.measure2,
c2.measure3,
c1.grouping__id
from
cube1 c1
join cube2 c2 on c1.grouping__id = c2.grouping__id
and nvl(c1.dimension1, -1000) = nvl(c2.dimension1, -1000)
and nvl(c1.dimension2, -1000) = nvl(c2.dimension2, -1000)
;
我有两个具有以下结构的多维数据集:
-- cube 1
select
dimension1,
dimension2,
sum(measure1),
sum(measure2),
grouping__id
from
table1
group by
dimension1,
dimension2
with cube
;
-- cube 2
select
dimension1,
dimension2,
count(distinct measure3),
grouping__id
from
table2
group by
dimension1,
dimension2
with cube
;
我想将这两个多维数据集连接在一起,以便有一个包含 measure1、measure2 和 measure3 作为事实的多维数据集。之所以有两个单独的多维数据集,是因为第二个多维数据集涉及一个计数不同的操作,该操作对于 运行 在单个步骤中来说太昂贵了。
我尝试加入 grouping__id 和 nvl(a.dimension1, 0) = nvl(b.dimension1, 0) (对于每个维度)。但是,这似乎会创建更多的行。即使使用左连接,连接的立方体中的记录数也大于左立方体。
如何连接两个具有相同维度的多维数据集,以便不创建 duplicate/extraneous 记录?
事实证明,困难仅仅在于我选择 NULL 的默认值;当 0 是其中一个维度的可能值时选择 0 会导致许多无关的记录。最后,我将 0 更改为 -1000(我确认的值不是数据中包含的值)并按照我上面的描述加入。
于是,最终的查询结果如下:
select
c1.dimension1,
c2.dimension2,
c1.measure1,
c1.measure2,
c2.measure3,
c1.grouping__id
from
cube1 c1
join cube2 c2 on c1.grouping__id = c2.grouping__id
and nvl(c1.dimension1, -1000) = nvl(c2.dimension1, -1000)
and nvl(c1.dimension2, -1000) = nvl(c2.dimension2, -1000)
;