Улей запрос с использованием таблицы поиска - PullRequest
0 голосов
/ 13 ноября 2018

у меня 2 стола,

  • Таблица клиентов с JSON Serde, которая содержит только один столбец
  • other - это справочная таблица для определения уровня клиента (1,2,3,4)

Таблица клиентов

{ 
  "Name": "John Doe",
  "Info" : {
      "Address": "111 Main Street",
      "ID": 2222
  }
}

Справочная таблица имеет 2 столбца, идентификатор клиента и уровень. Например

ID     Level
1111    1
1123    4
2234    1

Как мне написать запрос Hive, чтобы идентифицировать всех клиентов уровня 1 из моей таблицы клиентов?

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

Извлечение ID из JSON с использованием get_json_object() и соединение с таблицей поиска, добавление фильтрации.

Демо-версия:

 select s.cust_name, s.Address, s.ID, lkp.level
    from
        (select
               get_json_object(json_col,'$.Info.ID') as ID,
               get_json_object(json_col,'$.Name') as cust_name,
               get_json_object(json_col,'$.Info.Address') as Address
   from        
               ( --replace this subquery with your table
                select '{"Name": "John Doe","Info" : {"Address": "111 Main Street","ID": 2222}}' as json_col)s 
        ) s
   left join    
            ( --replace this subquery with your table
            select stack(4,
                         1111,    1,
                         1123,    4,
                         2234,    1,
                         2222,    3
                        )  as (ID, Level) 
            )lkp on s.ID=lkp.ID
where lkp.Level !=1     --filter out level 1 
   or lkp.level is null --this is to allow records without corresponding level in lkp 
;

Результат:

OK
cust_name       address id      level
John Doe        111 Main Street 2222    3
Time taken: 31.469 seconds, Fetched: 1 row(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...