如何从在date列上分区的配置单元表中获取最新日期?

时间:2020-05-23 18:17:06

标签: sql hadoop hive hiveql hadoop-partitioning

例如如果我的日期列是load_date,则使用max(load_date)运算符将扫描配置单元中的每个数据文件,从而使其成为昂贵的操作。相反,有什么最佳方法可以从表中获取最新的load_date。

2 个答案:

答案 0 :(得分:2)

仅考虑Hive,假设您为元存储库配置了mysql,而不是derby和分区列load_date。

建议1:此查询为您提供所有分区名称。做子字符串(day = 2020-05-24),从其中取出日期部分,并将其转换为日期,然后获得最大值。

mysql> select PART_NAME FROM PARTITIONS WHERE TBL_ID=(SELECT TBL_ID FROM TBLS WHERE TBL_NAME='PARTITIONED_TABLE');

建议2:如果您没有mysql或访问问题,请使用以下命令获取分区列表,并编写一个shell脚本来读取该文件并提供最大load_date。

$hive -e 'show partitions table;' > partitions.txt

建议3 :在Hive中,方法是避免全表扫描。这里的“ -3”是变量,如果知道的话,将其更改为上次成功加载的天数。

select max(load_date) from db.table_name
where load_date>date_add(current_date,-3)

注意:不确定要如何使用max(load_date)的输出,您始终可以将值存储在配置单元表中并在查询中使用。

答案 1 :(得分:0)

Hive中检查最大日期的唯一方法是使用 max 汇总功能。在您的情况下,其max(load_date)

不仅Hive,在任何关系数据库中,这都是查找最新日期的方法。如果您的设计需要,可以有一个元数据表,其中记录了配置单元中加载的每个文件的统计信息,这可以帮助您获取最新记录