千家信息网

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

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章将为大家详细讲解有关Apache中怎么使用Hive3实现跨数据库联邦查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1使用Apache Hi
千家信息网最后更新 2025年01月31日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安全错误 数据库的锁怎样保障安全 国家网络安全知识作答抽奖视频 湖南郴州学电脑软件开发学费多少 旗县网络安全周活动总结 慧眼网络安全科技 ibm服务器客服 硬盘录像机服务器连接失败 td数据库如何查看表的视图 梅州通讯软件开发报价行情 信息网络安全总体方案 瑞庭网络技术是真是假 access数据库应用操作视频 敢达争锋对决服务器爆满进不去 网络安全法要求绑定手机 工程类招聘软件开发 记录数据表设计 数据库 剑网三手游怎么选择服务器 智能光网络技术应用 阿里云服务器登录续费 黑客文化与网络安全日志 服务器可以查看客户机浏览内容吗 数据库product是什么意思 网络安全社区有哪些 网络技术课堂总结 网络安全基础知识竞赛 嘉兴制造软件开发项目 高二数据库书第一单元习题答案 仙居本地软件开发设备制造 热血传奇的千人服务器 奥的斯电梯服务器测试运行 阿里云移动端链接数据库
0