[英]Creating a view from JOIN two massive tables
我有一個大表,比如table_A
,大約有 200 億行和 600 列。 我不擁有這張桌子,但我可以從中讀取。
對於這些列的一小部分,我生成了一些額外的列 (50),我將它們存儲在一個單獨的表中,比如table_B
,因此大約為 200 億 X 50 大。
現在我需要向用戶公開表table_A
和table_B
的連接,我嘗試了
CREATE VIEW table_AB
AS
SELECT *
FROM table_A AS ta
LEFT JOIN table_B AS tb ON (ta.tec_key = tb.tec_key)
問題是,對於任何簡單的查詢,如SELECT * FROM table_AB LIMIT 2
都會因為內存問題而失敗:顯然 Impala 嘗試首先在內存中進行完全連接,這將導致一個 0.5 PB 的表。 因此失敗。
創建這種視圖的最佳方法是什么?
如何指示 SQL 在連接之前執行例如要對table_AB
執行的過濾操作?
創建一個新表也不是最理想的,因為這意味着復制table_AB
中的數據,使用數百 TB。
我也嘗試過[...] SELECT STRAIGHT_JOIN * [...]
但沒有幫助。
創建這種視圖的最佳方法是什么?
由於兩張表都很大,所以會有內存問題。 這里有幾點我會推薦,
create vw as select ... from b join a on ...
。 Impala 將驅動程序表存儲在內存中,因此它需要更少的內存。如何指示 SQL 在連接之前執行例如要對 table_AB 執行的過濾操作?
select ... from b
join ( select ... from a where region='Asia') a on ... -- wont improve much
創建一個新表也不是最理想的,因為這意味着復制 table_AB 中的數據,使用數百 TB。
完全同意這一點。 多張小桌子比一張有 600 列的大桌子要好得多。 因此,創建幾個僅包含必填字段的 stg 表,然后豐富該數據。 它是一個困難的數據集,但沒有人會每天更改 20b 行 - 因此也可以實現某種增量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.