#sql #apache-spark-sql
#sql #apache-spark-sql
Вопрос:
У меня есть таблица под названием COMPUTED_DATA. Он содержит 3 столбца: данные, кластер и last_execution.
Существует задание, которое выполняется каждые 2 недели, которое вставляет несколько данных для кластера и его времени last_execution.
Мое требование состоит в том, чтобы получить данные для кластера за его последнее время last_execution. В настоящее время я написал такой запрос в своем коде
last_execution = SELECT distinct(last_execution) FROM COMPUTED_DATA WHERE cluster=1204 AND ORDER BY last_execution DESC limit 1
Приведенный выше запрос возвращает мне самое последнее last_execution
data = SELECT data FROM COMPUTED_DATA WHERE cluster=1204 AND last_execution={last_execution}
Этот запрос использует это last_execution для получения данных.
Мой вопрос в том, можно ли это объединить всего в 1 запрос. Я запускаю это в своем кластере spark, поэтому каждый SQL-запрос требует очень много времени. Поэтому я хочу объединить это в один запрос. Пожалуйста, помогите.
ИЗМЕНИТЬ: второй запрос, из которого я получаю данные, возвращает несколько строк. Следовательно, я не могу использовать ограничение на второй запрос, потому что это количество неизвестно.
Ответ №1:
Да, это может
SELECT data FROM COMPUTED_DATA WHERE cluster = 1204 and last_execution=(SELECT distinct(last_execution) FROM COMPUTED_DATA WHERE cluster=1204 AND ORDER BY last_execution DESC limit 1)
Это не самый красивый способ написать это, но вы понимаете, как использовать подзапрос в предложении where.