2016-09-27 27 views
4

我想從日期分區BigQuery表中的最新分區中選擇數據,但查詢仍然從整個表讀取數據。如何選擇BigQuery表中的最新分區?

我試過(據我所知,BigQuery的不支持QUALIFY):

SELECT col FROM table WHERE _PARTITIONTIME = (
    SELECT pt FROM (
    SELECT pt, RANK() OVER(ORDER by pt DESC) as rnk FROM (
     SELECT _PARTITIONTIME AS pt FROM table GROUP BY 1) 
    ) 
) 
    WHERE rnk = 1 
); 

但是,這並不工作,讀取所有行。

SELECT col from table WHERE _PARTITIONTIME = TIMESTAMP('YYYY-MM-DD') 

其中'YYYY-MM-DD'是一個具體的日期做的工作。

但是,我需要將來運行此腳本,但表更新(和_PARTITIONTIME)是不規則的。有沒有一種方法可以從BigQuery中的最新分區獲取數據?

+0

你能澄清 - 怎麼不起作用?它有什麼問題? –

+0

我在下面評論過,但這兩個查詢都不從最新的分區中讀取。當我明確鍵入最後一個_partitiontime時,查詢讀取18 MB。但是當我嘗試下面兩個查詢中的任何一個時,他們讀取的是15.4 GB。 – cshin9

+1

我現在明白了。感謝您的更新!有趣的理解爲什麼。 @ felipe-hoffa提到了一些有關緩存的內容 - 但這並不明確 –

回答

2

嘗試

SELECT * FROM [dataset.partitioned_table] 
WHERE _PARTITIONTIME IN (
    SELECT MAX(TIMESTAMP(partition_id)) 
    FROM [dataset.partitioned_table$__PARTITIONS_SUMMARY__] 
) 

SELECT * FROM [dataset.partitioned_table] 
WHERE _PARTITIONTIME IN (
    SELECT MAX(_PARTITIONTIME) 
    FROM [dataset.partitioned_table] 
) 
+2

請注意,這會停止查詢結果緩存(可能會影響成本)。 –

+2

這兩個查詢都讀取所有行而不是所需的分區。 – cshin9

相關問題