如何在Teradata中将一个大表(1M+)与一个引用表连接起来



我有以下两个表-
表A(300万行;这是"数据表")
表B

架构-
表A-id,field1,field2,field3,num_of_actual_items,num_of _possible_items
表B-field1,field 2,field3.num_of_possible _items

背景
表A中有14000个唯一的id
因此[表a中的select count(distinct id)]给出14000作为答案。

field1、field2field3有2300种可能的组合,所有这些组合及其相应的num_of_possible_items都列在表B中。

当给定">field1-field2-field3"组合的num_of_actual_items为0时,tableA不包含id的条目这就是我要解决的问题

理想情况下,表A应具有32200000行(14000个IDX 2300个组合)。我的查询如下:

select A1.id, A1.field1, A1.field2, A1.field3, A1.num_of_actual_items, 
A1.num_of_possible_items
from tableA A1
union
select distinct A2.id, B.field1, B.field2, B.field3, 0 as 
num_of_actual_items, B.num_of_possible_items
from tableA A2, tableB B
where A2.field1 || A2.field2 || A2.field3 <> B.field1 || B.field2 || 
B.field3

上面的查询将为每个id和相应的field1-field2-field3组合提供2行(一行用于实际的num_of_actual_items,一行用于人为添加的0条目)
在下一步中,可以通过进行聚合(最大值为num_of_actual_items)来删除重复的行,问题就解决了。

但是,此解决方案仅在tableA具有5000-10000行时有效。当我在300万行中尝试它时,我会得到一个"假脱机空间不足"的错误。

上面的查询实际上填充了一个volatile表,我已经在field1、field2&field3,还收集了所有3项的统计数据。

有什么想法可以为这么大的数量优化/更改查询吗
我使用的是Teradata。

编辑:我添加了Andrew(限制不匹配的行)和dnoeth(只返回不同的行,而不是所有行)的建议,但仍然无效
我的线轴空间一直不够用。

联合中的第二个查询是一个CROSS联接,它会在distinct之前产生2300*3000000行。

加入前必须应用distinct

select A1.id, A1.field1, A1.field2, A1.field3, A1.num_of_actual_items, 
A1.num_of_possible_items
from tableA A1
union ALL
select A2.id, B.field1, B.field2, B.field3, 0 as num_of_actual_items,  
B.num_of_possible_items
from (select distinct id from tableA) A2, tableB B

最新更新