千家信息网

Apache中怎么使用Hive3实现跨数据库联邦查询

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章将为大家详细讲解有关Apache中怎么使用Hive3实现跨数据库联邦查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1使用Apache Hi
千家信息网最后更新 2024年11月11日Apache中怎么使用Hive3实现跨数据库联邦查询

这篇文章将为大家详细讲解有关Apache中怎么使用Hive3实现跨数据库联邦查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1

使用Apache Hive3.0&SQL来进行统一访问

Apache Hive在上述环境中扮演着重要角色。更具体一点的说,它可以访问上述所有系统,并提供统一高效的SQL访问,而且是开箱即用的。这样做的好处是巨大的:

1.单个SQL方言和API

2.集中安全控制和审计跟踪

3.统一治理

4.能够合并来自多个数据源的数据

5.数据独立性

设置和使用Apache Hive作为联邦层可简化应用程序开发和数据访问。特别是所有数据都可以使用SQL进行处理,并且可以通过熟悉的JDBC/ODBC接口进行访问。

最重要的事,因为所有的数据访问都会通过Hive,当Hive与不同的系统进行交互时,它可以提供统一的安全控制(表,行和列访问控制),数据溯源和审计。

最后,你还可以保证数据的独立性:如果所有的访问都被抽象为通过SQL表或视图,更改存储或处理引擎则会比较容易。

2

基于成本优化的智能下推

假设你要执行一个Hive查询,该查询通过JDBC连接到后端的RDBMS访问数据。一种天真的想法是将JDBC源视为"哑"(dumb)的存储系统,通过JDBC读取所有原始数据并在Hive中处理它。在这种情况下,实际我们就忽略了RDBMS本身的查询功能,然后通过JDBC链接抽取了过多的数据,从而很容易导致性能不佳和系统过载。

出于这个原因,Hive依靠其storage handler接口和Apache Calcite支持的基于成本的优化器(CBO)实现了对其他系统的智能下推。特别是,Calcite提供与查询的逻辑表示中的运算符子集匹配的规则,然后生成在外部系统中等效的表示以执行更多操作。Hive在其查询计划器中将计算推送到外部系统,并且依靠Calcite生成外部系统支持的查询语言。storage handler的实现负责将生成的查询发送到外部系统,检索其结果,并将传入的数据转换为Hive内部表示,以便在需要时进一步处理。

这不仅限于SQL系统:例如,Apache Hive也可以联邦Apache Druid或Apache Kafka进行查询,正如我们在最近的博文中所描述的,Druid可以非常高效的处理时序数据的汇总和过滤。因此,当对存储在Druid中的数据源执行查询时,Hive可以将过滤和聚合推送给Druid,生成并发送JSON查询到引擎暴露的REST API。另一方面,如果是查询Kafka上的数据,Hive可以在分区或offset上推送过滤器,从而根据条件读取topic中的数据。

https://hortonworks.com/blog/benchmark-update-apache-hive-druid-integration-hdp-3-0/

3

联邦到JDBC源端

storage handler和Calcite适配器的组合非常灵活,功能也非常强大,尤其是将Hive作为不同SQL系统的联邦层时。

Apache Hive3包含了JDBC storage handler的新实现,它可以让Calcite的JDBC适配器规则有选择地将计算推送到JDBC源端,如MySQL,PostgreSQL,Oracle或Redshift。Hive可以推送各种各样的操作,包括projections, filters, joins, aggregations, unions, sorting和limit。

更重要的是,Calcite可以根据JDBC源端的系统调整行为。 例如,它可以识别JDBC源端系统不支持查询中的过滤条件中使用的某个函数。在这种情况下,它将在Hive中执行它,同时仍将其余支持的过滤条件推送到JDBC系统。此外,Hive可以使用不同的方言生成SQL,具体取决于JDBC连接后面的数据库。

另一个重要特性是JDBC storage handler可以将查询拆分为多个子查询,这些子查询将并行发送到执行引擎,以加速从数据源中读取大量数据。

下图是一个示例说明了Hive的新JDBC下推功能。可以发现当生成MySQL和PostgreSQL的查询SQL语句时会有延迟。

4

接下来的工作:自动元数据映射

要查询其他系统中的数据,用户只需使用相应的storage handler来创建一张Hive外部表,当然还包含该外部系统的一些其他信息。例如:如果用户想在Hive中创建一张来自PostgreSQL数据库'organization'中的表'item',可以使用以下语句来创建:

虽然你看这个建表语句已经够简单的了,但是我们对Hive该功能的期望远不止于此。

如上例所示,建表语句还需要指定PostgreSQL中该表的schema。在HIVE-21060中,如果是通过JDBC配置的外部表,希望Hive可以自动发现schema,而不用在建表语句中声明。

HIVE-21060:

https://jira.apache.org/jira/browse/HIVE-21060

而HIVE-21059中,则是开发实现外部的catalog支持。外部catalog允许在metastore中创建一个新的catalog,这个catalog会指向一个外部的mysql数据库,这样在这个catalog之下,所有表都可以自动被Hive识别然后查询。

HIVE-21059:

https://jira.apache.org/jira/browse/HIVE-21059

5

总结

联邦功能为Hive带来了很大的灵活性,以下我们具体看看你可以使用它来干什么:

1.Combining best tools for the job:应用程序开发人员可以通过单一界面访问多个数据处理系统。无需学习不同的查询方言或接口, 无需担心数据安全和数据治理,统统都由Hive负责。这极大地简化了集成工作。

2.Transform & write-back: 使用该功能,你可以使用Hive SQL转换保存在Hive之外的数据。例如,你可以使用Hive查询Kafka,转换数据,然后将其回写到Kafka。

3.Simplifying data-loads:你现在可以直接从Hive查询其他系统,清洗数据,强化数据,最后将数据合并到Hive表中,而无需部署任何其他工具。这使得ETL变得非常简单。

4.Query across multiple systems: 对于某些ad-hoc查询或小的报表,定义ETL处理过程并将数据都移动到同一个存储位置是不现实的。使用该功能,你只需要编写一个查询SQL跨多个数据源即可。

关于Apache中怎么使用Hive3实现跨数据库联邦查询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 查询 系统 联邦 功能 处理 生成 数据库 语句 支持 不同 重要 多个 数据源 存储 统一 安全 引擎 接口 方言 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 共联网络技术 实际存储在数据库中的表 网络安全 健康成长作文 服务器显示节电模式怎么办 永川区网络软件开发服务常见问题 网络安全反诈骗手抄报简单 广电网络技术部工作总结 数据库显示1001 粤港澳 网络安全 服务器托管需要备份吗 中山自主可控软件开发销售厂 电子科技大雪学工业互联网 yii2 初始化数据库 软件开发美工和前端后端分工 服务器主机可以带显示屏吗 北京音频管理服务器参数 电脑网络安全模式下没有联网 达梦数据库登录次数超过限制 服务器安全脚本 经济参考网网络安全 网络安全简短专用术语 长沙 合肥 软件开发 生产产品数据库设计入门经典 下列关于网络安全法描述 讨论题如何建立网络安全防线 宿州餐饮软件开发定制公司 南京银联软件开发答疑解惑 登录堡垒机查看数据库 我的世界服务器商店怎么做 商品信息数据库设计
0