2015-12-17 44 views
1

我們正面臨流表上BigQuery範圍裝飾器的問題。範圍裝飾查詢給出重複的數據。BigQuery範圍裝飾器重複問題

我的情況:

我BQ表定期從客戶事件進行流插入獲取數據。另一項工作是使用範圍修飾器週期性地從表中獲取時間綁定數據並將其發送到數據流作業。像

首次採用

SELECT * FROM [project_id:[email protected]] 

,當我跑這個查詢有91條記錄取出由表中的所有數據..

後15分鐘另一個查詢基於上次間隔

SELECT * FROM [[email protected]] 

這也給出了與91條記錄相同的結果。

但是我試圖再次運行相同的查詢,以交叉檢查

SELECT * FROM [project_id:[email protected]] 

給出空數據。

對此有幫助嗎?

回答

2

首先,您是否嘗試過使用流式數據流?這可能更適合(儘管你的邏輯不能用查詢來表達)。流式數據流還支持開始寫入,因此可以保留原始數據和聚合結果。

關於你的問題:

不幸的是,這是那是在同時和一定程度上獨立建兩個概念的碰撞,從而導致不明確的相互作用。

時間範圍表裝飾器被設計/建造在一個世界上,只有加載作業存在。因此,數據塊在一個時間點以原子方式提交給一個表。時間範圍裝飾器在這方面效果很好,因爲包含/排除的界限明確,並且關係穩定。

Streaming攝取+實時查詢有點違背「加載作業」的世界。 BigQuery緩衝您的數據一段時間,使其可用於分析,然後使用傳統存儲方式定期將緩衝區清空到表格上。當數據被緩衝時,我們具有「無限」的時間粒度。但是,一旦我們將緩衝區刷新到表格上,那麼無限的粒度就會被壓縮成一個單獨的時間,這是當前的刷新時間。

因此,在流表上使用時間範圍裝飾器可能會導致一些意外的行爲,因爲相同的數據可能出現在兩個不重疊的時間窗口中(一次是緩衝的,一次是刷新的)。

我們,如果你想在最近的數據,實現窗口的查詢建議是做到以下幾點:

  1. 包括在你的數據的系統時間戳。
  2. 對於表格裝飾器時間戳,請在實際窗口周圍添加一些緩衝區,以解決時鐘與Google之間的時鐘偏移以及重試後遲到的問題。這個緩衝區應該在你的目標窗口之前和之後。
  3. 修改您的查詢以應用您的實際時間窗口。

應該指出的是,根據您的實際使用目的,這可能無法解決您的問題。如果你能提供更多細節,可能有辦法達到你所需要的。

抱歉給您帶來不便。

+0

感謝您的詳細解答,由於價格限制,我們沒有使用流式數據流。順便說一句,我們選擇了這個場景的加載作業。 – shivg

+1

根據你的約束,一個合理的選擇!結合其他事情提及:1)每天有加載作業限制,所以只要確保適當限制你的加載速度。否則,您可能會在一天中的後半部分出現配額失敗。 2)如果你不想查詢最新的數據,有一個表裝飾器可以與時間範圍裝飾器(tablename @ 123-456%-s)結合使用,它將從流緩衝區中省略數據。 –