0

我有一个按年、月和日分区的蜂巢表

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,要么是蜂巢。

提前致谢

4

1 回答 1

0

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

  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

于 2020-06-03T09:42:55.807 回答