Запитвания за кошери: Подредете по, групирайте, разпределете по, клъстер по примери

Съдържание:

Anonim

Hive предоставя език за заявки от тип SQL за целта ETL върху файловата система Hadoop.

Hive Query language (HiveQL) осигурява среда на SQL тип в Hive за работа с таблици, бази данни, заявки.

Можем да имаме различен тип клаузи, свързани с Hive за извършване на различни видове манипулации на данни и заявки. За по-добра свързаност с различни възли извън околната среда. HIVE осигуряват и JDBC свързаност.

Hive заявките предлагат следните функции:

  • Моделиране на данни като Създаване на бази данни, таблици и др.
  • ETL функционалности като извличане, преобразуване и зареждане на данни в таблици
  • Обединява се за обединяване на различни таблици с данни
  • Потребителски персонализирани скриптове за улесняване на кода
  • По-бърз инструмент за заявки на върха на Hadoop

В тази статия ще научите -

  • Подредете по заявка
  • Групиране по заявка
  • Сортирай по
  • Клъстер от
  • Разпределете по

Създаване на таблица в кошер

Преди да започнем с основната ни тема за този урок, първо ще създадем таблица, която да я използва като референции за следващия урок.

Тук в този урок ще създадем таблица "staff_guru" с 6 колони.

От горния екран,

  1. Създаваме таблица "staff_guru" с 6 стойности на колони като Id, Име, Възраст, Адрес, Заплата, Отдел, която принадлежи на служителите, присъстващи в организация "guru".
  2. Тук в тази стъпка ние зареждаме данни в таблицата staff_guru. Данните, които ще заредим, ще бъдат поставени под файла Employees.txt

Подредете по заявка:

Синтаксисът ORDER BY в HiveQL е подобен на синтаксиса на ORDER BY в езика SQL.

Подреждане по е клаузата, която използваме с израза „SELECT“ в заявките за Hive, която помага за сортиране на данните. Подреждане по клауза използват колони в таблиците на кошерите за сортиране на определени стойности на колони, споменати с Подреждане по. За каквото и да е името на колоната, ние дефинираме реда по клауза, заявката ще избере и покаже резултатите чрез възходящ или низходящ ред на конкретните стойности на колоната.

Ако споменатият ред по поле е низ, тогава той ще покаже резултата в лексикографски ред. В задната част той трябва да бъде предаден на един редуктор.

От снимката на екрана по-горе можем да забележим следното

  1. Това е заявката, която се изпълнява в таблицата "staff_guru" с клаузата ORDER BY с отдел, както е дефинирано ORDER BY име на колона.

    „Отдел“ е низ, така че ще показва резултати въз основа на лексикографски ред.

  2. Това е действителен изход за заявката. Ако го наблюдаваме правилно, можем да видим, че той получава резултати, показвани на базата на колона на отдел като АДМИНИСТРАЦИЯ, Финанси и така нататък, за да се изпълни заявката.

Запитване:

SELECT * FROM employees_guru ORDER BY Department;

Групиране по заявка:

Клауза по клауза използва колони в таблиците на кошерите за групиране на определени стойности на колони, споменати с групата по. За каквото и да е името на колоната, ние дефинираме клауза "groupby", заявката ще избира и показва резултатите чрез групиране на конкретните стойности на колони.

Например, на снимката на екрана по-долу ще покаже общия брой служители, присъстващи във всеки отдел. Тук имаме "Отдел" като група по стойност.

От горната екранна снимка ще наблюдаваме следното

  1. Това е заявката, която се изпълнява в таблицата "staff_guru" с клаузата GROUP BY с отдел, както е определено име на колона GROUP BY.
  2. Резултатът, който се показва тук, е името на отдела, а служителите се броят в различни отдели. Тук всички служители принадлежат към конкретния отдел, групирани и показани в резултатите. Така че резултатът е името на отдела с общия брой служители, присъстващи във всеки отдел.

Запитване:

SELECT Department, count(*) FROM employees_guru GROUP BY Department;

Сортирай по:

Клаузата за сортиране по имена на колони на таблиците на кошерите за сортиране на изхода. Можем да споменем DESC за сортиране на реда в низходящ ред и да споменем ASC за възходящ ред на сорта.

При това сортиране по него ще сортира редовете преди подаване към редуктора. Винаги сортиране по зависи от типовете колони.

Например, ако типовете колони са числови, то ще се сортира в числов ред, ако типовете колони са низови, ще се сортира в лексикографски ред.

От горната снимка на екрана можем да наблюдаваме следното:

  1. Това е заявката, която се изпълнява в таблицата "staff_guru" с клаузата SORT BY с "id", както дефинира името на колоната SORT BY. Използвахме ключова дума DESC.
  2. Така изведеният изход ще бъде в низходящ ред на "id".

Запитване:

SELECT * from employees_guru SORT BY Id DESC;

Клъстер от:

Cluster By се използва като алтернатива както за клаузите Distribute BY, така и за Sort BY в Hive-QL.

Клауза BY клауза, използвана в таблици в Hive. Hive използва колоните в клъстера, за да разпредели редовете между редукторите. Колоните от клъстер BY ще отидат до множеството редуктори.

  • Той осигурява подреждане на подреждания на стойности, присъстващи в множество редуктори

Например клауза по клауза, спомената в името на колоната Id на таблицата таблица staff_guru. Изходът при изпълнение на тази заявка ще даде резултати на множество редуктори в задната част. Но като преден край това е алтернативна клауза както за Сортиране по, така и за Разпределяне по.

Това всъщност е процес отзад, когато изпълняваме заявка с сортиране по, групиране и клъстериране по отношение на рамката за намаляване на картата. Така че, ако искаме да съхраняваме резултатите в множество редуктори, отиваме с Cluster By.

От горната снимка на екрана получаваме следните наблюдения:

  1. Именно заявката изпълнява клауза CLUSTER BY върху стойността на полето Id. Тук ще получи сортиране на стойностите на Id.
  2. Той показва Id и имената, присъстващи в сорта guru_employees, подредени по

Запитване:

SELECT Id, Name from employees_guru CLUSTER BY Id;

Разпределете по:

Разпределете BY клауза, използвана в таблици в Hive. Hive използва колоните в Distribute by, за да разпредели редовете между редукторите. Всички колони Distribute BY ще отидат към същия редуктор.

  • Той гарантира, че всеки от N редуктори получава неприпокриващи се диапазони на колоната
  • Не сортира изхода на всеки редуктор

От горната екранна снимка можем да наблюдаваме следното

  1. Клауза DISTRIBUTE BY, изпълняваща идентификационния номер на таблицата "empoloyees_guru"
  2. Изход, показващ Id, Name. В задната част ще премине към същия редуктор

Запитване:

SELECT Id, Name from employees_guru DISTRIBUTE BY Id;