【发布时间】:2019-11-11 23:05:19
【问题描述】:
我在 Aws Athena QUERY1 和 QUERY2 中运行了 2 个 SQL 查询。我刚刚选择了 QUERY1 中的所有内容,但在 QUERY2 中我做了一些转换,这些转换在 QUERY2 中详细给出。
预处理后的表由三列组成,即 column1、column2 和 id。 这三列都是字符串类型。 SHOW CREATE TABLE 预处理结果:
CREATE EXTERNAL TABLE `preprocessed`(
`column1` string COMMENT '',
`column2` string COMMENT '',
`id` string COMMENT '')
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUT FORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://mybucket/myobject'
TBLPROPERTIES (
'has_encrypted_data'='false')
QUERY1 中扫描的数据 = 13 MB QUERY1 所用时间 = 12 秒
QUERY2 中扫描的数据 = 27MB QUERY2 所用时间 = 18 秒
QUERY2 中扫描的数据是 QUERY2 中的两倍。我认为这是因为我在 QUERY2 中扫描数据集两次。我希望为 QUERY2 扫描的数据改进到大约 13MB
QUERY1 :
WITH dataset AS
(
SELECT column1, column2, COUNT(DISTINCT id) AS value FROM preprocessed
)
SELECT * FROM dataset
QUERY2 :
WITH dataset AS
(
SELECT column1, column2, COUNT(DISTINCT id) AS value FROM preprocessed
),
dataset_1 AS
(
SELECT DISTINCT column1 FROM dataset
),
dataset_2 AS
(
SELECT DISTINCT column2 FROM dataset
),
dataset_3 AS
(
SELECT column1, column2 FROM dataset_1, dataset_2
)
SELECT * FROM dataset_3
【问题讨论】:
-
这个问题还不是很清楚,在这里发布完整的查询、表结构、示例数据和预期结果会有很大帮助..
-
"在 QUERY2 中扫描的数据是 QUERY2 中的两倍。我认为这是因为我在 QUERY2 中扫描数据集两次。我希望我的扫描数据提高到 QUERY2 的大约 13MB " 我建议也运行
EXPLAIN query并在此处发布结果。 -
请edit提供信息的问题,不要只是评论它..
-
我也给出了完整的查询和表结构。但是我不知道如何在 Athena 中获取查询计划。
-
“表结构也” 我没看到?
SHOW CREATE TABLE preprocessed我们需要知道数据类型和索引,因为这是一个性能问题? “但是我不知道如何获取查询计划”EXPLAIN query应该可以工作。
标签: presto amazon-athena