Альтернативы UNION в Амазонке Афина, так как иногда ресурсы исчерпаны - PullRequest
0 голосов
/ 20 января 2020

У меня есть несколько таблиц Athena, и я хочу найти уникальные значения для определенного общего столбца. Данные хранятся в S3 в виде сжатого паркета.

Предположим, у нас есть 2 таблицы, Table_A и Table_B со следующей схемой и значениями.

Table_a with columns A and B

A  B 
1  2 
2  4
3  5
1  3
Table_b with columns A and C

A  C
1  4
3  5
4  4

Это было легко придумать с запросом

SELECT DISTINCT(A) FROM Table_a
UNION
SELECT DISTINCT(A) FROM Table_b

Это дает результат как

A
1
2
3
4

Общее количество отсканированных данных достаточно велико (~ 500 ГБ), что иногда приводит к сбою этого запроса с ошибкой: Запрос исчерпан ресурсы с таким масштабным коэффициентом.

Мне известно, что Athena использует механизм запросов Presto. UNION требует загрузки данных на одного работника Presto. Это может быть причиной исчерпания ресурсов.

Если я беру UNION_ALL и затем DISTINCT, я сталкиваюсь с той же проблемой из-за запроса DISTINCT.

Поскольку Афина не работает на сервере, я не думаю, что могу контролировать увеличение количества рабочих для запроса.

Повторить - это верное решение этой проблемы. Но я думал, есть ли другой способ обойти это. Или лучше использовать что-то еще, например, Apache Spark, где я могу контролировать мощность рабочих узлов.

PS: я очень плохо знаком с Афиной.

...