2011-11-16 1199 views
4

是否有編程方式來驗證HiveQL語句是否存在像基本語法錯誤這樣的錯誤?爲了節省調試時間,我希望在將它們發送到Elastic Map Reduce之前檢查它們。驗證Hive HQL語法?

+1

這實際上是完全不明顯的東西,但是一旦你解決了它,它確實非常有用。我沒有想過這樣做了9個月! –

+0

真的很聰明。我們一定會在我們的內部平臺上使用它。感謝你的回答! –

回答

6

是的!

實際上這很容易。

步驟:

1.找一個蜂巢節約客戶在你的語言。

我在Ruby中很我用這個包裝 - https://github.com/forward/rbhive(創業板安裝rbhive)

如果您在紅寶石是不是,你可以在包括節儉配置文件下載蜂巢源代碼並運行節儉用大多數語言生成客戶端代碼。

2.連接到蜂箱10001端口和運行一個查詢描述

在紅寶石這看起來是這樣的:

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

如果查詢無效,客戶端將引發與細節異常爲什麼語法無效。如果語法IS有效(在這種情況下您可以忽略),Describe將返回查詢樹

希望有所幫助。

4

「描述select * from categories limit 10」不適用於我。

也許這與使用的Hive版本有關。 我使用蜂巢0.8.1.4

做一些研究,我發現了一個類似的解決方案的一個馬修拉思伯恩提供後:

蜂巢提供了一個EXPLAIN命令顯示了查詢的執行計劃。該語句的語法如下:

EXPLAIN [擴展]查詢

所以大家誰在使用rbhive也:

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

注意,您必須用C代替c.fetch。執行,因爲如果成功,explain不會返回任何結果=>無論您的語法是否正確,> rbhive都會拋出異常。

如果您遇到語法錯誤,或者您查詢的表/列不存在,execute會拋出異常。如果一切正常,沒有異常拋出,但你也不會收到任何結果,這不是一件壞事

0

在最新版本的hive 2.0中提供了hplsql工具,它允許我們驗證hive命令而無需實際運行它們。

配置: 添加如下XML在蜂箱/ conf文件夾,然後重新啓動蜂巢

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 

如果查詢語法是錯誤的,在查詢語法問題將被報告

如果配置單元版本較舊,我們需要手動將hplsql jar放入配置單元/ lib中並繼續。