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 数据类型,但存在少数例外情况,例如 MAP
和 UNION
。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 |
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 Run functions 或 Cloud Run 中通过 GoogleSQL 查询调用函数。
BigQuery 不支持用户定义的聚合函数 (UDAF)。
安全
Hive 和 BigQuery 具有不同的安全模型,以下各部分对此进行了介绍:
Hive 访问权限控制
为了进行授权,Hive 引入了基于 SQL 标准的授权(在 Hive 0.13.0 中引入),以实现精细的访问权限控制。它使用基于角色的访问控制 (RBAC) 来管理典型企业环境中大量用户和数据对象的授权。此安全机制基于 Hadoop 身份。Hadoop 依赖 Kerberos 对身份进行身份验证。
使用 Apache Sentry 和 Apache Ranger 进行保护
Apache Ranger 和 Apache 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。
后续步骤
获取从 Apache Hive 迁移架构和数据的分步说明。