是否有一种编程方法来验证HiveQL语句是否存在基本语法错误等错误?我想在将它们发送到Elastic Map Reduce之前检查语句,以节省调试时间.
就在这里!
实际上这很容易.
脚步:
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)
如果查询无效,客户端将抛出一个异常,其中包含语法无效的详细信息.如果语法有效(在这种情况下您可以忽略),描述将返回一个查询树
希望有所帮助.
“描述从类别限制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将引发异常。如果一切正常,则不会引发任何异常,但是您将不会获得任何结果,这不是邪恶的事情
归档时间: |
|
查看次数: |
6161 次 |
最近记录: |