Hive sql - 多个分区之间
Hive sql - between multiple partitions
我有一个按年、月、日划分的配置单元 table
CREATE TABLE t1 (
...
)
PARTITIONED BY (
year INT,
month INT,
day INT'
)
STORED AS PARQUET;
我需要从中获取最后 7 days/partitions 的数据。找到如何获取最近 7 天数据的第一步,例如:
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val runDate = date
val runDay = LocalDate.parse(runDate.toString, formatter)
val runDayMinus7 = runDay.minusDays(7)
但后来我在桥下遇到了巨魔。有没有办法通过多个分区 select 这两个日期之间的数据?否则,有什么方法不需要将多个分区更改为单个分区 YYYYMMDD?
要么是scala,要么是hive。
提前致谢
我已经创建了下一个方法来解决这个问题。两个参数,日期和天数
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
我有一个按年、月、日划分的配置单元 table
CREATE TABLE t1 (
...
)
PARTITIONED BY (
year INT,
month INT,
day INT'
)
STORED AS PARQUET;
我需要从中获取最后 7 days/partitions 的数据。找到如何获取最近 7 天数据的第一步,例如:
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val runDate = date
val runDay = LocalDate.parse(runDate.toString, formatter)
val runDayMinus7 = runDay.minusDays(7)
但后来我在桥下遇到了巨魔。有没有办法通过多个分区 select 这两个日期之间的数据?否则,有什么方法不需要将多个分区更改为单个分区 YYYYMMDD?
要么是scala,要么是hive。
提前致谢
我已经创建了下一个方法来解决这个问题。两个参数,日期和天数
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