我想通过spectrum访问s3上的部分数据。当前的格式文件结构类似于:s3://bucket/dir/year=2018/month=11/day=19/hour=12/file.parquet
我使用glue对数据进行分区,方法是解析用作时间戳的字段ts
。我要做的大多数查询都是在ts
字段上进行的,因为它们是时间戳范围的查询,比每天更细粒度(可能跨越多天,也可能不到一天,但通常涉及时间。
我该如何在我的数据上创建每小时一次的分区(如果需要,每天都可以),这样当我查询ts
(或其他时间戳)字段时,它将正确地访问分区。如果需要,我可以用不同的部分重新创建数据。大多数示例/文档只存储每天的存储桶数据,并在查询中使用日期字段。
如果需要的话,我很乐意提供更多的信息。
谢谢!
示例查询如下所示:
SELECT * FROM spectrum.data
WHERE ts between '2018-11-19 17:30:00' AND '2018-11-20 04:45:00'
发布于 2018-12-11 08:44:49
光谱并不是那么直观。您可能需要将时间戳转换为年、月、日……
然后执行WHERE (year >x和year < y)和(month > x1和month < x2)和...
看起来很丑陋。
你可以考虑做一些其他的事情:
在这种情况下,您的查询将更加简单
其中(日期< '2018-11-19‘和日期> '2018-11-17')和(时间< '17:30:00’和时间> '17:20:00')
或在https://docs.aws.amazon.com/redshift/latest/dg/r_range_condition.html之间使用
发布于 2020-01-24 13:00:25
如果分区是像下面提到的那样创建的,那么它将迎合@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个声誉才能对帖子发表评论:)
https://stackoverflow.com/questions/53380050
复制相似问题