Я выполнил ниже 2 SQL-запросов в Aws Athena QUERY1 и QUERY2.Я только что выбрал все в QUERY1, но в QUERY2 я сделал некоторые преобразования, которые подробно описаны в QUERY2.
Предварительно обработанная таблица состоит из трех столбцов, а именно column1, column2 и id.Все эти три столбца имеют строковый тип.ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ предварительно обработанный результат:
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 МБ Время занято в QUERY1 = 12 с
Данные отсканированы в QUERY2 = 27 МБ Время взято в QUERY2 = 18 сек
Данные, отсканированные в QUERY2, в два раза больше, чем в QUERY2.Я думаю, это потому, что я дважды сканирую набор данных в QUERY2.Я хочу, чтобы мои отсканированные данные были улучшены примерно до 13 МБ для QUERY2
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