Оптимизация запросов подзапроса Hive
Я использую HDP 2.6.2 и улей.
У меня есть ситуация, когда я обновляю секционированную таблицу из большой таблицы, основанной на столбце, и запрос просто не работает хорошо, и я не могу понять, почему. Оператор вставки ниже является примером
insert into partitioned_table partition(dt_month)
select * from large_table
where incremental_string_col > (select last_incremental_col from temp_tab)
Здесь я предполагаю, что подзапрос в предложении where выполняется один раз, и результат кэшируется, или вся таблица temp_tab, которая в основном состоит из одной строки, отправляется CBO на все узлы, но кажется, что она не работает так же хорошо, как ввод строки значение в качестве буквального!
Можно ли явно указать, что таблица должна кэшироваться в кусте? Можно ли явно указать, что запрос должен быть выполнен только один раз, а результат кэширован? Что мне здесь не хватает?
Я понимаю, что столбец где строка является не лучшим случаем, но я не могу с этим поделать.
Любая помощь приветствуется!!
1 ответ
Вы можете использовать перекрестное соединение с одним подзапросом, а затем фильтровать строки по условию неравенства:
select *
from large_table l
cross join (single_row_subquery) s
where l.incremental_string_col>s.last_incremental_col;
Или вычислите подзапрос в отдельном скрипте и передайте как переменную hivevar, как здесь: /questions/24700553/hiveql-ispolzovanie-rezultatov-zaprosa-v-kachestve-peremennyih/24700564#24700564