验证Hive HQL语法?

Mat*_*pel 8 hive amazon-emr

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

Mat*_*one 6

就在这里!

实际上这很容易.

脚步:

1.用您的语言获取蜂巢节俭客户端.

我是红宝石所以我使用这个包装 - 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
Run Code Online (Sandbox Code Playgroud)

如果查询无效,客户端将抛出一个异常,其中包含语法无效的详细信息.如果语法有效(在这种情况下您可以忽略),描述将返回一个查询树

希望有所帮助.


sas*_*hor 6

“描述从类别限制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
Run Code Online (Sandbox Code Playgroud)

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

如果您遇到语法错误或要查询的表/列不存在,则execute将引发异常。如果一切正常,则不会引发任何异常,但是您将不会获得任何结果,这不是邪恶的事情