Hive Join & SubQuery Урок с примери

Присъединете се към заявки

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

  • Sample_joins (свързани с подробности за клиентите)
  • Sample_joins1 (свързани с подробности за поръчките, извършени от служители)

Стъпка 1) Създаване на таблица “sample_joins” с имена на колони ID, име, възраст, адрес и заплата на служителите

Присъединете се към запитвания

Стъпка 2) Зареждане и показване на данни

Присъединете се към запитвания

От горната екранна снимка

  1. Зареждане на данни в sample_joins от Customers.txt
  2. Показване на съдържанието на таблицата sample_joins

Стъпка 3) Създаване на таблица sample_joins1 и зареждане, показване на данни

Присъединете се към запитвания

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

  1. Създаване на таблица sample_joins1 с колони Orderid, Date1, Id, Amount
  2. Зареждане на данни в sample_joins1 от orders.txt
  3. Показване на записи, налични в sample_joins1

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

Някои моменти, които трябва да се наблюдават при Joins:

  • В съединенията са разрешени само съединявания с равенство
  • Повече от две таблици могат да бъдат обединени в една и съща заявка
  • Съединенията LEFT, RIGHT, FULL OUTER съществуват, за да осигурят повече контрол върху клаузата ON, за която няма съвпадение
  • Съединенията не са комутативни
  • Съединенията са ляво-асоциативни, независимо дали са ЛЯВИ или ДЕСНИ съединения

Различни видове присъединявания

Съединенията са от 4 вида, това са

  • Вътрешно присъединяване
  • Ляво външно присъединяване
  • Дясно външно присъединяване
  • Пълно външно присъединяване

Вътрешно присъединяване:

Записите, общи за двете таблици, ще бъдат извлечени от това вътрешно свързване.

Вътрешно присъединяване

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

  1. Тук изпълняваме заявка за присъединяване, използвайки ключова дума JOIN между таблиците sample_joins и sample_joins1 със съответстващо условие като (c.Id= o.Id).
  2. Изходът, показващ общи записи, присъстващи и в двете таблици, чрез проверка на условието, споменато в заявката

Запитване:

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

Ляво външно присъединяване:

  • Език за заявки Hive LEFT OUTER JOIN връща всички редове от лявата таблица, въпреки че няма съвпадения в дясната таблица
  • Ако клаузата ON съвпада с нула записи в дясната таблица, съединенията все още връщат запис в резултата с NULL във всяка колона от дясната таблица

Ляво външно съединение

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

  1. Тук изпълняваме заявка за присъединяване, използвайки ключова дума „LEFT OUTER JOIN“ между таблиците sample_joins и sample_joins1 със съответстващо условие като (c.Id= o.Id).Например тук използваме идентификатор на служител като справка, той проверява дали идентификаторът е често срещан както вдясно, така и вляво от таблицата или не. Той действа като условие за съвпадение.
  2. Изходът, показващ общи записи, присъстващи и в двете таблици, чрез проверка на условието, споменато в заявката. NULL стойностите в горния изход са колони без стойности от дясната таблица, която е sample_joins1

Запитване:

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Дясно външно присъединяване:

  • Език за заявки на Hive RIGHT OUTER JOIN връща всички редове от дясната таблица, въпреки че няма съвпадения в лявата таблица
  • Ако клаузата ON съвпада с нула записи в лявата таблица, съединенията все още връщат запис в резултата с NULL във всяка колона от лявата таблица
  • RIGHT обединенията винаги връщат записи от дясна таблица и съответстващи записи от лявата таблица. Ако лявата таблица няма стойности, съответстващи на колоната, тя ще върне NULL стойности на това място.

Дясно външно присъединяване

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

  1. Тук изпълняваме заявка за присъединяване, използвайки ключова дума „RIGHT OUTER JOIN“ между таблиците sample_joins и sample_joins1 със съответстващо условие като (c.Id= o.Id).
  2. Изходът, показващ общи записи, присъстващи и в двете таблици, чрез проверка на условието, споменато в заявката

Запитване:

  SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Пълно външно присъединяване:

Той комбинира записи на двете таблици sample_joins и sample_joins1 въз основа на условието JOIN, дадено в заявката.

Той връща всички записи от двете таблици и попълва NULL стойности за колоните, в които липсват съвпадащи стойности от двете страни.

Пълно външно присъединяване

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

  1. Тук изпълняваме заявка за присъединяване, използвайки ключова дума „FULL OUTER JOIN“ между таблиците sample_joins и sample_joins1 със съвпадащо условие като (c.Id= o.Id).
  2. Изходът, показващ всички записи, присъстващи в двете таблици, чрез проверка на условието, споменато в заявката. Нулевите стойности в изхода тук показват липсващите стойности от колоните на двете таблици.

Запитване

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Подзапитвания

Заявка, присъстваща в Заявка, е известна като подзаявка. Основната заявка ще зависи от стойностите, върнати от подзаявките.

Подзаявките могат да бъдат класифицирани в два типа

  • Подзаявки в клаузата FROM
  • Подзаявки в клаузата WHERE

Кога да използвате:

  • За да получите конкретна стойност, комбинирана от две стойности на колони от различни таблици
  • Зависимост на стойностите на една таблица от други таблици
  • Сравнителна проверка на стойностите на една колона от други таблици

Синтаксис:

Subquery in FROM clause
SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main >
Subquery in WHERE clause
SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);

Пример:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

Тук t1 и t2 са имена на таблици. Оцветената е подзаявка, извършена върху таблица t1. Тук a и b са колони, които се добавят в подзаявка и се присвояват на col1. Col1 е стойността на колоната, присъстваща в основната таблица. Тази колона „col1“, присъстваща в подзаявката, е еквивалентна на заявката за основната таблица в колона col1.

Вграждане на персонализирани скриптове

Кошер осигурява възможност за писане на специфични за потребителя скриптове за изискванията на клиента. Потребителите могат да напишат своя собствена карта и да намалят скриптове за изискванията. Те се наричат ​​вградени персонализирани скриптове. Логиката на кодиране е дефинирана в персонализираните скриптове и можем да използваме този скрипт във времето на ETL.

Кога да изберете вградени скриптове:

  • Според специфичните изисквания на клиента разработчиците трябва да напишат и разположат скриптове в Hive
  • Когато вградените функции на Hive няма да работят за специфични изисквания на домейна

За това в Hive той използва клауза TRANSFORM за вграждане на скриптове за карта и редуктор.

В тези вградени персонализирани скриптове трябва да спазваме следните точки

  • Колоните ще бъдат преобразувани в низ и разделени от TAB, преди да бъдат дадени на потребителския скрипт
  • Стандартният изход на потребителския скрипт ще се третира като колони с низове, разделени с TAB

Примерен вграден скрипт,

FROM (
	FROM pv_users
	MAP pv_users.userid, pv_users.date
	USING 'map_script'
	AS dt, uid
	CLUSTER BY dt) map_output

INSERT OVERWRITE TABLE pv_users_reduced
	REDUCE map_output.dt, map_output.uid
	USING 'reduce_script'
	AS date, count;

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

Това е само примерен скрипт за разбиране

  • pv_users е таблицата на потребителите, която има полета като потребителски идентификатор и дата, както е споменато в map_script
  • Редуциращ скрипт, дефиниран на дата и брой на таблиците pv_users

Обобщете тази публикация с: