2011-11-16 48 views
4

是否有编程方式来验证HiveQL语句是否存在像基本语法错误这样的错误?为了节省调试时间,我希望在将它们发送到Elastic Map Reduce之前检查它们。验证Hive HQL语法?

+1

这实际上是完全不明显的东西,但是一旦你解决了它,它确实非常有用。我没有想过这样做了9个月! –

+0

真的很聪明。我们一定会在我们的内部平台上使用它。感谢你的回答! –

回答

6

是的!

实际上这很容易。

步骤:

1.找一个蜂巢节约客户在你的语言。

我在Ruby中很我用这个包装 - https://github.com/forward/rbhive(创业板安装rbhive)

如果您在红宝石是不是,你可以在包括节俭配置文件下载蜂巢源代码并运行节俭用大多数语言生成客户端代码。

2.连接到蜂箱10001端口和运行一个查询描述

在红宝石这看起来是这样的:

RBHive.connect(host, port) do |connection| 
    connection.fetch("describe select * from categories limit 10") 
end 

如果查询无效,客户端将引发与细节异常为什么语法无效。如果语法IS有效(在这种情况下您可以忽略),Describe将返回查询树

希望有所帮助。

4

“描述select * from categories limit 10”不适用于我。

也许这与使用的Hive版本有关。 我使用蜂巢0.8.1.4

做一些研究,我发现了一个类似的解决方案的一个马修拉思伯恩提供后:

蜂巢提供了一个EXPLAIN命令显示了查询的执行计划。该语句的语法如下:

EXPLAIN [扩展]查询

所以大家谁在使用rbhive也:

RBHive.connect(host, port) do |c| 
    c.execute("explain select * from categories limit 10") 
end 

注意,您必须用C代替c.fetch。执行,因为如果成功,explain不会返回任何结果=>无论您的语法是否正确,> rbhive都会抛出异常。

如果您遇到语法错误,或者您查询的表/列不存在,execute会抛出异常。如果一切正常,没有异常抛出,但你也不会收到任何结果,这不是一件坏事

0

在最新版本的hive 2.0中提供了hplsql工具,它允许我们验证hive命令而无需实际运行它们。

配置: 添加如下XML在蜂箱/ conf文件夹,然后重新启动蜂巢

https://github.com/apache/hive/blob/master/hplsql/src/main/resources/hplsql-site.xml

要运行hplsql和验证查询,请使用以下命令: 为了验证辛格查询

hplsql -offline -trace -e

'从样品中选择*'

(或) 来验证整个文件

hplsql -offline -trace -f samplehql.sql

如果查询语法是正确的,从hplsql他们的回应是这样的:

Ln:1 SELECT // type 
Ln:1 select * from sample // command 
Ln:1 Not executed - offline mode set // execution status 

如果查询语法是错误的,在查询语法问题将被报告

如果配置单元版本较旧,我们需要手动将hplsql jar放入配置单元/ lib中并继续。