【发布时间】:2019-03-19 19:59:39
【问题描述】:
我正在尝试使用 Athena 查询存储在 s3 中镶木地板中的数据。
我在daystamp 列上添加了一个分区,正如预期的那样,当我创建一个使用它的查询时,它减少了扫描的数据量。
但是,当我在SELECT 语句中限制要返回的列时,我希望它会再次减少扫描的数据量,但事实并非如此,它只会加快查询速度。
我认为它会减少扫描的数据量是错误的吗?
以下示例:(运行时间从 11s 减少到 5s,但扫描的数据仍为 2.08MB)
选择 *
选择“列”
选择“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')
【问题讨论】:
-
在我看来,你应该用更多的数据来执行这个测试,然后你应该会看到差异。
-
这个想法闪过我的脑海,但单元格列是 10 列之一,所以虽然它可能有一些开销,但我不明白为什么我不会得到 some减少。否则,我想知道 UI 中的数据扫描字段是否只显示分区的减少而不是选择
-
我做了一些测试,效果很好。你能发送你的表的定义吗?显示创建表日志数据;
-
谢谢@j.b.gorski。我已经用回复更新了问题
-
由此看来,查询实际上是在 json 文件上,而不是 parquet 上。我想我的消防软管/胶水设置一定有问题。你同意吗?
标签: parquet amazon-athena