首页 > 解决方案 > 对时间戳查询的数据进行分区

问题描述

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

我使用胶水对数据进行了分区,方法是解析我用于时间戳的字段,ts. 我将执行的大多数查询都将在ts现场进行,因为它们是比每日更精细的时间戳范围查询(可能跨越多天或少于一天,但通常涉及时间。

我将如何在我的数据上创建每小时(首选,如果需要,每天可以工作)分区,因此当我查询ts(或另一个时间戳)字段时,它将正确访问分区。如果需要,我可以使用不同的分区重新创建我的数据。大多数示例/文档只是每天存储数据,并在查询中使用日期字段。

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

谢谢!

示例查询类似于:

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

标签: amazon-redshiftamazon-redshift-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

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

哪里(日期<'2018-11-19'和日期>'2018-11-17')和(时间<'17:30:00'和时间>'17:20:00')

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


推荐阅读