譯者 | 李睿
審校 | 梁策 孫淑娟
云計算數據倉庫是所有現代數據堆棧的中心。缺少基于云計算的數據倉庫,很難從數據中獲得見解。數據倉庫的核心是一個分析平臺,存儲分析來自各種數據源的信息,在企業進行高級決策以及回答緊迫的業務查詢時,這些數據就會派上用場。如今,數據倉庫要么已被企業采用,要么正被逐步部署,其領域內主要代表亦有許多,本文則將只關注BigQuery和Snowflake。

Snowflake是什么?
Snowflake是一種基于軟件即服務(SaaS)的倉庫解決方案,可在主流的云平臺(AWS、Azure、GCP)上運行。它專門為云計算而構建,其中一些關鍵組件使它從其他云計算數據倉庫中脫穎而出。Snowflake于2014年公開發行,此后在數據倉庫行業中占有重要一席。截至2021年10月,其市場估值已達903.5億美元。
Snowflake在云中開發,旨在提供云計算服務,這意味它幾乎沒有管理或運營開銷。作為一種原生的SaaS服務,Snowflake可以處理所有后端基礎設施,從而可以讓人們把重點放在從數據獲取見解上。Snowflake具有高度的可擴展性,支持近乎無限的并發查詢。
BigQuery是什么?
作為谷歌云平臺的一部分,Google BigQuery于2010年首次推出,是市場上最早的數據倉庫解決方案之一。雖然在當時它在很大程度上被認為是一個復雜的查詢引擎,但自此之后,Google BigQuery的進步可圈可點,面目一新。
使用BigQuery與Snowflake類似,企業無需設置或維護自己的內部部署基礎設施,從而可以專注使用標準SQL發現有意義的見解。Google BigQuery是谷歌的完全原生版本,不在任何其他云平臺上運行。
架構
- Snowflake
Snowflake基于ANSI SQL,是一個完全無服務器的解決方案,存儲與計算完全分離。它的架構基于各種傳統的共享磁盤和無共享架構,對用戶來說可謂一舉兩得。通過使用持久數據的中央存儲庫,數據可用于平臺中的所有計算節點。
Snowflake利用大規模并行處理(MPP)來處理所有查詢。這意味著每個單獨的計算集群(虛擬機或服務器)在本地存儲。在存儲方面,Snowflake將其數據組織到單獨的微分區中,然后在內部優化并壓縮到列存儲中。
事實上,加載到Snowflake中的所有數據都經過重新組織、優化和壓縮成列格式,以便可以保存在云存儲中。Snowflake對數據存儲的所有方面進行自動處理,涉及文件大小、結構、壓縮、元數據、統計信息以及其他不能直接可見而只能通過SQL查詢訪問的數據對象。
Snowflake中的處理是使用“虛擬倉庫”或計算資源集群完成的。每個倉庫都是一個由多個節點組成的MPP。Snowflake的云服務層協調Snowflake中的所有活動,處理從用戶請求、身份驗證、基礎設施管理、元數據管理、查詢解析和優化、訪問控制等所有內容。
- Google BigQuery
Google BigQuery與Snowflake非常相似,也是無服務器、存儲與計算分離并基于ANSI SQL,但它的架構完全不同。BigQuery使用一套龐大的多租戶服務,驅動該服務的特定谷歌基礎設施技術包括Dremel、Colossus、Jupiter和Borg等。Google BigQuery中的計算由Dremel完成,它是一個大型多租戶計算集群,并用于執行SQL查詢。
Dremel將SQL查詢轉換為執行樹來完成繁重的工作。BigQuery中的葉稱為“插槽” (slots)它們從存儲中讀取數據并進行必要的計算。執行樹的分支稱為“混合器”(Mixers),,用于處理所有聚合。團隊中的單個用戶可以根據需要利用數千個插槽來執行查詢。
與Snowflake類似,BigQuery將數據壓縮成列格式,將數據存儲在谷歌的全球存儲系統Colossus中。Colossus管理數據復制、恢復和分布式管理,因此不會受單點故障影響。BigQuery使用谷歌公司的Jupiter網絡將數據從一個位置快速移動到另一個位置,其所有硬件資源分配和編排都通過Borg完成(谷歌公司推出的Kubernetes前身)。
可擴展性
Snowflake提供自動擴展和自動掛起功能,使集群能夠在繁忙或空閑期間停止或啟動。用戶使用Snowflake無法調整節點大小,但可以通過單擊調整集群大小。此外,Snowflake讓用戶能夠自動擴展多達10個數據倉庫,單個表中每個隊列的DML限制為20個。
同樣,BigQuery會根據需要自動配置額外計算資源,并在幕后處理一切。但是,BigQuery默認限制為100個并發用戶。這兩個平臺都允許企業根據需求自動擴展和縮減。此外,Snowflake讓用戶能夠在不同數據倉庫中隔離跨業務的工作負載,以便不同的團隊可以獨立操作而不會出現并發問題。
安全與合規性
Snowflake自動為靜態數據提供加密。不過,它不為列提供細粒度的權限,而為模式、表、視圖、過程和其他對象提供權限。與其相反,BigQuery提供列級安全性以及對數據集、表格、視圖和圖表訪問控制的權限。
由于BigQuery是谷歌公司的原生產品,所以人們還可以利用其他具有BigQuery內置安全性和身份驗證功能的谷歌云服務,從而使集成變得更加容易。Snowflake不提供任何內置的虛擬專用網絡。但是,如果Snowflake托管在AWS云平臺中,采用AWS PrivateLink可以解決這一問題。
另一方面,采用BigQuery能夠利用谷歌公司的虛擬私有云。BigQuery和Snowflake都符合HIPAA、ISO 27001、PCI DSS、SOC1TYPE II和SOC2TYPE II等認證標準。
數據支持
這兩個平臺都支持結構化和半結構化數據(Avro、Parquet、Orc、CSV、JSON),自2021年9月20日起,Snowflake宣布支持非結構化數據,并已在公共預覽版中提供。
管理
使用BigQuery和Snowflake能夠管理用戶角色、權限和數據安全。所有性能調整都為自動進行,且隨著數據量的增長和查詢變得更加復雜,兩個平臺都會在后臺自動擴展以滿足需求。
此外,由于兩個解決方案都是作為SaaS服務提供的,因此所有底層維護和基礎設施都會進行處理。BigQuery自動處理所有事情,而Snowflake讓管理員可以獨立擴展計算和存儲層。這意味著可以隔離工作負載,而無需處理與Snowflake中的虛擬倉庫相關的大小調整和許可工作。
數據保護
BigQuery和Snowflake在保護數據方面都做得非常出色。Snowflake可以采用時間旅行(Time Travel)和故障保護(Fail-safe)這兩個功能幫助解決這個問題。借助時間旅行,Snowflake會在數據更新之前保留數據狀態。時間旅行的標準保留期為一天(企業客戶可以指定最多90天的期限),可以應用于數據庫、模板和表。
使用故障保護,Snowflake可以恢復歷史數據。其時間段不可配置,并在時間旅行保留期結束后立即開始。盡管啟動恢復必須請求Snowflake,但任何可能由于極端操作故障而損壞或丟失的數據,Snowflake都能通過這一功能恢復。
BigQuery中的管理員可以輕松還原更改,而無需處理恢復的麻煩。BigQuery對其表中的所有更改保留完整的七天歷史記錄。但是,為了將表數據保留七天以上,BigQuery提供了一種稱為表快照的功能(快照用于在特定時間點保留表的內容)。
定價
Snowflake的定價模式是按每個數據倉庫的使用情況收費,因此成本主要取決于其整體使用情況。Snowflake有幾種大小不同(X-Small、Small、Medium、Large、X-Large等)的數據倉庫,其收費和服務器/集群數量都有很大差異。不過,Snowflake的X-Small倉庫的基本定價則為每秒0.00056美元。
數據倉庫規模每增加一倍,價格就會翻一番。Snowflake有幾個收費方案允許用戶預先購買積分以支付使用費用。預購容量方案的前期成本費率更低,因而優于按需付費方案。
BigQuery則按掃描或讀取的字節數收費。BigQuery提供按需定價和固定費率定價。按需定價為按給定查詢中處理的字節數按5美元/TB收費。固定費率定價模式則是為運行查詢購買插槽(虛擬CPU)或專用資源。100個插槽的每月費用約為2,000美元(如果年付可降至1700美元)。
Snowflake和BigQuery的存儲費用都相對較低。Snowflake對按需客戶每月每TB收費40美元,對預付客戶每月收取23美元。BigQuery對活動存儲每月每TB收費20美元,對非活動存儲每TB收費10美元。
云計算基礎設施
作為原生SaaS產品,Snowflake可在任何主要的云平臺(AWS、GCP、Azure)上運行。BigQuery是原生谷歌云產品,所以僅在谷歌云平臺上可用。
性能
Snowflake無需微調,可實現開箱即用,因而性能表現和執行更迅速,在查詢時間上往往優于包括BigQuery在內的其他數據倉庫。相比不同之處,Snowflake和BigQuery的相似之處可能更多。
如果空閑時間較長,運行大量查詢只是偶爾需要,BigQuery可能會更高效且計算成本更低。另一方面,如果使用更可預測更可持續,那么使用Snowflake可能成本效益更好。
Snowflake和BigQuery的主要區別
Snowflake和BigQuery之間有幾個主要區別需要注意。首先,Snowflake中的擴展和縮放并不是完全自動的,它需要提供一些輸入,而BigQuery則會自動處理一切。
其次,Snowflake可以在任何一個主流云平臺上運行,而BigQuery只能在谷歌云平臺上運行。Snowflake是一個完整的SaaS解決方案,BigQuery是一個PaaS解決方案。此外,Snowflake具有一項稱為安全數據共享的獨特功能,它能夠與其他Snowflake帳戶共享數據庫中的選定對象。使用安全數據共享實際上不會在帳戶之間復制或傳輸任何數據,因為一切都發生在Snowflake獨特的服務層和元數據存儲中。
BigQuery沒有數據共享功能。但是,BigQuery能夠創建授權視圖以與特定用戶或組共享查詢執行結果,而無需授予他們對基礎表的訪問權限。BigQuery還具有一項名為BigQuery ML的功能,可以創建和執行機器學習模型,從而顯著改善查詢性能。
在機器學習和實時流工作負載方面,BigQuery絕對比Snowflake更有優勢。總之,在選擇新的云數據平臺時,試圖解決的用例應是做決定的首要考慮因素。
Snowflake和BigQuery的后續展望
之所以采用現代云數據倉庫,目的是將數據倉庫整合到一個集中的數據存儲庫中,以便分析師可以利用商業智能工具進行分析和報告,從而創建可信單一數據源。在實際環境中,數據倉庫只是為企業的團隊創建了一個更大的數據倉庫。
數據倉庫使企業的團隊能夠在同一位置訪問其所有數據,并為主要利益相關者創建高級儀表板和報告,而這些信息對于其他業務團隊來說則不適用。畢竟,數據只有在報表中才價值突顯。
這正是反向ETL解決的問題。反向ETL這一過程是將數據從中央數據倉庫復制到記錄操作系統,該類系統包括但不限于用于增長、營銷、銷售和支持等內容的SaaS工具。
原文標題:BigQuery vs Snowflake: The Definitive Guide,作者:Luke Kline
































