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、多种语言客户端库
分区 支持 时间单位列、注入时间或整数范围
聚簇 支持 支持
复制 取决于 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 布尔值
STRING STRING
VARCHAR STRING
CHAR STRING
BINARY BYTES
DATE DATE
- DATETIME
- 时间
TIMESTAMP DATETIME/TIMESTAMP
INTERVAL -
ARRAY ARRAY
STRUCT STRUCT
地图 具有键值对的 STRUCT(REPEAT 字段)
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 FunctionsCloud Run 中通过 GoogleSQL 查询调用函数。

BigQuery 不支持用户定义的聚合函数 (UDAF)。

安全

Hive 和 BigQuery 具有不同的安全模型,以下各部分对此进行了介绍:

Hive 访问权限控制

为了进行授权,Hive 引入了基于 SQL 标准的授权(在 Hive 0.13.0 中引入),以实现精细的访问权限控制。它使用基于角色的访问控制 (RBAC) 来管理典型企业环境中大量用户和数据对象的授权。此安全机制基于 Hadoop 身份。Hadoop 依赖 Kerberos 对身份进行身份验证。

使用 Apache Sentry 和 Apache Ranger 进行保护

Apache RangerApache Sentry 是使用 Hive 提供的插件来实现授权的 Apache 项目。配置 Hive RBAC 无法完全保护数据,因为 Hive 数据通常存储在 HDFS 上,用户可以直接访问其不应看到的数据。Ranger 和 Sentry 还使用从 Hive 的 RBAC 设置转换的 POSIX ACL,在 HDFS 上强制执行数据。

BigQuery 安全性

BigQuery 使用 Identity and Access Management 来控制对项目下数据的访问权限。您可以限制对 BigQuery 数据集的访问权限。 表和视图是数据集的子资源,其权限继承自数据集。您可以为各个表分配行级列级安全性。

您还可以使用授权视图授权数据集来限制访问权限。

默认情况下,BigQuery 会对数据进行加密。如需管理自己的加密密钥,您可以搭配使用 Cloud KMS 与 BigQuery

后续步骤