选择单个列似乎不会减少 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 命令来执行此操作。
我正在试验 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 命令来执行此操作。