У меня есть несколько таблиц 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: я очень плохо знаком с Афиной.