【发布时间】:2017-02-14 03:20:42
【问题描述】:
Redshift 文档将时间序列表确定为最佳实践: http://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-time-series-tables.html
但是,它没有解决以下任何问题:
- union-all 视图中有多少个表是合理的 - 数百个? (未答复)
- 写入 union-all 视图并让 redshift 将这些插入定向到正确的基础表的任何方法? (答案:没有)
- 加载基础表的最有效方法?也许使用 firehose 插入临时表,然后定期将这些行插入到 union-all 视图中的适当表中? (未答复)
- 在查询 union-all 视图时,如果它们的日期范围超出查询条件,是否有任何方法可以启用 redshift 以消除某些底层分区(表)? (答案:否)
- redshift 能否支持在事务中删除旧表、添加新表和重建 union-all 视图? (未答复)
我的情况:
- 每天增加1亿行,3年内增长到5亿
- 希望保留 12 个月
- 估计 99% 的查询将在最近 1-7 天到达
- 数据通过 kinesis firehose 写入现有表到 s3,然后触发复制到 redshift 表。
我提出的解决方案:
- 使用 union all 视图创建一年的每日表,以及 sensor_id 的 dist_key(100,000+ uniq 值)和(timestamp、sensor_id)的 sort_key。
- 将消防软管加载到临时表中
- 创建一个单独的进程,每小时查询一次临时表以发现表中数据的日期,然后执行插入到“适当的表”中 select * from where timestamp = table's timestamp。
- 这个按小时编写的作者可能会将表重命名、多个插入选择和表重新创建包装在一个事务中,以使 firehose 不可见。
- 每月删除一次旧表,创建下个月的表,然后重建视图。
- 这种联合所有视图维护可能包含在事务中以避免对用户产生影响。
- 每晚运行一次真空分析仪。
编辑:添加了说明哪些问题已得到解答的注释,并为建议的解决方案添加了一些细节。
【问题讨论】:
-
我目前正在与类似的事情作斗争。你跟它过去了吗?你的经验是什么?对执行 UNION 的性能影响的任何见解,例如30 个表(一个月的数据量)?
-
我没有实现时间序列表——事实上我对这个功能非常失望:亚马逊的文档完全不够,看起来你得到零分区的好处,但它使查询计划更加困难,并且直接和简单的负载(比如从消防软管)是不可能的。唯一的好处是滚出数据,也许是分析和吸尘。到目前为止,我的解决方案是暂时忽略问题并评估雪花。
-
我感觉到你了。他们将其作为 PB 级仓库进行营销。我想知道 PB 级的真空吸尘器是如何工作的 :) Snowflake 似乎很有趣。您是否尝试过 BigQuery?它对分区有很好的支持(至少在文档中)。
-
我遇到了同样的问题并试图找出最好的方法。如果您能分享您的经验,那就太好了。
-
我同意 KenFar 的观点,即时间序列表如果连接到某些蒸汽输入(例如 firehose)则不值得付出努力,处理插入将很困难且容易出错。
标签: amazon-redshift