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

bxgwgixi  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(468)

如果我的日期列是load\u date,那么使用max(load\u date)操作符将扫描配置单元中的每个数据文件,这将是一个代价高昂的操作。相反,有没有最佳的方法从表中获取最新的加载日期。

w7t8yxp5

w7t8yxp51#

假设您已经为metastore配置了mysql,而不是derby和分区列load\u 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脚本来读取此文件并给出最大加载日期。

$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\u date)的输出,您可以始终将值存储在配置单元表中并在查询中使用。

wgxvkvu9

wgxvkvu92#

在配置单元中检查max date的唯一方法是使用max聚合函数。你的情况是 max(load_date) .
不仅是hive,在任何关系数据库中,这都是查找最新日期的方法。如果在您的设计中需要的话,您可以有一个元数据表,它记录配置单元中加载的每个文件的统计信息,这有助于您获取最新的记录

相关问题