gpt4 book ai didi

amazon-web-services - Redshift Spectrum 如何扫描数据?

转载 作者:行者123 更新时间:2023-12-04 12:23:19 25 4
gpt4 key购买 nike

给定 S3 上由时间戳字段分区的 1.4 TB Parquet 数据的数据源(因此分区为 year - month - day ),我正在查询特定日期的数据(2.6 GB 数据)并检索 Parquet 中的所有可用字段使用此查询通过 Redshift Spectrum 获取文件:

SELECT *
FROM my_external_schema.my_external_table
WHERE year = '2020' and month = '01' and day = '01'
该表通过指向 S3 中顶级“文件夹”的 Glue Crawler 提供;这将创建一个数据库,然后通过此命令将数据库链接到新的 external schema :
create external schema my_external_schema from data catalog
database 'my_external_schema'
iam_role 'arn:aws:iam::123456789:role/my_role'
region 'my-region-9';
分析我的 IDE 中的表,我可以看到该表是由以下语句生成的:
create external table my_external_schema.my_external_table
(
id string,
my_value string,
my_nice_value string
)
partitioned by (year string, month string, day string)
row format serde 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
with serdeproperties ('serialization.format'='1')
stored as
inputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
outputformat 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
location 's3://my-bucket/my/location/'
table properties ('CrawlerSchemaDeserializerVersion'='1.0', 'CrawlerSchemaSerializerVersion'='1.0', 'UPDATED_BY_CRAWLER'='my_crawler');
当我分析来自 Redshift 的查询时,我看到它被扫描了大约 86 GB 的数据。
这怎么可能?这是一个问题,因为 Redshift 根据扫描的数据量计费,并且看起来服务正在扫描的数据量大约是该分区中实际数据量的 40 倍。
我还尝试在 Athena 中执行相同的查询,在那里我只扫描了 2.55 GB 的数据(绝对更合理)。
我不能提供关于集群大小的太多细节,但假设那些 86GB 的扫描数据适合集群的内存。

最佳答案

问题似乎出在 AWS Redshift 控制台中。
如果我们从 Redshift 控制台中的“查询详细信息”中分析查询,我可以看到“扫描的总数据”报告了 86GB。正如 Vzarr 提到的,我在 Athena 上运行相同的查询来比较性能。执行时间基本相同,但扫描的数据量完全不同:2.55GB。
我在使用和不使用分区列的情况下对 S3 外部模式上的其他查询进行了相同的比较:我看到每次测试中扫描的 GB 总数不同,有时差异很大(Redshift Spectrum 中为 320MB,Athena 中为 20GB)。
我决定查看 Redshift 中的系统表,以了解外部架构上的查询是如何工作的。我使用 SVL_S3QUERY 做了一个非常简单的测试:

SELECT (cast(s3_scanned_bytes as double precision) / 1024 / 1024 / 1024) as gb_scanned,
s3_scanned_rows,
query
FROM SVL_S3QUERY
WHERE query = '<my-query-id>'
结果与 AWS Redshift 控制台对同一查询所说的完全不同。不仅 gb_scanned错了,但是 s3_scanned_rows也是。查询一共返回了 2.55GB 的数据 Scanned,和 Athena 说的完全一样。
为了确认 SVL_S3QUERY 中的数字,我使用了 AWS Cost Explorer仔细检查一天内扫描的 GB 总数以及我们为 Redshift Spectrum 支付的费用:数字基本相同。
此时,我不知道 AWS Redshift 控制台从何处或哪个表获取查询详细信息,但它们似乎完全错误。

关于amazon-web-services - Redshift Spectrum 如何扫描数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64912152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com