В таблице A
у меня есть даты от 2014-01-01
до 2014-12-31
HIVE для каждой строки из одной таблицы объединить все строки из другой таблицы
action_date
2014-01-01
2014-01-02
2014-01-03
...
2014-12-31
В таблице B
У меня есть информация, как
id name action_date deletion_date
1 nik 2013-01-01 2014-02-03
2 tom 2014-06-02 2014-06-30
3 lola 2013-12-30 2014-01-01
4 pete 2014-12-29 1970-01-01
Я хочу для объединения строк из таблицы B в каждую таблицу строк A
, если activation_date<=action_date AND (action_date<=deletion_date OR deletion_date='1970-01-01')
e .г.
action_date id name action_date deletion_date
2014-01-01 1 nik 2013-01-01 2014-02-03
2014-01-01 3 lola 2013-12-30 2014-01-01
2014-01-02 1 nik 2013-01-01 2014-02-03
2014-01-03 1 nik 2013-01-01 2014-02-03
[...]
2014-02-03 1 nik 2013-01-01 2014-02-03
2014-06-02 2 tom 2014-06-02 2014-06-30
2014-06-03 2 tom 2014-06-02 2014-06-30
[...]
2014-06-03 2 tom 2014-06-02 2014-06-30
2014-12-29 4 pete 2014-12-29 1970-01-01
2014-12-30 4 pete 2014-12-29 1970-01-01
2014-12-31 4 pete 2014-12-29 1970-01-01
Я попытался использовать следующий запрос в Hive и PostgreSQL.
SELECT a.action_date, b.*
FROM b
JOIN a ON action_date>= activation_date
AND (action_date<=deletion_date OR deletion_date='1970-01-01')
В PostgreSQL он работает отлично, но в улье возвращает semanticexception [error 10017]: line 16:3 both left and right aliases encountered in join 'action_date'
Как решить эту проблему в улье?
Вместо использования условий <= and > = внутри предложения ON вы можете использовать WHERE для [фильтрации] [1]. выбрать. *, T3. * От A t3 РЕГИСТРИРУЙТЕСЬ В v3 ВКЛ (v3.id = t3.no) ГДЕ v3.sdate <= t3.actualdate И v3.edate> = t3.actualdate [1]: http://stackoverflow.com/questions/25832513/how-to-join-two-tables-in-hive –
@ Mus7afa, Тогда какое условие должно использоваться в заявлении ON? – Marta
проверьте ваш запрос, «ON action_date> = activ_date», вы ошибаетесь в этой строке. это должно быть «ON action_date = activation_date». SELECT a.action_date, b. * FROM b JOIN a ON (a. Action_date = b. Action_date) WHERE b.action_date <= b.deletion_date ИЛИ b.deletion_date = '1970-01-01'. и вы можете использовать «ON (TRUE)», но это может быть медленным. –