为什么 hive 不支持存储过程?如果它不支持,那么我们将如何处理 Hive 中的 Sp?有任何替代解决方案吗?(因为我们在 mssql 中已经有一个数据库了) HBASE 呢?支持SP吗?
5 回答
首先,Hadoop 或 Hive 是NOT
SQL DB 的替代品。您绝不能考虑将这两个中的任何一个用作 RDBMS 的替代品。
Hive 的开发只是为了在现有 Hadoop 集群之上提供仓储功能,同时牢记大量 SQL 用户,包括专家数据库设计人员和管理员,以及使用 SQL 从其数据仓库中提取信息的临时用户。尽管它为您提供了类似 SQL 的界面,但它不是 SQL DB。Hive 最适合数据仓库应用程序,其中分析相对静态的数据,不需要快速响应时间,并且数据不会快速变化。简单地说就是offline batch processing
一种东西。
HBase 中也没有存储过程。但是他们有一些叫做 as 的东西Coprocessor
,类似于 RDBMS 中的存储过程。要查找有关协处理器的更多信息,您可以访问此处。
正如@zsxwing 所说,Sqoop 只是一个数据迁移工具,仅此而已。切换到 NoSQL 世界后,您需要保持灵活性,并且需要遵守 NoSQL 规则。
如果您可以详细说明您的用例,也许我们可以为您提供更好的帮助。
回应您的评论:
是的,Facebook 广泛使用 Hadoop 和 Hive 以及其他相关工具。Infact Hive 是在 Facebook 开发的。但这些并不是唯一的事情。无论他们在哪里有 OLTP 和完整的事务需求,他们仍然依赖于 RDBMS。一个例子是他们的Timeline
特性,它使用 MySQL。他们有一个巨大(而且很棒)的管道,其中包含很多东西,而不仅仅是 Hadoop 和 Hive。见下图。
Hive 没有存储过程
Hive 确实没有现有答案中解释的任何存储过程。但是,这里有两个缓解因素:
蜂巢有意见
当然,它不是存储过程的适当替代品,但是通过巧妙地使用视图,您也许可以消除对某些过程的需要。
您可以从另一个程序调用 hive
上次我遇到 hive 没有存储过程的问题时,我意识到我想做的事情(循环所有列)是我也可以在另一个程序中做的事情。因此,我遵循以下工作流程:
- 运行查询以获取相关(元)数据:Python 调用 hive 获取列名
- 使用信息构建查询:Python 接受所有列名并构建相应的选择语句
- 运行结果查询:Python 执行系统调用
hive -e
- (可选)如果需要,请转到 2
到目前为止,通过视图和外部调用,我已经能够解决缺少存储过程的问题。
请参考HPL/SQL,我正在寻找相同的解决方案但尚未尝试。
我相信数据仓库应用程序需要存储过程支持,但更喜欢基于集合而不是基于行的过程。
以我个人的经验,在结构化数据仓库应用程序中利用服务器端程序模板时需要程序支持。它使数据仓库应用程序更容易在 SQL/NoSQL 之间移植,例如 Netezza、MSSQL、Oracle、DB2 和 BigInsight。
在http://www.plhql.org查看开源项目 PL/HQL 。它允许您在 Hive 中运行现有的 SQL Server、Oracle、Teradata、MySQL 等存储过程。