2013-03-25 39 views
39

我有一個包含1000多個分區的表格。Hive:如何顯示錶的所有分區?

Show partitions」命令只列出少量的分區。

如何顯示所有分區?

更新:

  1. 我發現 「show partitions」 命令只列出正好500分區。

  2. select ... where ...」只處理500個分區!

回答

49

當輸出顯示時,CLI有一些限制。我建議輸出導出到本地文件:

$hive -e 'show partitions table;' > partitions 
+1

相同的結果,CLI。它只顯示500個分區。我不知道魔術數字500從哪裏來。 – 2013-03-25 14:03:34

+1

不知道那麼。這很奇怪。如果你解決它或找到它的來源,請讓我們貼出來。 GL!也許天真,但你確定有超過500個分區? – www 2013-03-25 14:57:45

+8

問題通過「set cassandra.connection.sliceSize = 10000;」解決。也許這是一個datastax對Hive的延伸。 – 2013-03-27 15:20:21

2

您可以在「分區」的表蜂巢MetaStore表,分區信息。 您可以使用「TBLS」連接「分區」查詢特殊表分區。

1

好吧,我正在通過擴展wmky的回答&以上的方式來寫這個答案,假設您已經爲您的Metastore而不是Derby配置了mysql。

select PART_NAME FROM PARTITIONS WHERE TBL_ID=(SELECT TBL_ID FROM TBLS WHERE TBL_NAME='<table_name>'); 

以上查詢爲您提供了分區列的所有可能值。

例子:

hive> desc clicks_fact; 
OK 
time     timestamp         
..        
day      date           
file_date    varchar(8)         

# Partition Information  
# col_name    data_type    comment    

day      date           
file_date    varchar(8)         
Time taken: 1.075 seconds, Fetched: 28 row(s) 

我要取分列的值。

mysql> select PART_NAME FROM PARTITIONS WHERE TBL_ID=(SELECT TBL_ID FROM TBLS WHERE TBL_NAME='clicks_fact'); 
+-----------------------------------+ 
| PART_NAME       | 
+-----------------------------------+ 
| day=2016-08-16/file_date=20160816 | 
| day=2016-08-17/file_date=20160816 | 
.... 
.... 
| day=2017-09-09/file_date=20170909 | 
| day=2017-09-08/file_date=20170909 | 
| day=2017-09-09/file_date=20170910 | 
| day=2017-09-10/file_date=20170910 | 
+-----------------------------------+ 

1216 rows in set (0.00 sec) 

返回所有分區列。

注:JOINDBS ON DB_ID當有涉及到DB(即,時,多個數據庫的有相同的表名)