создать таблицу кустов из вложенных данных JSON с выровненными полями - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу создать внешнюю таблицу кустов из вложенных данных json, но поля должны быть выровнены из вложенного json.

Например: -

{

    "key1":"value1",
    "key2":{
        "nestedKey1":1,
        "nestedKey2":2
    }

}

Таблица кустов должна иметь формат илиполя сглаживаются как

key1: String, key2.nestedKey1: Int, key2.nestedKey1: Int

Заранее спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

Используйте JsonSerDe и создайте таблицу со следующим синтаксисом:

hive> create table sample(key1 string,key2 struct<nestedKey1:int,nestedKey2:int>) 
      ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';

hive> select key1,key2.nestedkey1,key2.nestedkey2 from sample;
+---------+-------------+-------------+--+
|  key1   | nestedkey1  | nestedkey2  |
+---------+-------------+-------------+--+
| value1  | 1           | 2           |
+---------+-------------+-------------+--+

hive> select * from sample;
+--------------+----------------------------------+--+
| sample.key1  |           sample.key2            |
+--------------+----------------------------------+--+
| value1       | {"nestedkey1":1,"nestedkey2":2}  |
+--------------+----------------------------------+--+

(или)

Если вы хотите создать таблицус выравниванием json fields, затем используйте RegexSerDe и соответствующее регулярное выражение для извлечения вложенного ключа из данных .

Для получения дополнительной информации см. эту ссылкуподробности касаются регулярных выражений.


ОБНОВЛЕНИЕ:

Входные данные:

{"key1":"value1","key2":{"nestedKey1":1,"nestedKey2":2}}

HiveTable:

hive> CREATE  TABLE dd (key1 string, nestedKey1 string, nestedKey2 string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES 
('input.regex'=".*:\"(.*?)\",\"key2\":\\{\"nestedKey1\":(\\d),\"nestedKey2\":(\\d).*$");

Выберите данные из таблицы:

hive>  select * from dd;
+---------+-------------+-------------+--+
|  key1   | nestedkey1  | nestedkey2  |
+---------+-------------+-------------+--+
| value1  | 1           | 2           |
+---------+-------------+-------------+--+
...