2014-02-25 67 views
0

我想從程序的輸出中加載數據,但不是已有的數據文件。這是我想要的:Hive:從程序插入數據但不插入數據文件?

CREATE TABLE MyTable (
    X STRING); 

INSERT OVERWRITE MyTable 
    BY PROGRAM "python MyProgram.py"; -- #!/usr/bin/python 
             -- print 'hello' 
             -- print 'world' 

SELECT X FROM MyTable;     -- I will get 2 records: 
             -- hello 
             -- world 

但似乎配置單元不提供這樣的INSERT ... BY PROGRAM方法。有沒有其他方法可以做到這一點?

回答

0

我過去使用的是Hadoop HDFS Rest Api http://hadoop.apache.org/docs/r1.0.4/webhdfs.html。我從shell運行程序(.py),然後通過Api將數據推送到HDFS/Hive中。如果您的Hive表已經設置好,那麼您可以覆蓋現有的Hive文件。

我使用的另一種方法是將程序(.py,.sh等)創建爲臨時文件,然後使用Hive命令添加該文件,然後刪除臨時文件。

編輯

在回答您的評論說你沒有訪問到shell,你也許可以嘗試使用自定義地圖/在蜂巢https://cwiki.apache.org/confluence/display/Hive/Tutorial滾動減少功能底部'自定義地圖/減少腳本')並傳入地圖 - 減少一些將被忽略的虛擬數據,並以減少的形式寫入.py腳本,然後讓它發出所需的數據。

+0

可悲的是我無法在殼中運行。我們有一個網絡前端提交查詢... – richselian

+0

在我對你的問題的答案中增加了一個建議。 –