【问题标题】:How to fetch latest date from a hive table partitioned on date column?如何从按日期列分区的配置单元表中获取最新日期?
【发布时间】:2020-05-23 18:17:06
【问题描述】:

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

【问题讨论】:

标签: sql hadoop hive hiveql hadoop-partitioning


【解决方案1】:

只是想出 Hive,假设您已经为 Metastore 而不是 derby 和分区列 load_date 配置了 mysql。

建议 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 或访问问题,请使用以下命令获取分区列表并编写一个读取该文件并给出最大 load_date 的 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_date) 的输出,您始终可以将值存储在 hive 表中并在查询中使用。

【讨论】:

    【解决方案2】:

    Hive 中检查最大日期的唯一方法是使用 ma​​x 聚合函数。在你的情况下,它是max(load_date)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多