如何计算 Amazon Redshift Spectrum 查询费用?

3 分钟阅读
0

当我使用 Amazon Redshift Spectrum 查询 Amazon Simple Storage Service (Amazon S3) 数据时,我想计算和优化成本。

简短描述

先决条件:

  • 位于同一 AWS 区域的 Amazon Redshift 集群和 S3 存储桶。
  • 连接到您的集群以运行 SQL 命令的 SQL 客户端。

您需要按照 Redshift Spectrum 从 Amazon S3 扫描的字节数付费。根据区域的不同,可能会产生额外费用。Redshift Spectrum 会将字节数向上取整到下一个兆字节,每个查询的最小字节数为 10 MB。有关详细信息,请参阅 Amazon Redshift 定价

**注意:**Redshift Spectrum 对于管理分区和失败查询的数据定义语言 (DDL) 语句 CREATEALTERDROP TABLE 不收费。您的 Amazon Redshift Serverless 计算容量费用包括所有 Amazon S3 外部数据查询。

解决方法

要计算预计的查询成本并获得在 Redshift Spectrum 中运行的所有 S3 查询的摘要,请使用 SVL_S3QUERY_SUMMARY 表。s3_scanned_bytes 列返回 Redshift Spectrum 从 S3 扫描并发送到 Redshift Spectrum 层的字节数。

使用量

针对 SVL_S3QUERY_SUMMARY 运行以下查询,以确定 Amazon S3 按照 queryID 传输的字节数:

SELECT s3_scanned_bytes
FROM SVL_S3QUERY_SUMMARY
WHERE query=queryID;

**注意:**将 queryID 替换为您的查询的 ID。

要确定从 S3 扫描的所有字节的总和,请运行以下查询:

SELECT sum(s3_scanned_bytes)
FROM SVL_S3QUERY_SUMMARY;

您还可以确定在特定时间间隔内运行的所有 Redshift Spectrum 查询的字节总和。以下示例显示如何计算从前一天开始运行的查询的总字节数:

SELECT sum(s3_scanned_bytes)
FROM SVL_S3QUERY_SUMMARY
WHERE starttime >= current_date-1;

如果您对美国东部(弗吉尼亚州北部)区域的 S3 存储桶运行以下查询,则 Redshift Spectrum 按照太字节收费。如果在查询 SVL_S3QUERY_SUMMARY 时,s3_scanned_bytes 的总和返回 621,900,000,000 字节,则从字节转换为太字节时,就有 0.565614755032584 太字节。

查询示例:

621900000000 bytes = 621900000000/1024 = 607324218.75 kilobytes
607324218.75 kilobytes = 607324218.75/1024 =  593090.057373046875 megabytes
593090.057373046875  megabytes =  593090.057373046875 /1024 = 579.189509153366089 gigabytes
579.189509153366089  gigabytes =  579.189509153366089/1024 = 0.565614755032584 terabytes

在以下示例中,您的使用量约为 0.5657 太字节。要计算 Redshift Spectrum 的使用成本,请将每太字节的成本相乘:

$5 * 0.5657= $2.83

运行以下 SQL 查询以计算 Redshift Spectrum 的使用费用:

SELECT
   round(1.0*sum(s3_scanned_bytes/1024/1024/1024/1024),4) s3_scanned_tb,
   round(1.0*5*sum(s3_scanned_bytes/1024/1024/1024/1024),2) cost_in_usd
FROM SVL_S3QUERY_SUMMARY;

前面的示例在 Redshift Spectrum 中查询了从前一天开始查询所扫描数据中针对您的 S3 存储桶收取的费用。

**注意:**所有扫描到 9.9 MB 的查询向上取整,并按 10 MB 收费。对于失败或停止的查询,不收取任何费用。

此外,系统日志表 (STL) 仅保留 2-5 天的日志历史记录,具体取决于日志使用情况和可用磁盘空间。要保留传输的字节记录,最佳做法是计算每日查询费用并将数据存储在另一个表中。

查询示例:

