扫描外部表(S3 数据)时 Redshift Spectrum 中的成本控制

Posted

技术标签:

【中文标题】扫描外部表(S3 数据)时 Redshift Spectrum 中的成本控制【英文标题】:Cost control in Redshift Spectrum when scanning external tables (S3 data) 【发布时间】:2018-08-05 19:28:21 【问题描述】:

Athena 有一些默认的service limits,可以帮助~限制对 S3 中大型数据湖的意外“失控”查询的成本。它们不是很好(基于~时间,而不是扫描的数据量),但它仍然很有帮助。

Redshift Spectrum 怎么样? 它提供的哪些机制可以轻松用于限制成本或降低在针对 S3 的单个失控查询中“意外”扫描过多数据的风险?解决这个问题的好方法是什么?

【问题讨论】:

因此,如果 Athena 中的查询超时,您根本不会被收费吗?这很有趣! 【参考方案1】:

Amazon Redshift 允许您使用 WLM Query Monitoring Rules 对 Spectrum 查询执行应用精细控制。

有 2 个 Spectrum 指标可用:Spectrum scan size(查询扫描的 mb 数)和Spectrum scan row count(查询扫描的行数)。

您也可以使用 Query execution time 来强制设置最长持续时间,但这将适用于所有查询类型,而不仅仅是 Spectrum。

请注意,这些是抽样指标。查询不会恰好在超出规则时中止,而是在下一个采样间隔中止。

如果您已经在集群上运行 Spectrum 查询,您可以开始使用 QMR,方法是使用我们的脚本 wlm_qmr_rule_candidates 生成候选规则。生成的规则基于每个指标的第 99 个百分位。

【讨论】:

谢谢@joe。这很有帮助。查询的执行率(例如 #/hour)怎么样?或者它同时运行的查询总数?我没有在指标/规则列表中看到它们。有什么想法吗? Redshift 上的并发查询由集群的 WLM 配置管理。每个 WLM 队列都允许特定数量的并发查询。这适用于与“普通”查询相同的 Spectrum 查询,因为 Spectrum 查询执行在 Redshift 集群和 Spectrum 层之间共享。 每小时查询次数需要在外部计算。

以上是关于扫描外部表(S3 数据)时 Redshift Spectrum 中的成本控制的主要内容,如果未能解决你的问题,请参考以下文章

从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换

我有啥方法可以按表级别限制对 Redshift 外部模式的访问?

在 Amazon Redshift Spectrum 中加载外部表时如何跳过最后几条记录?

查询字符串列的 Redshift Spectrum 数组

如何通过 AWS Quicksight 连接到 Redshift Spectrum 上的外部架构/表?

使用 UNLOAD 命令将 AWS Redshift 数据导出到 S3 时输出不正确