Оптимизация запросов подзапроса 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

Другие вопросы по тегам