我有以下2表 -
TABLEA(3萬行;這是 「數據表」)
tableB的(2300行;這是 「參考表」)如何使用Teradata中的參考表來加入大表(1M +)?
架構 -
TABLEA - ID,字段1,字段2,字段3,num_of_actual_items,num_of_possible_items
tableB的 - 字段1,字段2,字段3,num_of_possible_items
背景
有14000個獨特IDS在表A。
因此,[tableA]中的[select count(distinct id)]給出14000作爲答案。
還有的field1的2300個可能的組合,場2和場3和他們都與它們對應的num_of_possible_items在tableB的上市。
TABLEA不包含的ID條目時num_of_actual_items對於給定的「字段1字段2字段3」組合爲0 這就是我試圖解決。
理想TABLEA應該有3220萬行(14000個IDS X 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
上述查詢會給2行的每個ID和對應FIELD1-FIELD2字段3組合(一個用於真實num_of_actual_items和一個用於人工添加0條目)。
在下一步中,可以通過執行聚合來刪除重複的行(最大值爲num_of_actual_items),問題就解決了。
但是,此解決方案僅適用於表A具有5000-10000行時。當我用300萬行進行嘗試時,我得到一個「超出假脫機空間」的錯誤。
上面的查詢實際上填充揮發性表,我已經創建了一個FIELD1指數,場2 &字段3,並在所有3
任何想法收集統計我能做些什麼來優化/更改查詢這樣的大量?
我正在使用Teradata。
編輯:我添加了Andrew的建議(限制行不匹配)和dnoeth(只返回不同的行而不是所有),但仍然無濟於事。
我一直用完假冒空間。
你能不能添加約束你的第二個查詢,讓您只返回不匹配的行?類似於「a2.field1 ||」的地方a2.field2 || a2.field3 <> b.field1 || b.field2 || b.field3'。 – Andrew
感謝您的指針。這一改變仍然無濟於事。我又跑出了假脫機空間。 – user3777422