验证Hive HQL语法?

时间:2011-11-16 17:13:59

标签: hive amazon-emr

是否有一种编程方法来验证HiveQL语句是否存在基本语法错误等错误?我想在将它们发送到Elastic Map Reduce之前检查语句,以节省调试时间。

3 个答案:

答案 0 :(得分:6)

是的!

实际上很容易。

步骤:

<强> 1。以您的语言获得蜂巢节俭客户端。

我在ruby中所以我使用这个包装器 - https://github.com/forward/rbhive(gem install rbhive)

如果你不是ruby,你可以下载hive源并在包含的thrift配置文件上运行thrift来生成大多数语言的客户端代码。

<强> 2。在端口10001上连接到配置单元并运行描述查询

在ruby中,这看起来像这样:

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

如果查询无效,客户端将抛出一个异常,其中包含语法无效原因的详细信息。如果语法有效(在这种情况下你可以忽略)

,描述将返回一个查询树

希望有所帮助。

答案 1 :(得分:4)

“描述select * from categories limit 10”对我来说不起作用。

这可能与正在使用的Hive版本有关。 我正在使用Hive 0.8.1.4

在做了一些研究之后,我发现了一个与Matthew Rathbone提供的类似的解决方案:

Hive提供EXPLAIN命令,显示查询的执行计划。该语句的语法如下:

EXPLAIN [EXTENDED]查询

所以对于那些也在使用rbhive的人来说:

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

请注意,您必须将c.fetch替换为c.execute,因为如果成功,则explain不会返回任何结果=&gt;无论语法是否正确,rbhive都会抛出异常。

如果您遇到语法错误或者您要查询的表/列不存在,

execute将抛出异常。如果一切都很好,没有抛出异常,但你也不会收到任何结果,这不是一件坏事

答案 2 :(得分:0)

在最新版本中,hive 2.0附带了hplsql工具,它允许我们验证配置单元命令而不实际运行它们。

配置: 在hive / conf文件夹中添加以下XML并重新启动配置单元

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

要运行hplsql并验证查询,请使用以下命令: 验证Singe Query

  

hplsql -offline -trace -e&#39; select * from sample&#39;

(或) 验证整个文件

  

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

如果查询语法错误,将报告查询中的语法问题

如果hive版本较旧,我们需要手动将hplsql jar放在hive / lib中并继续。