Hive 实现联邦查询

版权声明:学习交流为主,未经博主同意禁止转载,禁止用于商用。 https://blog.csdn.net/u012965373/article/details/88819697

1.支持服务 Hive3.0 与 SQL

从 JdbcStorageHandler 名字我们就可以看出,其功能应该和 HBaseStorageHandler 类似,也就是可以在 Hive 中使用标准的 JDBC 方式读取存储在不同数据存储里面的数据。

比如我们可以在 Hive 中分别读取 MySQL 和 Phoenix 里面的数据,然后进行关联。其提供高效,统一的 SQL 访问 - 开箱即用。 这样做的好处是巨大的:

* 单个 SQL 方言和 API

* 统一安全控制和审计跟踪

* 统一控制

* 能够组合来自多个来源的数据

* 数据独立性

需要注意的是,目前 JdbcStorageHandler 仅仅支持从 JDBC 数据源读取数据,还不支持支持将数据写入到 JDBC 数据源。

2.JdbcStorageHandler 支持 CBO

使用 JdbcStorageHandler 从 JDBC 数据源读取数据时,一种简单的方式是直接读取全量的数据;

并将其全部加载到 Hive。这种方式虽然很简答,但是却会带来性能问题。

基于这些原因,Hive 依赖 storage handler interfaces 以及 Apache Calcite 的 CBO 实现了智能的算子下推功能。

这样可以将查询规则下推到 JDBC 数据源,在 JDBC 数据源层面上进行一些过滤,再将计算结果返回给 Hive,这样可以减少数据的量,从而提高查询效率。

算子下推这个功能不限于 SQL 系统,比如我们可以将算子下推到 Apache Druid 或者 Apache Kafka。在查询 Apache Druid 里面的数据时,

Hive 可以将过滤和聚合操作下推到 Druid,生成 JSON查询,并将其发送到引擎公开的 REST API。

另一方面,如果我们查询 Kafka 里面的数据时,Hive 可以直接过滤相关的分区或者偏移量,有选择地从系统中的主题读取数据。

3.如何使用 JdbcStorageHandler

说了这么多,那么我们该如何使用 JdbcStorageHandler 呢?为了使用它,我们需要在 Hive 里面创建一张外部表,具体如下:

正如上述所示,create table 当前需要指定 JDBC 表的模式。HIVE-21060 引入了一种可以对基于 JDBC 外部表自动发现模式的功能,

这样我们就不必在 create table 命令中声明它。HIVE-21059 的工作是对外部 catalog 的支持。

外部 catalog 将允许在 Metastore 中创建指向外部 mysql 数据库的 catalog。并且通过此 catalog,

我们可以在 Hive 查询中使用里面的所有表。

猜你喜欢

转载自blog.csdn.net/u012965373/article/details/88819697