1000以上のパーティションを持つテーブルがあります。
「Show partitions
」コマンドは、少数のパーティションのみをリストします。
すべてのパーティションを表示するにはどうすればよいですか?
更新:
「show partitions
」コマンドでは、正確に500個のパーティションしかリストされていません。
「select ... where ...
」は500個のパーティションのみを処理します!
CLIには、出力が表示されるときに制限があります。出力をローカルファイルにエクスポートすることをお勧めします。
$Hive -e 'show partitions table;' > partitions
Hive> show partitions table_name;
Hive MetaStoreテーブル、「PARTITIONS」のテーブルのパーティション情報を確認できます。 「TBLS」結合「Partition」を使用して、特別なテーブルパーティションを照会できます。
さて、ダービーの代わりにメタストア用に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がある場合)