2013-12-12 64 views
5

我是新來的專欄式DB概念和BigQuery。我注意到,爲了性能和成本效率,建議不僅在邏輯上 - 而且在時間上跨表格拆分數據。BigQuery按日期分割表的最佳實踐

例如 - 雖然我需要一個表來存儲我的日誌(1個邏輯表稱爲「日誌」),但實際上認爲在不同的時間段有一個單獨的表,如「logs_2012」,「 logs_2013" ,等等......甚至 「logs_2013_01」, 「logs_2013_02」,等等

我的問題:

1)它實際上是最好的做法?

2)哪裏最好畫線 - 一個年度表?月表?每日桌子?你明白了...

3)在通過查詢檢索數據方面 - 什麼是最好的方法?我應該使用UNION選項動態構建查詢嗎?如果我將所有日誌記錄在一張表中 - 我自然會使用where子句獲取所需時間範圍內的數據,但將數據分佈在多個表中會使其變得很奇怪。我來自關係數據庫的世界(如果到目前爲止還不明顯),我試圖儘可能平穩地實現跨越......

4)使用分佈式方法(不同時期的不同表格)仍然會提出以下問題:在查詢數據本身之前 - 我希望能夠確定特定的日誌類型 - 查詢的可用範圍。例如 - 對於特定的機器,我想首先向我的用戶展示他們可用日誌的相關範圍,並讓他們選擇該範圍內的特定時期以獲取洞察力。問題是,當我的數據分佈在多個表(每個表示一段時間),我不知道哪些表可用時,我該如何構造這樣的查詢?當我不知道哪些表存在時,如何構建查詢?我可能會嘗試訪問表「logs_2012_12」,當這個表不存在或事件最糟糕 - 我不知道哪些表是相關的,可用於我的查詢。

希望我的問題是有意義......

阿米特

回答

7

表命名

對於日常表,建議表名稱模式是你的表的具體名稱+日期像'20131225'。例如,「logs20131225」或「logs_20131225」。

理想的聚合:日,月,年?

此問題的答案將取決於您的數據和您的查詢。

  • 您通常會查詢一兩天的數據嗎?然後有每日表格,而且你的成本會低得多,因爲你只查詢你需要的數據。
  • 您通常會查詢您的所有數據嗎?然後將所有數據放在一張表中。一個查詢中有多個表可以隨着要查詢的表的數量增長而變慢。
  • 如果有疑問,請同時做!你可以有每日,每月,每年的表格。對於小的存儲成本,在執行僅針對預期數據的查詢時可以節省很多。

工會

隨意做工會。

  • 請記住,每個查詢有1000個表的限制。這意味着如果您有每日表格,您將無法查詢3年的數據(3 * 365> 1000)。
  • 請記住,BigQuery中的聯合不使用UNION關鍵字,而是使用其他數據庫用於聯接的「,」。可以使用顯式SQL關鍵字JOIN(或針對非常大的連接加入EACH)完成BigQuery中的連接。

表發現

  • API:tables.list會列出所有表中的數據集,通過API。
  • SQL:查詢SQL中的表的列表...繼續調整。
+0

令人驚異的答案 - douze pointe! – Amit