2013-03-25 9 views
39

私は1000以上のパーティションを持つテーブルを持っています。ハイブ:テーブルのすべてのパーティションを表示する方法は?

"Show partitions"コマンドでは、少数のパーティションしか表示されません。

どのようにすべてのパーティションを表示できますか?

更新:

  1. 私は "show partitions" コマンドは、正確に500のパーティションを一覧表示しました。

  2. select ... where ...」は500個のパーティションのみを処理します。

答えて

49

出力が表示されるときにCLIに制限があります。私は、ローカルのファイルに出力をエクスポートすることをお勧め:

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

同じ結果があります。 500パーティションしか表示されません。私はどこからマジックナンバー500を知りませんか? –

+1

それからいい考えはありません。それは非常に奇妙です。もしあなたがそれを解決したり、その源を見つけたら、私たちに知らせてください。 GL!おそらくナイーブですが、500以上のパーティションがあると確信していますか? – www

+8

"set cassandra.connection.sliceSize = 10000;"によって解決される問題。たぶんそれはハイブのデータストアの外出です。 –

2

あなたは「パーティション」の表にパーティション情報、ハイブメタストアのテーブルを見ることができます。 "TBLS" join "Partition"を使用して、特別なテーブルパーティションをクエリできます。

1

これは、derbyではなくmetastore用にmysqlを設定したと仮定して、wmkyの答えを&以上に拡張して書いています。

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) 

すべてのパーティション列を返します。

DB_ID ON JOINテーブルDBS関与DB(すなわち、複数のDBのは、同一のテーブル名を有する)CLIとして

関連する問題