为什么Hive不支持存储过程?

时间:2013-06-13 04:55:51

标签: sql-server hadoop hbase hive

为什么hive不支持存储过程? 如果它不支持那么我们将如何处理Hive中的Sp?有任何替代解决方案? (因为我们已经在mssql中有一个数据库) HBASE怎么样?它支持SP吗?

5 个答案:

答案 0 :(得分:4)

Hive和Hbase不支持存储过程。但是,Hive计划在未来支持Sp(HIVE-3087)。 HBase没有支持Sp的计划,因为它只专注于存储,而更像是NoSQL。

Hive UDF可以实现存储过程的某些功能,但这还不够。

答案 1 :(得分:4)

首先,Hadoop或Hive是NOT的替代SQL DB。您绝不能将这两个中的任何一个用作RDBMS的替代品。

Hive的开发只是为了在现有Hadoop集群之上提供仓储功能,同时牢记大量SQL用户,专家数据库设计人员和管理员,以及使用SQL从数据仓库中提取信息的临时用户。虽然它为您提供了类似SQL的接口,但它不是SQL DB。 Hive最适合数据仓库应用程序,其中分析相对静态的数据,不需要快速响应时间,以及何时数据不会快速变化。简单地说是offline batch processing种东西。

HBase中没有类似存储过程的东西。但它们有一个名为Coprocessor的东西,它类似于RDBMS中的存储过程。要在协处理器上找到更多信息,您可以转到here

正如@zsxwing所说,Sqoop只是一个数据迁移工具,仅此而已。一旦你切换到NoSQL世界,你需要灵活,你需要遵守NoSQL规则。

如果你能详细说明你的用例,也许我们可以帮助你更好。


回应你的评论:

是Facebook广泛使用Hadoop和Hive等相关工具。 Infact Hive是在Facebook开发的。但这些不是唯一的东西。无论他们有OLTP和完全交易需求,他们仍然依赖于RDBMS。一个例子是他们的Timeline功能,它使用MySQL。他们有一个巨大的(和令人敬畏的)管道,它包含很多东西,而不仅仅是Hadoop和Hive。见下图。

enter image description here

答案 2 :(得分:1)

Hive没有存储过程

Hive确实没有任何存储过程,如现有答案中所述。但是,这里有两个减轻因素:

Hive有视图

当然,它不是存储过程的正确替代品,但通过智能地使用视​​图,您可以省去对某些过程的需要。

您可以从其他程序调用配置单元

上次我遇到hive没有存储过程的问题时,我意识到我想要做的事情(循环遍历所有列)是我可以在另一个程序中做的事情。因此,我遵循以下工作流程:

  1. 运行查询以获取相关(元)数据:Python调用hive以获取列名
  2. 使用该信息构建查询:Python接受所有列名并构建相应的select语句
  3. 运行生成的查询:Python使用hive -e
  4. 进行系统调用
  5. (可选)如果需要,请转到2
  6. 通过视图和外部调用,我到目前为止能够解决缺少存储过程的问题。

答案 3 :(得分:0)

请参阅HPL/SQL,我正在寻找相同的解决方案,但尚未尝试。

我认为数据仓库应用程序需要存储过程支持,但更喜欢基于行的过程而不是基于行的过程。

根据我的个人经验,在结构化数据仓库应用程序中利用服务器端程序模板时需要程序支持。它使数据仓库应用程序更容易在SQL / NoSQL之间移植,如Netezza,MSSQL,Oracle,DB2和BigInsight。

答案 4 :(得分:-1)

http://www.plhql.org查看开源项目PL / HQL。它允许您在Hive中运行现有的SQL Server,Oracle,Teradata,MySQL等存储过程。