确认您的查询是否涉及多个分区。如果是这样,请尝试将查询限制为特定分区,而不是跨多个分区查询。
SELECT *
FROM mytable
WHERE date_partition = '2021-03-01'
如果您使用的是Parquet格式,请在表定义中启用谓词下推功能。这样可以将谓词下推到存储层,使查询速度更快。添加以下参数:
'storage': 'parquet',
'parquet_predicate_pushdown': 'true'
如下所示:
CREATE EXTERNAL TABLE mytable (
col1 string,
col2 int,
col3 double
)
PARTITIONED BY (date_partition string)
ROW FORMAT SERDE 'xxx'
WITH SERDEPROPERTIES ( ... )
LOCATION 's3://mybucket/mytable/'
TBLPROPERTIES ('storage': 'parquet', 'parquet_predicate_pushdown': 'true')
如果您使用的是CSV格式,请在表定义中启用列投影功能。加入以下参数:
'storage': 'csv',
'skip.header.line.count': '1',
'columns': 'col1, col2, col5'
如下所示:
CREATE EXTERNAL TABLE mytable (
col1 string,
col2 int,
col3 double
)
PARTITIONED BY (date_partition string)
ROW FORMAT SERDE 'xxx'
WITH SERDEPROPERTIES ( ... )
LOCATION 's3://mybucket/mytable/'
TBLPROPERTIES ('storage': 'csv', 'skip.header.line.count': '1', 'columns': 'col1, col2, col5')
这样将限制查询只涉及指定列的数据,可以提高查询性能。
增加查询结果的缓存。如果您多次执行的查询结果不易变动,将结果缓存可以显著提高查询性能。示例如下:
CREATE VIEW myview AS
SELECT *
FROM mytable
WHERE date_partition = '2021-03-01'
WITH CACHED RESULTS
在Athena控制台上增加执行引擎,例如Presto或Spark。这些引擎通常比Athena原生引擎提供更好的性能。
使用以上方式可以缓解Athena目录查询非常缓慢的问题。
下一篇:Athena目录查询非常慢