Im пытается выбрать различные значения из каждого столбца внутри данной таблицы. В моем запросе не хватает производительности из-за создания многих MapReduce Jobs, и они ищут лучшее решение.Выберите различные значения из каждого столбца в Hive
Моя таблица содержит следующие значения:
last_30: a
last_90: a, b, a
last_180: b, c
Нужный результат будет следующим:
last_30#a
last_90#a
last_90#b
last_180#b
last_180#c
с помощью следующего запроса я получить желаемый результат, не очень производительный, хотя из-за он несколько раз проходит через стол:
SELECT distinct concat('last_30', exploded_last_30.key)
FROM table
LATERAL VIEW explode(last_30) exploded_last_30 AS key
UNION ALL
SELECT distinct concat('last_90', exploded_last_90.key)
FROM table
LATERAL VIEW explode(last_90) exploded_last_90 AS key
UNION ALL
SELECT distinct concat('last_180', exploded_last_180.key)
FROM table
LATERAL VIEW explode(last_180) exploded_last_180 AS key
Можете ли вы подумать о fa чтобы создать желаемый результат?
Greets
::: Обновление :::
Используя свое решение я придумал следующий запрос:
select distinct *
from (
select explode(map_keys(map(
concat('firstname#',a.exploded_firstname), '1',
concat('lastname#', a.exploded_lastname), '1',
concat('gender#', a.exploded_gender), '1',
concat('last_30#', a.exploded_last_30), '1',
concat('last_90#', a.exploded_last_90), '1'
)
)
)
from (
select
exploded_firstname.key as exploded_firstname,
exploded_lastname.key as exploded_lastname,
exploded_gender.key as exploded_gender,
exploded_last_30.key as exploded_last_30,
exploded_last_90.key as exploded_last_90
from table
LATERAL VIEW explode(firstname) exploded_firstname AS key, value
LATERAL VIEW explode(lastname) exploded_lastname AS key, value
LATERAL VIEW explode(gender) exploded_gender AS key, value
LATERAL VIEW explode(last_30) exploded_last_30 AS key
LATERAL VIEW explode(last_90) exploded_last_90 AS key
) as a
) as b;
еще сталкивается с двумя проблемами, хотя:
- Я не описал проблему в полном объеме, данные образца I предоставили только примитивные типы данных. В реальной таблице присутствуют Карты и Массивы. Нажатие массива или карты только , содержащий «NULL» Значение не будет возвращать не выход на все
Во-вторых, добавление дополнительных полей на этот запрос, компилятор от создания MapReduce Джобсу выполнить запрос. Вот MapReduce раз в течение 14 и 15 полей соответственно:
Total MapReduce CPU Time Spent: 26 seconds 60 msec OK Time taken: 142.896 seconds Total MapReduce CPU Time Spent: 29 seconds 310 msec OK Time taken: 257.807 seconds
Как вы можете видеть Total MapReduce время приблизительно линейным, а общее время увеличивается значительно. Вы, ребята, посоветовали по этим двум вопросам?