如何连接具有相同维度的apache hive多维数据集

pexxcrt2  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(409)

我有两个立方体,结构如下:

-- 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是事实。之所以有两个独立的多维数据集,是因为第二个多维数据集涉及一个count distinct操作,该操作的成本太高,无法在单个步骤中运行。
我试过加入分组\uu id和nvl(a.dimension1,0)=nvl(b.dimension1,0)(对于每个维度)。但是,这似乎会创建更多的行。即使使用左联接,联接多维数据集中的记录数也比左联接多维数据集中的记录数大。
两个维度相同的多维数据集应该如何连接,以便不创建重复/无关的记录?

qni6mghb

qni6mghb1#

事实证明,困难仅仅在于我为空值选择默认值;当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)
;

相关问题