CREATE VIEW spectrum_cost AS
SELECT starttime::date as date, xid, query, trim(usename) as user,
  CASE WHEN s3_scanned_bytes < 10000000 then 10 ELSE s3_scanned_bytes/1024/1024 end as scanned_mb,
  round(CASE WHEN s3_scanned_bytes < 10000000 then 10*(5.0/1024/1024)
  ELSE (s3_scanned_bytes/1024/1024)*(5.0/1024/1024) end,5) as cost_$
FROM svl_s3query_summary s
LEFT JOIN pg_user u ON userid=u.usesysid
JOIN
(select xid as x_xid,max(aborted) as x_aborted from svl_qlog group by xid) q
ON s.xid=q.x_xid
WHERE userid>1 AND x_aborted=0
AND s.starttime >= current_date-1;

**注意:**您也可以使用 CREATE TABLE 查询来计算数据并将其存储在另一个表中。如果您不想指定时段,请移除 current_date-1

计算前一天查询从 S3 扫描到 Redshift Spectrum 的数据总和。要计算费用的总预估金额,请运行以下查询:

SELECT current_date-1 as query_since, SUM(scanned_mb) as total_scanned_mb, SUM(cost_$) as total_cost_$
FROM spectrum_cost;
Result:
  query_since | total_scanned_mb | total_cost_$
--------------+------------------+---------------
 2020-05-15   |            5029  |      0.02515

Redshift Spectrum 最佳实践

要降低查询费用并提高 Redshift Spectrum 的性能,请遵循以下最佳实践:

  • 使用 Redshift Spectrum 的成本控制和并发扩展功能来监控和控制您的使用情况。
  • 使用优化的数据格式来提高性能并降低成本。使用 PARQUET 和 ORC 等列存数据格式仅选择要从 Amazon S3 扫描的列。
  • 如果您不经常访问数据,请将数据加载到 Amazon S3 中并使用 Redshift Spectrum。
  • 当您使用多个 Amazon Redshift 集群来扩展并发性时,请在作业完成后立即停止集群。

Redshift Spectrum 的成本控制和并发扩展

如果您使用 Redshift Spectrum 的成本控制和并发扩展功能,则可以创建每日、每周和每月的使用配额。当您达到使用配额时,Amazon Redshift 会自动执行操作。

要配置成本控制,请完成以下步骤:

  1. 打开 Amazon Redshift 控制台
  2. 选择 Configure usage limit(配置使用限制)。
  3. 更新以下配置设置:
    时段
    使用限制
    操作
    **注意:**Action(操作)设置可以帮助您管理使用配额。

要配置并发扩展使用配额,请完成以下步骤:

  1. 打开 Amazon Redshift 控制台
  2. 选择 Concurrency scaling usage limit(并发扩展使用限制)作为您的使用配额。
  3. 更新以下配置设置:
    时段
    使用限制
    操作
    **注意:**Time period(时段)采用 UTC 时区。对于 Action(操作)设置,您还可以为“警报”和“禁用”功能附加 Amazon Simple Notification Service (Amazon SNS) 订阅。如果您使用 Amazon Redshift 控制台激活警报,则会自动为这些指标创建 Amazon CloudWatch 警报。

其他成本控制要求和限制

要管理您的 Redshift Spectrum 使用量和成本,请查看以下要求和限制:

  • 支持的 1.0.14677 或更高版本提供使用配额。
  • 您最多可以为每个类别添加 4 个配额和操作,总配额为 8 个。
  • 只有提供 Redshift Spectrum 和并发扩展的区域才支持 Redshift Spectrum。
  • 每项功能只有一个配额可以使用“禁用”功能。
  • 在您删除使用配额定义或集群之前,使用配额一直有效。
  • 如果您在时段的中间创建配额,则该配额从该时段的中间点到终点进行测量。
  • 如果您选择日志选项,请查看 STL_USAGE_CONTROL 日志中的详细信息。

相关信息

设置使用限制,包括设置 RPU 限制

SVL_QLOG

系统表和视图参考

Amazon Redshift Spectrum 的最佳实践

AWS 官方
AWS 官方已更新 1 个月前