是否有一种编程方法来验证HiveQL语句是否存在基本语法错误等错误?我想在将它们发送到Elastic Map Reduce之前检查语句,以节省调试时间。
答案 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中并继续。