我在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'
答案 0 :(得分:0)
频谱不是那么直观。您可能需要将时间戳转换为年,月,日...
比起WHERE(年> x AND年
您可以考虑做其他事情:
在这种情况下,您的查询会更简单
其中(日期<'2018-11-19'AND日期>'2018-11-17')AND(时间<'17:30:00'AND时间> '17:20:00')
或使用BETWEEN https://docs.aws.amazon.com/redshift/latest/dg/r_range_condition.html
答案 1 :(得分:0)
如果按如下所述创建分区,它将满足@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'
P.S。如果可以解决您的目的,请对此进行投票。 (我需要50个信誉才能对帖子发表评论:))