2017-02-16 23 views
1

Вопрос аналогичен this, за исключением того, что я хочу знать, могу ли я сделать это в одном запросе. Это то, что я работаю, но поскольку все мы знаем, что входы стоят дорого. Лучше hql сделать это?Оптимизировать запрос куста, чтобы избежать JOIN

select a.tbl1,b.tbl2 
from 
(
    select count(*) as tbl1 from tbl1 
) a 
join 
(
    select count(*) as tbl2 from tbl2 
) b ON 1=1 
+0

Не то, чтобы у него было 0 стоимости, но насколько вы считаете, насколько дорого вы считаете крест между двумя записями? –

+0

@DuduMarkovitz Я думаю, что есть некоторая путаница между расходом и накладными расходами, я это сделал в своем ответе. –

ответ

2

Если это не критично для вас, чтобы сохранить их как отдельные столбцы, которые можно использовать UNION ALL операции для работы с форматом строки:

select 'tbl1', count(*) from tbl1 
UNION ALL 
select 'tbl2', count(*) from tbl2; 

Это позволит вам избежать дополнительного оператора MAPJOIN в ваш прежний запрос. Технически вы можете иметь один меньше картпер в своем конечном плане выполнения.

Update

В уточненном распределении Hadoop вы не получите много различий с точки зрения производительности происходит либо UNION или MAP РЕГИСТРИРУЙТЕСЬ подход, поскольку эти операции будут оптимизированы в прежних рабочих местах. Но имейте в виду, что в старых версиях кластера или на основе некоторых свойств конфигурации MAPJOIN может быть преобразован в отдельное задание.

+0

Позже вы можете перенести столбец, чтобы попасть в одну строку, если это необходимо. –

+0

@AshishSingh Он может использовать транспонирование, но я не уверен, если это необходимо. Hive может перевести эту операцию в другое задание, которое будет накладными расходами для этой конкретной цели. – Alex

+0

Действительно ли вы проверили свое предположение? Кажется, что 'UNION ALL' включает в себя задание« MAP », что означает, что вы не избегаете дополнительной работы. –

2

Да, играя дорогие

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

В соответствии с этим описанием ваше соединение не дорого, так как вы присоединяетесь только к 2 комплектам по 1 записи.

Но, вы должны смотреть на накладные

Возможно, вы заметили, что отдельные счетчики принимают значительно короче, чем команды, которые вы используете для подсчета и объединения результатов. Это связано с тем, что операции с картами и сокращением имеют значительные накладные расходы (может составлять 30 секунд на этап).

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