如何控制 Redshift 中不断增加的数据量?
Posted
技术标签:
【中文标题】如何控制 Redshift 中不断增加的数据量?【英文标题】:How to control increasing data volume in Redshift? 【发布时间】:2018-06-19 06:16:50 【问题描述】:我在 AWS Redshift 中维护了一个数据仓库。数据量和速度最近都有所增加。一种选择当然是在更高成本的范围内保持水平扩展集群。我想知道是否有任何可用的归档选项,以便我可以像往常一样查询整个数据(可能会在查询时间上有所妥协),但成本很低或没有额外成本?
一种选择是使用外部表并直接从 S3 查询数据,但用于实现此目的的工具(如 Athena 和 Glue)有其自身的成本,这也是基于每个查询。
【问题讨论】:
雅典娜/胶水/红移光谱 = 这是一个很好的选择。如果您不经常查询,并且如果您正确组织表格,则成本可以降到最低。 不确定你是否已经探索过但有high disk and low computation
系列的Redshift实例也是一种选择。
如果您不想有每次查询费用,您应该尝试 Presto。 (Athena 使用 Presto 的执行引擎)
@PiotrFindeisen Presto 会和 Athena 一样快吗?我认为要让它快速运行,我们必须保持大型集群,这又意味着额外的成本。没有?
如果 Athena 与 Presto 开发保持同步,它会一样快。它不是,Presto 可以更快。权力越大,责任越大——您可能希望扩大和缩小集群。当然,如果您只是不时查询,那是不值得的,Athena 的按查询付费模式将是最佳的。
【参考方案1】:
简单的选择:
-
确保所有表都有压缩
SELECT * FROM svv_table_info;
。
通过将大表更改为使用 ENCODE zstd
来最大限度地压缩。
将小于约 50k 行(取决于)的小表切换到 DISTSTYLE ALL
(是的,这样可以节省空间!)。
从基于 SSD 的节点 (dc2
) 切换到拥有更多 8 倍存储空间的 HDD 节点 (ds2
)。
不太容易的选择:
UNLOAD
从 Redshift 到 S3 的旧数据并使用 Redshift Spectrum 进行查询。
使用 AWS Glue 或 AWS EMR 将卸载的数据转换为 Parquet 或 ORC 格式,然后使用 Redshift Spectrum 进行查询。
请尝试使用 Redshift Spectrum。查询性能通常非常好,如果您的数据采用列格式(Parquet/ORC),查询性能会更好。
【讨论】:
从 DC2 切换到 DS2 节点有帮助!【参考方案2】:存储在 Amazon Redshift 中的数据将提供最高性能。
但是,如果您有访问频率较低的数据,您可以将其导出 (UNLOAD
) 到 Amazon S3,最好是作为压缩的分区数据并将其存储为 Parquet 或 ORC 会更好!
然后您可以在 Amazon S3 中使用 Amazon Redshift Spectrum to Query External Data。您甚至可以将外部数据与 Redshift 数据连接起来,这样您就可以在一个查询中查询历史信息和当前信息。
或者,您可以使用 Amazon Athena 直接从 Amazon S3 查询数据。这类似于 Redshift Spectrum,但不需要 Redshift。 Amazon Athena 基于 Presto,因此速度非常快,尤其是当数据以压缩、分区、Parquet/ORC 的形式存储时。
见:Analyzing Data in S3 using Amazon Athena | AWS Big Data Blog
请注意,Redshift Spectrum 和 Amazon Athena 根据从磁盘读取的数据量收费。因此,压缩、分区的 Parquet/ORC 更便宜并且更快。
【讨论】:
以上是关于如何控制 Redshift 中不断增加的数据量?的主要内容,如果未能解决你的问题,请参考以下文章
扫描外部表(S3 数据)时 Redshift Spectrum 中的成本控制
pandas使用pd.DateOffset生成时间偏移量(指定年数月数天数小时分钟)把dataframe数据中的时间数据列统一偏移(相加偏移向后移动时间时间增加)