Определите соответствие идентификатора и замените его с помощью запроса Case Hive. - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица с именем " Сканирование " транзакций клиентов, где индивидуальный_идентификатор появляется один раз для каждой отдельной транзакции и содержит столбец, подобный scan_id . У меня есть еще одна таблица с именем ids , которая содержит случайные индивидуальные_данные, выбранные из Scan Таблица

Я хотел бы присоединиться к ids с scan и получить одну запись идентификаторов и scan_id, если она соответствует определенным значениям.

Предположим, что данные похожи ниже

Таблица сканирования

Ids          scan_id
----        ------
1           100
1           111
1           1000
2           100
2           111
3           124
4           1000
4           111


Ids table

id
1
2
3
4
5

Я хочу вывод ниже, т.е. если scan_id соответствует 100 или 1000

Id        MT
------    ------
1          1
2          1
3          0
4          1

Я выполнил запрос ниже и получил ошибку

select MT, d.individual_id
from  
(
  select 
    CASE 
      when scan_id in (90069421,53971306,90068594,136739913,195308160) then 1 
      ELSE 0
    END as MT
  from scan cs join ids r
 on cs.individual_id = r.individual_id
where 
        base_div_nbr =1 
        and 
        country_code ='US' 
        and
         retail_channel_code=1 
         and visit_date between '2019-01-01' and '2019-12-31'
) as d
group by individual_id;

Буду признателен за любые предложения или помощь в отношении на этот запрос Hive. Если есть эффективный способ выполнить эту работу. Дайте мне знать.

1 Ответ

0 голосов
/ 10 апреля 2020

Используйте group by:

select s.individual_id,
      max(case when s.scan_id in (100, 1000) then 1 else 0 end) as mt
from scan s 
group by s.individual_id;

Таблица ids не требуется для этого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...