9

是否有一种编程方式来验证 HiveQL 语句是否存在诸如基本语法错误之类的错误?我想在将语句发送到 Elastic Map Reduce 之前对其进行检查,以节省调试时间。

4

3 回答 3

7

就在这里!

其实很容易。

脚步:

1. 使用您的语言获取 hive thrift 客户端。

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

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

2. 连接到端口 10001 上的 hive 并运行描述查询

在红宝石中,这看起来像这样:

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

如果查询无效,客户端将抛出异常,并详细说明语法无效的原因。如果语法有效,Describe 将返回一个查询树(在这种情况下您可以忽略)

希望有帮助。

于 2011-11-17T23:36:33.303 回答
6

“描述从类别限制 10 中选择 *”对我不起作用。

也许这与一个正在使用的 Hive 版本有关。我正在使用 Hive 0.8.1.4

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

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

解释 [扩展] 查询

所以对于每个也在使用 rbhive 的人:

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

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

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

于 2012-11-29T17:00:01.753 回答
0

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

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

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

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

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

于 2016-08-03T10:05:13.553 回答