我对Qubole.We非常陌生,最近将Oracle数据迁移到Saleforce.We,在Qubole数据中有ebiz和Salesforce数据,Lake.There和Salesforce.What之间存在一些差异,我可以在Qubole上使用这种技术来发现这些差异吗?
发布于 2022-01-13 12:26:32
这是我用来比较两个表的方法。将两个表组中的所有度量按所有维度进行聚合,然后使用完全连接进行比较,它将返回来自两个表的所有连接记录,而不是连接记录。这样,您就可以在表中发现缺少数据,也可以在度量中发现差异。
例如,使用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中进行比较,而不是在其中进行筛选。
度量是可以聚合的一切。例如,您可以使用一些维度作为度量,比如这个count(distinct user) as user_cnt和group by date, site_name。使用完全连接的查询将显示不同的内容。如果联接条件中使用的某些维度可以为null,请使用nvl()来匹配这些行,如我的示例所示。当然,不要在groupby中使用太多的维度,您可以跳过其中的一些维度,只有在发现聚合级别上的差异之后才能向下挖掘。
在聚合中出现差异之后,可以向下钻取并比较未聚合的行,并通过一些度量进行过滤。
https://stackoverflow.com/questions/70253290
复制相似问题