Redshift 时间序列数据库的 Dist/Sort 键

Posted

技术标签:

【中文标题】Redshift 时间序列数据库的 Dist/Sort 键【英文标题】:Dist/Sort key for Redshift time series database 【发布时间】:2019-12-19 01:56:27 【问题描述】:

我参与了一个时间序列遥测项目,我们将数据存储到 Amazon Redshift 中。我们有一个timestamp 列用于收集时间。而ClientIDIOt-ID 则表示客户端内唯一的 IOT 设备。

从我们查询特定日/周/月的意义上来说,我们所有的查询都是有时间限制的。以下是一个好的 dist/sort 键吗?

分发密钥 - (Clientid, IOT-ID) 排序键 - 时间戳

【问题讨论】:

【参考方案1】:

Amazon Redshift 的一般规则是:

Distribution Key设置为通常用于JOIN与其他表的字段。这会将该列的给定值的所有数据放在同一个切片上,从而更容易JOIN 与具有相同 DISTKEY 的其他表。 将排序键设置为WHERE 语句中最常用的字段。行将按此字段的顺序存储,从而更容易“跳过”包含所需数据的磁盘块。 (这非常强大。)

因此,听起来您的 timestamp 字段与 SORTKEY 一样理想。

DISTKEY 的选择取决于您如何加入,但也可以帮助GROUP BY,因为相关数据位于同一位置。

【讨论】:

谢谢。我将使用时间戳字段作为排序键,他们将在 where 子句中进入我的查询以检索时间限制数据。话虽如此,我还希望在同一个表中使用不同的字段来执行“Order by”子句。而且我相信不属于排序键的字段上的 order by 子句会很慢。如何更快地对非排序键进行 order by 子句?最坏的情况是,在将记录放入应用程序的内存后,我将在代码中进行排序。 ORDER BY 仅对结果集进行操作,因此SORT KEY 可能不会对其进行改进。您可以做一个实验来比较有/没有ORDER BY 的查询时间,看看它是否有很大的影响。 (执行此类测试时请务必关闭Result Caching。)

以上是关于Redshift 时间序列数据库的 Dist/Sort 键的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 pandas 数据帧插入 Redshift 表时,Redshift 语句长度超出

从 db 中检索 Redshift 集群指标

将数据加载到 Redshift

过滤加载到 Redshift 中的数据

将 bigquery 数据移至 Redshift

简单时间序列数据的 Redshift 性能