正在对时间戳查询的数据进行分区



我想通过频谱访问s3上的分区数据。当前的格式文件结构类似于:s3://bucket/dir/year=2018/month=11/day=19/hour=12/file.parquet

我通过解析用于时间戳的字段ts,使用glue对数据进行了分区。我将要做的大多数查询都在ts字段上,因为它们是时间戳范围的查询,比每天都更精细(可能跨越多天,也可能不到一天,但通常涉及时间

我该如何在我的数据上创建每小时(如果需要的话,每天都可以(的分区,这样当我查询ts(或另一个时间戳(字段时,它就会正确地访问分区。如果需要,我可以用不同的分区重新创建我的数据。大多数示例/文档每天只存储数据,并在查询中使用日期字段。

如果需要,我很乐意提供更多信息。

谢谢!

查询示例如下:

SELECT * FROM spectrum.data
WHERE ts between '2018-11-19 17:30:00' AND '2018-11-20 04:45:00'

Spectrum并不那么直观。您可能需要将时间戳转换为年、月、日。。。

然后做一些类似WHERE(year>x And year<y(And(month>x1 And month<x2(And。。。

看起来很难看。

你可以考虑做其他事情:

  1. s3://bucket/dir/date=2018-11-19/time=17:30:00/file.parquet

在这种情况下,您的查询将更简单

WHERE(date<'2018-11-19'AND date>'2018-11-17'(AND(time<'17:30:00'AND time>'17:20:00'(

或使用BETWEENhttps://docs.aws.amazon.com/redshift/latest/dg/r_range_condition.html

如果分区是像下面提到的那样创建的,它将满足@Eumcoz 的查询

ALTER TABLE spectrum.data ADD PARTITION (ts='2018-11-19 17:30:00') 
LOCATION 's3path/ts=2018-11-19 17:30:00/';
ALTER TABLE spectrum.data ADD PARTITION (ts='2018-11-19 17:40:00') 
LOCATION 's3path/ts=2018-11-19 17:40:00/';
ALTER TABLE spectrum.data ADD PARTITION (ts='2018-11-19 17:50:00') 
LOCATION 's3path/ts=2018-11-19 17:50:00/';
ALTER TABLE spectrum.data ADD PARTITION (ts='2018-11-20 07:30:00') 
LOCATION 's3path/ts=2018-11-20 07:30:00/';

然后,如果您启动此查询,它将返回上述所有分区中的数据:

select * from spectrum.data where ts between '2018-11-19 17:30:00' and '2018-11-20 07:50:00'

附言:如果这能解决你的目的,请投赞成票。(我需要50个声誉才能对帖子发表评论:(

最新更新