У меня есть две таблицы.
Таблица 1:
метка времени
Таблица 2:
timestamp_lower_bound, timestamp_upper_bound
Я хочу чтобы выбрать строки из таблицы 1, если временная метка находится между нижней границей и верхней границей в таблице 2 в улье.
Я попробовал следующий код.
SELECT *
FROM Table1
where from_unixtime(unix_timestamp(timestamp, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm')
BETWEEN (select from_unixtime(unix_timestamp(timestamp_lower_bound, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm') from Table2)
AND (select from_unixtime(unix_timestamp(timestamp_upper_bound, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm') from Table2)
И это выдает ошибку ниже.
DAG did not succeed due to VERTEX_FAILURE. failedVertices:1 killedVertices:1
Я также следовал инструкциям здесь для stackoverflow и вот код. Это также не удалось из-за сбоя вершины.
SELECT a.*
FROM Table1 AS a
WHERE EXISTS
(SELECT 1
FROM Table2 AS b
WHERE a.timestamp BETWEEN from_unixtime(unix_timestamp(b.timestamp_lb, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm')
AND from_unixtime(unix_timestamp(b.timestamp_ub, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm') )
Есть идеи, как это сделать? Не обязательно делать это в Hive, Spark тоже работает. Есть идеи?
EIDT
Вот игрушечный пример.
Предположим, что в таблице 1 есть временная метка, у меня есть следующее.
|---------------------|
| Timestamp |
|---------------------|
| 2018-01-15 17:56 |
|---------------------|
| 2019-04-29 08:43 |
|---------------------|
| 2018-10-23 23:43 |
|---------------------|
| 2018-08-21 04:54 |
|---------------------|
| 2019-12-06 14:09 |
|---------------------|
В Таблице 2 у меня есть следующие верхние и нижние границы.
|----------------------|------------------------|
|timestamp_lower_bound |timestamp_upper_bound |
|----------------------|------------------------|
| 2018-04-15 12:37 | 2018-04-15 12:57 |
|----------------------|------------------------|
| 2018-10-23 23:38 | 2018-10-23 23:58 |
|----------------------|------------------------|
| 2018-08-21 04:50 | 2018-08-21 05:10 |
|----------------------|------------------------|
В этом случае следует выбирать только третью и четвертую запись в Таблице 1. Как мне этого добиться?