Big Data BigQuery Data Driven Google Cloud Platform

BigQuery 的收費機制與設計

現在聽到許多企業慢慢轉到 BigQuery 平台上去做大數據分析,問了一些朋友的原因,大部分的回答是 BigQuery 很便宜。但真的是便宜嗎?還有使用 BigQuery 需要注意哪些細節呢?

現在聽到許多企業慢慢轉到 BigQuery 平台上去做大數據分析,問了一些朋友的原因,大部分的回答是 BigQuery 很便宜。但其實 BigQuery 由於絕大部分是採以量計價,所以使用上要較小心,使用 BigQuery 需要注意哪些細節呢?

以量計價的收費

事實上當我們去看 BigQuery 的收費機制的時候感覺上真的是滿划算的

1TB 才只有 $5 美元,而且每月前 1TB 是免費的!看起來真不錯。

除的運算方面的算法外,儲存也會有相關費用,也可以接受就像是 AWS 的 S3 費用差不多!

固定費率的收費方式

當然還有固定的費用,每月 $10,000 美金的方案,但我們這邊就先不考慮討論。這是針對比較大量使用 query 的人可能會考慮。

以量計價真的划算嗎?

但目前遇到的朋友們都是因為前面以量計價的方式考慮 BigQuery。但是以量計價的方式其實是很常讓您會收到超乎意料的 Google Cloud 帳單。我們來看看一個實際案例…

Source from Stackoverflow

沒錯您沒有看錯,突然暴增到數千…美金。

以量計價怎麼算的?

BigQuery 是一個 columnar 的 data warehouse,也就是資料的運算方式是採用columns 去做掃描,而不是像傳統的 relational database 是用 row 的方式去得到資訊。

所以像是以下的 Query ,我們去 Query BigQuery 所提供的 Bitcoin 的 dataset

SELECT count(*) FROM `bigquery-public-data.bitcoin_blockchain.transaction`

這個 query 只有 $0 美元的費用因為這個 query 中沒有任何 column

但是呢?現在這個情境,猜猜需要多少運算量?

SELECT timestamp, transaction_id FROM `bigquery-public-data.bitcoin_blockchain.transactions` LIMIT 1

我現在要 select 兩個 columns 然後只要一筆,竟然需要 23.5GB 跑這個 query… 是不是很意外呢?這是因為 BigQuery 是一個 column-based 的 data warehouse 所以您雖然只要拿第一筆資料,但是他需要去要 timestamp, transaction_id column 的資料掃過一遍他才拿得到一整列您所需要的資料。

現在再來試試看另一個 query

SELECT * FROM `bigquery-public-data.bitcoin_blockchain.transactions` LIMIT 1

這次需要 587.1GB 才能跑出以上的這個 Query,雖然我只要一個 row 但是他會把所有的 column 都掃描過一遍…夠嚇人吧!

再來看另一個例子

SELECT max(timestamp) FROM `bigquery-public-data.bitcoin_blockchain.transactions`

這個情況會需要 2.5GB 的容量去跑,還比範例二的 LIMIT 1 來的小,原因是所需要的 column 只需要 timestamp

接下來我們來跑一個比較複雜的 Query 如下。

這是只需要 20.9GB 還比我只要獲取範例二 LIMIT 1 的情境 23.5GB 還來得小。

所以您可能開始問說,要怎麼樣有效率的方式所 filter query 呢?這時候將資料表分區分群有助於降低查詢處理的資料量。為達到最佳做法的成效,請盡可能採用分區和分群的做法。

什麼是分區 (partitioned)?

分區資料表是一種特殊的資料表,其中分成多個區段 (稱為分區),可讓您更容易地管理和查詢資料。透過將大型資料表分成較小的分區,可以提高查詢效能,並且可以透過減少查詢讀取的位元組數來控制費用。

BigQuery 中的資料表分區有兩個類型:

  • 依擷取時間分區的資料表:根據資料的擷取 (載入) 日期或到達日期分區的資料表。
  • 分區資料表:依據 TIMESTAMP 或 DATE 資料欄分區的資料表。
SELECT max(temp) FROM `bigquery-public-data`.noaa_gsod.`gsod*` WHERE _TABLE_SUFFIX BETWEEN '2010' AND '2018'

上面這個 query 會減少 columns 在掃描的 size 所以他會是 262MB 而不是 1.11GB 會被掃瞄。

什麼是分群 (clustered tables)?

使用叢集處理的時機

目前 BigQuery 支援對分區資料表建立叢集,使用時機如下:

  • 資料已使用 date 或 timestamp 資料欄分區。
  • 您通常會在查詢中,對特定資料欄使用篩選或匯總。

擷取時間分區資料表和依據 DATE 或 TIMESTAMP 資料欄分區的資料表都支援建立資料表叢集

結論

要有效率的使用 BigQuery 其實並不簡單,需要完全了解整個系統以及資料庫的性能,已做到最有效率的應用。在使用上也要非常小心以免在未來收到帳單的時候就來不及了!

比起 AWS Redshift 等其他的 cloud data warehouse。是用 Instance 數量去收費來看,如果不會優化 SQL 或是不了解 BigQuery 的優化的話 Redshift 會比 BigQuery 來的容易控制預算許多。

想要簡單化數據管理嗎?

Canner, Inc 讓企業導入數據導向決策更簡單。Canner, Inc 所開發的 CannerFlow 是一個 Cloud-Native 的數據管理平台,解決在 Cloud Providers 上面的缺點專業人才、流程複雜、操作不易, CannerFlow 內建的數據整合系統可以節省大部分製作 ETL 流程。幫助企業導入數據分析流程更省錢快速地得到 Data-driven insights!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: