2017-06-06 117 views
0

在bigQuery中,我有兩個表 - 一個包含30K記錄,另一個包含20M記錄。在Google BigQuery中將兩個表合併成一個

我需要一個有效的方式來與加入搜索他們,所以我想這個SQL創建一個組合的表:但是

SELECT 
s.site site, 
s.rank rank, 
s.visitors visitors, 
s.store_id store_id, 
s.currency currency, 
p.title title, 
p.product_type product_type, 
p.handle handle, 
p.price price, 
p.created_at created_at, 
p.image_url image_url, 
p.description description 
FROM eComData.stores s INNER JOIN eComData.products p ON s.store_id = p.store_id 
WHERE 
s.active = 1 

,運行此BQ命令:

bq query --destination_table=eComData.stores_n_products --allow_large_results "SELECT s.site site,s.rank rank,s.visitors visitors,s.store_id store_id,s.currency currency,p.title title,p.product_type product_type,p.handle handle,p.price price,p.created_at created_at,p.image_url image_url,p.description description FROM eComData.stores s INNER JOIN eComData.products p ON s.store_id = p.store_id WHERE s.active = 1" 

正在永遠 - 至今已有5000秒的插件。有沒有一種有效的方法來創建一個組合表更容易搜索?

+1

如果您使用的是舊版SQL(和它看起來像你),過濾器不會自動通過加入推。你要麼需要使用子查詢,要麼將'--use_legacy_sql = False'傳遞給'bq query'。另請參閱[標準SQL文檔](https://cloud.google.com/bigquery/docs/reference/standard-sql/)。 –

回答

0

試試下面

SELECT 
    s.site site, 
    s.rank rank, 
    s.visitors visitors, 
    s.store_id store_id, 
    s.currency currency, 
    p.title title, 
    p.product_type product_type, 
    p.handle handle, 
    p.price price, 
    p.created_at created_at, 
    p.image_url image_url, 
    p.description description 
FROM (
    SELECT 
    site, 
    rank, 
    visitors, 
    store_id, 
    currency 
    FROM eComData.stores 
    WHERE active = 1 
) s 
INNER JOIN eComData.products p 
ON s.store_id = p.store_id 
+0

這似乎更快,但它仍然需要很長時間 - 雖然我不確定需要多長時間才能加入22M記錄。 –

+0

這是方法 - 您可能想爲兩個表添加更多「過濾」,以便最終連接速度更快。如果答案幫助了你 - 考慮對它進行投票 - 如果適用 - 接受它 –

+0

好的,所以我刪除了eComdata.stores表中的任何記錄,其中active = false,所以我不必在那裏添加WHERE子句。 但是,試圖將所有這些選入新表中仍然會遇到數千秒的時間。關於如何將這些大數據組合到一張表中的任何想法? –