首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为时间戳查询划分数据

为时间戳查询划分数据
EN

Stack Overflow用户
提问于 2018-11-19 17:44:41
回答 2查看 970关注 0票数 1

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

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

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

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

谢谢!

示例查询如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM spectrum.data
WHERE ts between '2018-11-19 17:30:00' AND '2018-11-20 04:45:00'
EN

回答 2

Stack Overflow用户

发布于 2018-12-11 08:44:49

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

然后执行WHERE (year >x和year < y)和(month > x1和month < x2)和...

看起来很丑陋。

你可以考虑做一些其他的事情:

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

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

其中(日期< '2018-11-19‘和日期> '2018-11-17')和(时间< '17:30:00’和时间> '17:20:00')

或在https://docs.aws.amazon.com/redshift/latest/dg/r_range_condition.html之间使用

票数 1
EN

Stack Overflow用户

发布于 2020-01-24 13:00:25

如果分区是像下面提到的那样创建的,那么它将迎合@Eumcoz请求的查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/';

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from spectrum.data where ts between '2018-11-19 17:30:00' and '2018-11-20 07:50:00'

附言:如果这能解决你的问题,请给我加票。(我需要50个声誉才能对帖子发表评论:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53380050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文