我正在尝试对S3中镶木地板中存储的数据进行Athena查询。
我在列daystamp
上添加了一个分区,并且按预期的方式,当我创建一个使用该分区的查询时,它减少了扫描的数据量。
但是,当我限制列在SELECT
语句中返回时,我希望它再次减少扫描数据的数量,但事实并非如此,它只会加快查询速度。
我认为它会减少扫描的数据量吗?
以下示例:(运行时间从11s减少到5s,但是扫描的数据仍然为2.08MB)
添加了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')
答案 0 :(得分:2)
是的,的确如此。您不在表中使用镶木地板格式。右表应使用SerDe像这样:
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
您需要首先转换此数据,还可以转换结构和数组类型。您可以通过在Athena中使用AWS GLUE或CTAS命令来做到这一点。