选择单个列似乎不会减少 AWS Athena 中扫描的数据量

Selecting a single column doesn't seem to reduce the amount of data scanned in AWS Athena

我正在试验 Athena 查询存储在 s3 的镶木地板中的数据。 我在 daystamp 列上添加了一个分区,正如预期的那样,当我创建一个使用它的查询时,它减少了扫描的数据量。

然而,当我在 SELECT 语句中将列限制为 return 时,我希望它再次减少扫描数据量,但事实并非如此,它只会加快速度查询。

我认为它减少了扫描的数据量是不是错了?

示例如下:(运行时间从 11 秒减少到 5 秒,但扫描的数据仍为 2.08MB)

SELECT *


SELECT "column"


SELECT "column.field"

编辑:

已添加SHOW CREATE TABLE logdata

CREATE EXTERNAL TABLE `logdata`(
  `cells` struct<voltages:array<double>,temperatures:array<int>,capacities:array<double>,soc:array<double>,duty:array<int>,resistance:array<double>> COMMENT 'from deserializer', 
  `pack` struct<outputvoltage:string,packvoltage:string,current:string> COMMENT 'from deserializer', 
  `timestamp` string COMMENT 'from deserializer')
PARTITIONED BY ( 
  `daystamp` string, 
  `deviceid` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES ( 
  'paths'='cells,daystamp,deviceId,pack,timestamp') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://bucketname/v1/logdata/'
TBLPROPERTIES (
  'CrawlerSchemaDeserializerVersion'='1.0', 
  'CrawlerSchemaSerializerVersion'='1.0', 
  'UPDATED_BY_CRAWLER'='ndjsonToParquet', 
  'averageRecordSize'='378', 
  'classification'='json', 
  'compressionType'='none', 
  'objectCount'='162', 
  'recordCount'='232193', 
  'sizeKey'='88003003', 
  'typeOfData'='file')

是的,的确如此。您没有在 table 中使用镶木地板格式。正确的 table 应该像这样使用 SerDe:

org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

你需要先转换这个数据,你也可以转换struct和array类型。您可以在 Athena 中使用 AWS GLUE 或 CTAS 命令来执行此操作。