Hive View Query Performance: объединение таблиц с разными схемами - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть сценарий, в котором у меня есть две таблицы Hive, а вторая, по сути, является развитой схемой первой (в этом примере она имеет еще 1 столбец).

Table_A
{
business_date String
Name String
Age Number
} partitioned by business_date

Table_B {
business_date String
Name String
Age Number
Address String
} partitioned by business_date

Чтобы скрыть нижестоящих пользователей от изменений схемы, я создаю представление Hive со следующим синтаксисом:

Create VIEW customer_info AS 
select * from Table_B 
UNION 
select business_date, name, age, null as address from Table_A

Я знаю, что выше возвращаются все данные, но изс точки зрения производительности, если запрос выполняется к представлению с допустимым значением business_date, учитывает ли он ключ раздела?Или я теряю это преимущество при работе с представлениями?

Редактировать: я должен упомянуть, что business_date является уникальным значением для всех разделов.Это означает, что данные, представленные в Таблице A, не должны предоставляться в Таблице B.Представьте, что Table_A является «более старой версией» данных. Учитывая это, является ли это лучшим подходом к обслуживанию данных, если цель состоит в том, чтобы абстрагировать изменения схемы от конечных потребителей?

Правка № 2: Хранение этих данных в одной таблице невозможно из-за множества других проблем.

1 Ответ

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

Вы не используете предикаты разделов в своем запросе, поэтому они не будут сокращать разделы.Используйте команду объяснение , чтобы проверить это, она покажет примененные предикаты раздела.Обрезка перегородок должна хорошо работать с видом.

Если business_date является уникальным значением для всех разделов , то использование UNION здесь не имеет смысла, поскольку все строки уникальны.UNION совпадает с UNION ALL + DISTINCT.Вместо этого используйте UNION ALL, это будет работать намного лучше.

...