從 Apache Hive 遷移至 BigQuery:總覽

本文將比較 Apache Hive 和 BigQuery 之間的差異,並探討遷移作業的關鍵考量。如要進一步瞭解如何完成遷移作業,請參閱 Apache Hive 遷移指南

您也可以使用批次 SQL 翻譯大量遷移 SQL 指令碼,或是使用互動式 SQL 翻譯翻譯臨時查詢。這兩項 SQL 轉譯服務都全面支援 Apache HiveQL。

功能

Hive 和 BigQuery 都是分散式資料倉儲系統。下表比較了這些功能的一些高層功能:

功能 Hive BigQuery
可用性 視實作方式而定 >= 99.99% 的每月正常運作時間
配額 視實作方式而定 BigQuery 配額
支援的格式 Avro、Parquet、ORC、文字 Avro、Parquet、ORC、CSV、JSON、Google 雲端硬碟
受管理的資料表儲存空間 HDFS 以 Capacitor 格式儲存 BigQuery 資料
外部資料表來源 HDFS、HBase Google Cloud Storage、Google 試算表、Bigtable
交易 有限。區隔層級的 ACID 受限於分割區層級。支援多陳述式交易。
API 支援 JDBC、ODBC、Thrift JDBC、ODBC、Client 程式庫,支援多種語言
分區 支援 時間單位欄、擷取時間或整數範圍
分群 支援 支援
複製 取決於 HDFS。不支援跨資料中心複寫 可靠的跨資料中心複製作業,由 Google 管理
UDF 所有語言 SQL 或 JavaScript
載入資料 批次處理、串流 (受限) 批次處理、串流
資料作業 DDL、DML DDL、DML、DCL、TCL

資料類型

Apache Hive 和 BigQuery 採用不同的資料類型系統。在大多數情況下,Hive 中的資料類型可以對應至 BigQuery 資料類型,但仍有少數例外狀況,例如 MAPUNION。Apache Hive 執行的隱含型別轉換比 BigQuery 多。因此,批次 SQL 翻譯器會插入許多明確的轉換。

Hive BigQuery
TINYINT INT64
SMALLINT INT64
INT INT64
BIGINT INT64
DECIMAL NUMERIC
FLOAT FLOAT64
DOUBLE FLOAT64
BOOLEAN BOOL
STRING STRING
VARCHAR STRING
CHAR STRING
BINARY BYTES
DATE DATE
- DATETIME
- 時間
TIMESTAMP DATETIME/TIMESTAMP
間隔 -
ARRAY ARRAY
STRUCT STRUCT
地圖 具有索引值的 STRUCT (重複欄位)
UNION 不同類型的 STRUCT
- GEOGRAPHY
- JSON

使用者自訂函式

Apache Hive 支援以 Java 編寫使用者定義函式 (UDF)。您可以將 UDF 載入 Hive,以便在一般查詢中使用。BigQuery UDF 必須使用 GoogleSQL 或 JavaScript 編寫。建議將 Hive UDF 轉換為 SQL UDF,因為 SQL UDF 效能較佳。如果您需要使用 JavaScript,請參閱「JavaScript UDF 的最佳做法」。對於其他語言,BigQuery 支援遠端函式,可讓您在 Cloud Run 函式 中叫用函式,或透過 GoogleSQL 查詢叫用 Cloud Run

BigQuery 不支援使用者定義的匯總函式 (UDAF)。

安全性

Hive 和 BigQuery 採用不同的安全性模型,請參閱以下各節:

Hive 存取權控管

為了授權,Hive 推出了以 SQL 標準為準的授權 (在 Hive 0.13.0 中推出),以便啟用精細的存取權控管。這項功能會使用角色式存取權控管 (RBAC),針對典型企業環境中的大量使用者和資料物件管理授權。這個安全機制是根據 Hadoop 身分建立。Hadoop 會使用 Kerberos 驗證身分。

透過 Apache Sentry 和 Apache Ranger 確保安全性

Apache Ranger Apache Sentry 是 Apache 專案,會使用 Hive 提供的外掛程式來實作授權。設定 Hive RBAC 無法完全保護資料,因為 Hive 資料通常會儲存在 HDFS 中,使用者可以直接存取不應看到的資料。Ranger 和 Sentry 也會使用從 Hive 的 RBAC 設定轉譯的 POSIX ACL,強制執行 HDFS 上的資料。

BigQuery 安全性

BigQuery 會使用身分與存取權管理功能,控制專案中資料的存取權限。您可以限制 BigQuery 資料集的存取權。資料表和檢視表是資料集的子項資源,因此會繼承資料集的權限。您可以為個別資料表指派資料列層級資料欄層級安全防護機制。

您也可以使用已授權的檢視表已授權的資料集來限制存取權。

根據預設,BigQuery 會加密資料。如要管理自己的加密金鑰,您可以搭配使用 BigQuery 和 Cloud KMS

後續步驟