配置单元sql-在多个分区之间

ss2ws0br  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(586)

我把一张 hive 的table按年、月、日进行了分区

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)

然后我面对桥下的巨魔。有没有办法通过多个分区在这两个日期之间选择数据?否则,是否有某种方法我不需要将多个分区更改为单个分区yyyymmdd?
不是斯卡拉就是Hive。
提前谢谢

jpfvwuh4

jpfvwuh41#

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

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)
   }
 }

如果我们导入javalocaldate,那么我们需要getmonthvalue。以防,我们使用的是joda.time然后是getmonthofyear

相关问题