繁体   English   中英

在日期/时间范围内查询配置单元分区表

[英]query hive partitioned table over date/time range

我的配置单元表按年、月、日、小时进行分区

现在我想从 2014-05-27 到 2014-06-05 获取数据我该怎么做??

我知道一种选择是在纪元(或 yyyy-mm-dd-hh)和查询传递纪元时间创建分区。 我可以在不丢失日期层次结构的情况下做到这一点吗?

表结构

CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int)
PARTITIONED BY (year int, month int, day int, hour int) 
STORED AS TEXTFILE;

这是我们每天在 hive 中查询表时面临的类似场景。 我们已经按照您解释的方式对我们的表进行了分区,这对查询有很大帮助。 我们是这样分区的:

CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int)
PARTITIONED BY (year bigint, month bigint, day bigint, hour int) 
STORED AS TEXTFILE;

对于分区,我们分配如下值:

year = 2014, month = 201409, day = 20140924, hour = 01

这样查询变得非常简单,您可以直接查询:

select * from table1 where day >= 20140527 and day < 20140605 

希望这可以帮助

你可以这样查询

  WHERE st_date > '2014-05-27-00' and end_date < '2014-06-05-24' 

应该给你想要的结果,因为即使它是刺痛,它也会按字典顺序进行比较,即“2014-04-04”总是大于“2014-04-03”。

我在我的示例表上运行它,它运行得非常好。

您可以将CONCAT 与 LPAD 一起使用。

假设您想获取 2020-03-24,hour=00 到 2020-04-24,hour=23 之间的所有分区,那么您的“where”条件将如下所示:

WHERE (CONCAT(year, '-', LPAD(month,2,'0'), '-', LPAD(day,2,'0'), '_', LPAD(hour,2,'0')) > '2020-03-24_00')
AND (CONCAT(year, '-', LPAD(month,2,'0'), '-', LPAD(day,2,'0'), '_', LPAD(hour,2,'0')) < '2020-04-24_23')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM