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

时间:2018-10-15 11:37:00

标签: parquet amazon-athena

我正在尝试对S3中镶木地板中存储的数据进行Athena查询。 我在列daystamp上添加了一个分区,并且按预期的方式,当我创建一个使用该分区的查询时,它减少了扫描的数据量。

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

我认为它会减少扫描的数据量吗?

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

选择*

enter image description here


选择“列”

enter image description here


选择“ column.field”

enter image description here

编辑:

添加了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')

1 个答案:

答案 0 :(得分:2)

是的,的确如此。您不在表中使用镶木地板格式。右表应使用SerDe像这样:

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

您需要首先转换此数据,还可以转换结构和数组类型。您可以通过在Athena中使用AWS GLUE或CTAS命令来做到这一点。