2015-01-08 54 views
2

我試圖通過Hive使用DESCRIBE函數將每個表的列描述輸出到單個文件。我發現-f選項,這樣我就可以從文件中讀取和寫入輸出退了出來:運行多個配置單元查詢並將輸出寫入文件

hive -f nameOfSqlQueryFile.sql > out.txt 

不過,如果我打開輸出文件,它拋出所有的描述背靠背目前還不清楚其中一個描述從一個表開始並結束。

所以,我試圖使使用-e一一描述每個表的一個批處理文件,並輸出到一個文件:

#!/bin/bash 

nameArr=($(hive -e 'show tables;')) 
count=0 
for i in "${nameArr[@]}" 
do 
    echo 'Working on table('$count'): '$i 
    hive -e 'describe '$i > $i'_.txt'; 
    count=$(($count+1)) 
done 

然而,因爲這需要重新對每個查詢,這是處理數百個查詢需要數小時,速度非常緩慢。

有沒有人有一個想法,我怎麼可能運行這些DESCRIBE函數,並理想地輸出到單獨的文件?

+0

如果你只在表定義興趣,而不是數據,你可能有一些運氣直接進入Metastore。根據您的metastore,您可能會直接獲取東西(mySQL),或者我聽說有一個用於Metastore的Java API。 – LiMuBei

回答

1

你也許可以使用其中的一個,這取決於你如何處理輸出:

  1. 只需使用OK線作爲分隔符,並使用腳本進行搜索。
  2. 運用描寫EXTENDED這在結束在桌子上增加了一個符合的信息,包括它的位置,它可以被用來提取表名(SED使用,例如)
  3. 如果你只是使用輸出文件作爲手動參考,插入打印每個表之間你選擇的隔膜的SQL語句,如:其中

    DESCRIBE table; 
    SELECT '-----------------' FROM table; 
    
相關問題