2014-10-03 182 views
26

獲取列名我知道,你可以從表中通過下面的技巧在蜂巢獲得列名:剛剛從蜂巢表

hive> set hive.cli.print.header=true; 
hive> select * from tablename; 

是否也可以到只是從表中獲取的列名?

我不喜歡改變一個設置,我只需要一次。

我目前的解決方案是:

hive> set hive.cli.print.header=true; 
hive> select * from tablename; 
hive> set hive.cli.print.header=false; 

這似乎太冗長,對DRY原則。

+1

你的意思是你需要獲得列名和select *輸出嗎? – 2014-10-03 15:19:11

+1

爲什麼不做一個描述表? – Amar 2014-10-03 16:11:23

+0

doh!沒有在文檔中找到那個。描述表做到了。 – cantdutchthis 2014-10-03 16:44:45

回答

34

如果你只是想看到的列名這一行應該提供它不更改任何設置:

describe database.tablename; 

但是,如果沒有爲您的蜂巢這個代碼將提供它的版本中運行,但你的默認數據庫現在是你正在使用的數據庫:你也可以做show columns in $table

use database; 
describe tablename; 
+0

我得到了一個問題:將描述掃描所有​​分區,導致HiveMetastore OOM?我在執行describe tablename時遇到了OOM。 – 2017-05-02 09:02:21

0

使用Hive CLI或直線獲取所有列名稱的desc tablename。如果你想要一個文件中的列名,那麼從shell運行下面的命令。

$ hive -e 'desc dbname.tablename;' > ~/columnnames.txt 

其中dbname是蜂巢數據庫,在那裏你的表駐留的名稱 你可以找到在你的根目錄下的文件columnnames.txt。

$cd ~ 
$ls