web-dev-qa-db-ja.com

ハイブ:テーブルのすべてのパーティションを表示する方法は?

1000以上のパーティションを持つテーブルがあります。

Show partitions」コマンドは、少数のパーティションのみをリストします。

すべてのパーティションを表示するにはどうすればよいですか?

更新:

  1. show partitions」コマンドでは、正確に500個のパーティションしかリストされていません。

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

55
Kevin Leo

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

$Hive -e 'show partitions table;' > partitions
76
www

Hive> show partitions table_name;

9
Sri

Hive MetaStoreテーブル、「PARTITIONS」のテーブルのパーティション情報を確認できます。 「TBLS」結合「Partition」を使用して、特別なテーブルパーティションを照会できます。

3
youchuikai

さて、ダービーの代わりにメタストア用に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)

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

注:JOIN table DBS ON DB_ID関係するDBがある場合(つまり、複数のDBに同じtable_nameがある場合)

2
Sridhar