2

我对 Qubole 很陌生。我们最近将 Oracle ebiz 数据迁移到 Saleforce。我们在 Qubole Data Lake 中同时拥有 Ebiz 和 Salesforce 数据。Ebiz 和 Salesforce 之间存在一些差异。我可以在 Qubole 上使用什么技术来找到这些差异?

4

1 回答 1

0

这是我用来比较两个表的方法。将两个表中的所有指标按所有维度分组,然后使用 FULL JOIN 进行比较,它将返回两个表中所有已连接和未连接的记录。通过这种方式,您可以在两个表中找到缺失的数据和指标的差异。

例如像这样,使用 Hive:

with 
sf as (
select dimension1, dimension2, ... dimensionN,
       sum(metric1) as metric1,
       sum(metric2) as metric2,
       ...
       sum(metricN) as metricN,
       count(*)     as cnt
  from Salesforce_table 
 group by dimension1, dimension2, ... dimensionN
),
eb as (
select dimension1, dimension2, ... dimensionN,
       sum(metric1) as metric1,
       sum(metric2) as metric2,
       ...
       sum(metricN) as metricN,
       count(*)     as cnt
  from Ebiz_table 
group by dimension1, dimension2, ... dimensionN
)

--compare data
select sf.*, eb.*
  from sf full join eb on NVL(sf.dimension1,'')=NVL(eb.dimension1)
                      and sf.dimension2=eb.dimension2
                      ...
                      and sf.dimension3=eb.dimension3
--Filter discrepancies only
 where (   sf.metric1!=eb.metric1 
        or sf.metric2!=eb.metric2
        ...
        or sf.metricN!=eb.metricN
        or sf.cnt!=eb.cnt
        or sf.dimension1 is null
        or eb.dimension1 is null
        )

您还可以轻松地在 Excel 中进行比较,而不是在 WHERE 中进行过滤。

指标是可以聚合的一切。count(distinct user) as user_cnt例如,您也可以使用一些维度作为指标group by date, site_name。完全连接的查询将显示差异。如果连接条件中使用的某些维度可以为空,请使用 nvl() 来匹配此类行,如我的示例中所示。当然,不要在 groupby 中使用太多维度,您可以跳过其中的一些,只有在发现聚合级别的差异后才能向下钻取。

在聚合出现差异后,您可以向下钻取并比较未聚合的行,并按某些指标过滤。

另请参阅:https ://stackoverflow.com/a/67382947/2700344

于 2022-01-13T12:26:32.903 回答