如何加入具有相同尺寸的Apache Hive多维数据集

时间:2016-02-24 00:16:56

标签: join hive hql cube

我有两个具有以下结构的立方体:

-- 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)(对于每个维度)。但是,这似乎创建了更多的行。即使使用左连接,连接立方体中的记录数也会大于左立方体。

如何连接具有相同尺寸的两个立方体,以便不会创建重复/无关的记录?

1 个答案:

答案 0 :(得分:0)

事实证明,难度只是我选择的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)
;