Верен ли приведенный выше порядок выполнения? Мы можем посмотреть его через план выполнения объяснения. Контента слишком много, поэтому давайте рассмотрим его поэтапно.
- Сначала посмотрите на зависимости выполнения оператора sql:
Мы видим, что Стадия-5 является корневой, то есть Стадия-5 выполняется первой, Стадия-2 зависит от Стадии-5, а Стадия-0 зависит от Стадии-2.
- Сначала выполните этап 5:
Метка ① на рисунке — это операция сканирования таблицы, обратите внимание на таблицу b, которая сканируется первой, то есть на таблицу после левого соединения, а затем выполните операцию фильтрации (метка ② на рисунке). мы фильтруем таблицу a, но Hive также выполняет ту же операцию фильтрации для таблицы b, что уменьшает объем связанных данных.
- Далее выполните Этап-2:
- Первая — это операция на стороне карты:
Сначала просмотрите таблицу a (отмечена ① на рисунке); затем выполните операцию фильтрации idno > '112233' (отмечена ② на рисунке); затем выполните левое соединение, связанный ключ idno (отмечен ③ на рисунке). рисунок); после выполнения связанной операции будет выполнена операция вывода, и на выходе будут три поля, включая два поля выбора и одно поле группировки (отмечено ④ на рисунке); затем выполняется группировка по операции , а метод группировки — хэш (обозначен ⑤ на рисунке); затем операция сортировки в соответствии с idno для прямой сортировки (обозначен ⑥ на рисунке).
- Затем идет побочная операция Reduce:
Сначала выполните группировку по операции, обратите внимание, что метод группировки в это время — mergepartial (отмечен ① на рисунке); затем выполните операцию выбора, в это время есть только два выходных поля, а количество выходных строк — 30304. строки (отмечены ② на рисунке)); затем выполните операцию фильтрации, отфильтруйте поля с count_user>1, и количество выходных строк составит 10101 строку (отмечено ③ на рисунке); затем ограничьте количество выходных строк (отмечены ④ на рисунке), отмечены ⑤ Указывает, следует ли сжимать файл, false не сжимает.
Объем данных в плане выполнения — это только прогнозируемый объем данных, а не фактическая операция, поэтому данные могут быть неточными!
- И, наконец, этап Stage-0:
Ограничьте количество строк в конечном выводе до 10 строк.
Суммировать
В результате приведенного выше анализа плана выполнения SQL можно резюмировать следующие моменты:
-
Каждый этап является независимым MR. Сложный SQL-оператор hive может генерировать несколько этапов. Конкретные шаги можно увидеть в описании плана выполнения.
-
Для ключа группировки это должно быть поле в таблице, а для ключа наличия это должно быть поле выбора.
-
order by выполняется после выбора, поэтому ключ order by должен быть полем select.
-
выберите лучше всего указать поле,
select *
Это увеличит много ненужного потребления (ЦП, ввод-вывод, память, пропускная способность сети).