如何在HIVE表中找到最新的分区

und*_*ood 11 hadoop hive apache-spark

我有一个分区表 - 有201个分区.我需要在此表中找到最新的分区,并使用它来处理我的数据.查找所有分区列表的查询是:

use db;
show partitions table_name; 
Run Code Online (Sandbox Code Playgroud)

我需要一个查询来查找最新的这些分区.分区的格式

ingest_date=2016-03-09
Run Code Online (Sandbox Code Playgroud)

我尝试使用max(),这给了我一个错误的结果.我不想通过这样做遍历整个表格

select max(ingest_date) from db.table_name; 
Run Code Online (Sandbox Code Playgroud)

这会给我预期的输出..但是杀死了第一个分区的重点.

是否有更高效的查询来获取HIve表的最新分区?

Kas*_*ash 8

如果您想避免按照上面的建议在 hive shell 中运行“显示分区”,您可以将过滤器应用于 max() 查询。这将避免进行全表扫描,结果应该相当快!

select max(ingest_date) from db.table_name where ingest_date>date_add(current_date,-3) 只会扫描 2-3 个分区。

  • 我发现 ```select max(ingest_date) from db.table_name``` 在我的问题中非常有用,因为它只从 Hive 表中所有可能的分区返回一个值。 (2认同)

pkg*_*lli 5

您可以使用"show partitions":

hive -e "set hive.cli.print.header=false;show partitions table_name;" | tail -1 | cut -d'=' -f2
Run Code Online (Sandbox Code Playgroud)

这将为您提供"2016-03-09"作为输出.