Hive sql - между несколькими разделами

У меня таблица-улей разбита по годам, месяцам и дням

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

и мне нужно взять с него данные за последние 7 дней / разделов. Первый шаг к поиску того, как получить данные за последние семь дней, например:

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

Но потом я сталкиваюсь с троллем под мостом. Есть ли способ выбрать данные между этими двумя датами несколькими разделами? В противном случае, есть ли способ, которым мне не нужно было бы менять несколько разделов на один раздел ГГГГММДД?

Либо скала, либо улей.

заранее спасибо


person fqv572    schedule 01.06.2020    source источник


Ответы (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

person fqv572    schedule 03.06.2020