如何加入具有相同维度的 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)
;