Объединение двух таблиц по метке времени в Spark SQL - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь объединить две таблицы с помощью следующего запроса:

results = sqlContext.sql('SELECT * \
                          FROM airlines a \
                          INNER JOIN LATERAL ( \
                            SELECT * \
                            FROM weather w \
                            WHERE w.CALL_SIGN = a.ORIGIN  \
                              AND w.WEATHER_TIMESTAMP BETWEEN a.CRS_DEP_TIME - INTERVAL 15 MINUTES AND a.CRS_DEP_TIME + INTERVAL 15 MINUTES \
                            ORDER BY w.WEATHER_TIMESTAMP DESC \
                            LIMIT 1 ) \
                           ON a.ORIGIN = w.CALL_SIGN').cache()

Я столкнулся с проблемой, при которой я не могу ссылаться на таблицу airlines во внутреннем соединении. Я попытался добавить ключевое слово LATERAL, надеясь, что Spark SQL поддерживает его, как Postgres, но безрезультатно. Не знаю, как исправить этот запрос, посоветуете?

1 Ответ

0 голосов
/ 09 июля 2020

Попробуйте это

'SELECT * \
                          FROM airlines a \
                          INNER JOIN ( \
                            SELECT * \
                            FROM weather w \
                            INNER JOIN airlines a
                            WHERE w.CALL_SIGN = a.ORIGIN  \
                              AND w.WEATHER_TIMESTAMP BETWEEN a.CRS_DEP_TIME - INTERVAL 15 MINUTES AND a.CRS_DEP_TIME + INTERVAL 15 MINUTES \
                            ORDER BY w.WEATHER_TIMESTAMP DESC \
                            LIMIT 1 ) x \
                           ON a.ORIGIN = x.CALL_SIGN'
...