2012-03-21 29 views

回答

1

您不能將2個SQL語句(或HiveQL語句)放入報表查詢中。這意味着你不能使用查詢字符串是這樣的:

set mapred.running.reduce.limit = 25; 
SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts; 

通常我會覺得把這樣的屬性到JDBC連接。但據我所知,Hive並不支持這一點。但我想你可以通過將「設置」HiveQL語句作爲主要報告查詢來解決此問題。然後將「選擇」查詢作爲子數據集。以下是我在測試該想法的報告中的一個片段:

<subDataset name="Accounts"> 
    <queryString language="HiveQL"> 
     <![CDATA[SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts]]> 
    </queryString> 
    <field name="name" class="java.lang.String"/> 
    <field name="phone_office" class="java.lang.String"/> 
    <field name="billing_address_city" class="java.lang.String"/> 
    <field name="billing_address_street" class="java.lang.String"/> 
    <field name="billing_address_country" class="java.lang.String"/> 
</subDataset> 
<queryString language="HiveQL"> 
    <![CDATA[set mapred.running.reduce.limit = 25]]> 
</queryString> 

我確認報告是這樣工作的。我的子數據集就像您期望的那樣填充一個Table組件。我沒有一個簡單的方法來確認它確實限制了減速器的數量......但它應該。 (請讓我們知道它是否!)

+0

這很好,我會試試這個,但是這個解決方案只爲這個報告中使用的每個查詢設置了'全局'數量的reducer,但我仍然無法設置這在每個查詢的基礎上。 – wlk 2012-03-24 09:10:34

+0

是的,你是對的。通常,報告基於單個查詢。當然,情況並非總是如此。所以我認爲這種限制會影響你是不尋常的。你認爲它很重要嗎? – mdahlman 2012-03-26 03:10:16

+0

目前我有許多帶有表格或圖表的報告(例如PDF中的20-30頁),它基本上每個表/圖表運行一個查詢,因此它執行大約20-30個查詢(來自不同的數據源:Hive和RDBMS) – wlk 2012-03-26 08:51:10

相關問題