【问题标题】:Hive sql - between multiple partitionsHive sql - 在多个分区之间
【发布时间】:2020-06-01 10:44:31
【问题描述】:

我有一个按年、月和日分区的配置单元表

CREATE TABLE t1 (
...
 )
PARTITIONED BY (
year INT,
month INT,
day INT'
)
STORED AS PARQUET;

我需要从中获取最近 7 天/分区的数据。寻找如何获取最近 7 天数据的第一步,例如:

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val runDate = date
val runDay = LocalDate.parse(runDate.toString, formatter)
val runDayMinus7 = runDay.minusDays(7)

但后来我面对桥下的巨魔。有没有办法通过多个分区在这两个日期之间选择数据?否则,有什么方法我不需要将多个分区更改为单个分区 YYYYMMDD?

要么是scala,要么是hive。

提前致谢

【问题讨论】:

    标签: scala apache-spark hive hive-partitions


    【解决方案1】:

    我创建了下一个方法来解决这个问题。两个参数,日期和天数

      def dayFilter(date: LocalDate, days: Int): Column = {
       days match {
        case _ if days < 0 => lit(false)
        case 0 => (col("year") === date.getYear and
         col("month") === date.getMonthValue and
         col("day") === date.getDayOfMonth)
        case _ => (col("year") === date.getYear and
         col("month") === date.getMonthValue and
         col("day") === date.getDayOfMonth) or dayFilter(date.minusDays(1), days - 1)
       }
     }
    

    如果我们导入Java LocalDate,那么我们需要getMonthValue。以防万一,我们使用 joda.time 然后 getMonthOfYear

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2022-12-08
      • 2017-04-01
      • 1970-01-01
      相关资源
      最近更新 更多