Hướng dẫn tham gia Hive & SubQuery với các ví dụ

Tham gia truy vấn

Truy vấn tham gia có thể thực hiện trên hai bảng có trong Hive. Để hiểu hãy tham gia Concepts rõ ràng ở đây chúng tôi đang tạo hai bảng ở đây,

  • Sample_joins( Liên quan đến Chi tiết khách hàng )
  • Sample_joins1(Liên quan đến chi tiết đơn hàng do Nhân viên thực hiện)

Bước 1) Tạo bảng “sample_joins” với cột tên ID, Tên, Tuổi, địa chỉ và mức lương của nhân viên

Tham gia truy vấn

Bước 2) Đang tải và hiển thị dữ liệu

Tham gia truy vấn

Từ ảnh chụp màn hình ở trên

  1. Đang tải dữ liệu vào sample_joins từ Customer.txt
  2. Hiển thị nội dung bảng sample_joins

Bước 3) Tạo bảng sample_joins1 và tải, hiển thị dữ liệu

Tham gia truy vấn

Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau

  1. Tạo bảng sample_joins1 với các cột Orderid, Date1, Id, Số tiền
  2. Đang tải dữ liệu vào sample_joins1 từ order.txt
  3. Hiển thị các bản ghi có trong sample_joins1

Tiến tới chúng ta sẽ xem các loại liên kết khác nhau có thể được thực hiện trên các bảng đã tạo nhưng trước đó bạn phải cân nhắc các điểm sau về liên kết.

Một số điểm cần quan sát trong Joins:

  • Chỉ cho phép tham gia Bình đẳng trong Tham gia
  • Có thể nối nhiều hơn hai bảng trong cùng một truy vấn
  • Các phép nối TRÁI, PHẢI, FULL OUTER tồn tại nhằm cung cấp nhiều quyền kiểm soát hơn đối với Điều khoản ON không có sự trùng khớp
  • Các phép nối không có tính giao hoán
  • Các phép nối có tính liên kết trái bất kể chúng là các phép nối TRÁI hay PHẢI

Các loại kết nối khác nhau

Tham gia có 4 loại, đây là

  • Tham gia bên trong
  • Bên trái Tham gia
  • Tham gia bên ngoài bên phải
  • Tham gia đầy đủ bên ngoài

Tham gia bên trong:

Các bản ghi chung cho cả hai bảng sẽ được truy xuất bằng Nội bộ này.

Tham gia bên trong

Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau

  1. Ở đây chúng ta đang thực hiện truy vấn nối bằng cách sử dụng từ khóa THAM GIA giữa các bảng sample_joins và sample_joins1 với điều kiện khớp là (c.Id= o.Id).
  2. Đầu ra hiển thị các bản ghi chung có trong cả hai bảng bằng cách kiểm tra điều kiện được đề cập trong truy vấn

truy vấn:

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

Tham gia bên ngoài bên trái:

  • Ngôn ngữ truy vấn Hive LEFT OUTER JOIN trả về tất cả các hàng từ bảng bên trái ngay cả khi không có kết quả khớp nào ở bảng bên phải
  • Nếu mệnh đề ON khớp với 0 bản ghi trong bảng bên phải, các phép nối vẫn trả về một bản ghi trong kết quả có NULL trong mỗi cột của bảng bên phải

Tham gia bên ngoài bên trái

Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau

  1. Ở đây chúng ta đang thực hiện truy vấn nối bằng cách sử dụng từ khóa “LEFT OUTER JOIN” giữa các bảng sample_joins và sample_joins1 với điều kiện khớp là (c.Id= o.Id).Ví dụ Ở đây chúng ta đang sử dụng id nhân viên làm tham chiếu, nó kiểm tra xem id có phổ biến ở bên phải cũng như bên trái bảng hay không. Nó hoạt động như điều kiện phù hợp.
  2. Đầu ra hiển thị các bản ghi chung có trong cả hai bảng bằng cách kiểm tra điều kiện được đề cập trong truy vấn. Các giá trị NULL ở đầu ra trên là các cột không có giá trị nào từ bảng Bên phải đó là sample_joins1

truy vấn:

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

Tham gia bên ngoài bên phải:

  • Ngôn ngữ truy vấn Hive RIGHT OUTER JOIN trả về tất cả các hàng từ bảng Bên phải mặc dù không có kết quả khớp nào trong bảng bên trái
  • Nếu mệnh đề ON khớp với 0 bản ghi trong bảng bên trái, các phép nối vẫn trả về một bản ghi trong kết quả có NULL trong mỗi cột từ bảng bên trái
  • Phép nối RIGHT luôn trả về các bản ghi từ bảng Bên phải và các bản ghi khớp từ bảng bên trái. Nếu bảng bên trái không có giá trị tương ứng với cột, nó sẽ trả về giá trị NULL ở vị trí đó.

Tham gia bên ngoài bên phải

Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau

  1. Ở đây chúng tôi đang thực hiện truy vấn nối bằng cách sử dụng từ khóa “RIGHT OUTER JOIN” giữa các bảng sample_joins và sample_joins1 với điều kiện khớp là (c.Id= o.Id).
  2. Đầu ra hiển thị các bản ghi chung có trong cả hai bảng bằng cách kiểm tra điều kiện được đề cập trong truy vấn

Câu Hỏi:

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

Tham gia bên ngoài đầy đủ:

Nó kết hợp các bản ghi của cả hai bảng sample_joins và sample_joins1 dựa trên Điều kiện THAM GIA được đưa ra trong truy vấn.

Nó trả về tất cả các bản ghi từ cả hai bảng và điền vào Giá trị NULL cho các cột bị thiếu giá trị khớp ở hai bên.

Tham gia đầy đủ bên ngoài

Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát thấy những điều sau:

  1. Ở đây chúng ta đang thực hiện truy vấn nối bằng cách sử dụng từ khóa “FULL OUTER JOIN” giữa các bảng sample_joins và sample_joins1 với điều kiện khớp là (c.Id= o.Id).
  2. Đầu ra hiển thị tất cả các bản ghi có trong cả hai bảng bằng cách kiểm tra điều kiện được đề cập trong truy vấn. Giá trị null ở đầu ra ở đây cho biết các giá trị bị thiếu trong các cột của cả hai bảng.

Câu Hỏi

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

Truy vấn phụ

Truy vấn có trong Truy vấn được gọi là truy vấn phụ. Truy vấn chính sẽ phụ thuộc vào giá trị được trả về bởi truy vấn phụ.

Truy vấn con có thể được phân thành hai loại

  • Truy vấn con trong mệnh đề FROM
  • Truy vấn con trong mệnh đề WHERE

Khi nào nên sử dụng:

  • Để có được một giá trị cụ thể được kết hợp từ hai giá trị cột từ các bảng khác nhau
  • Sự phụ thuộc của giá trị một bảng vào các bảng khác
  • Kiểm tra so sánh các giá trị một cột từ các bảng khác

Cú pháp:

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);

Ví dụ:

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

Ở đây t1 và t2 là tên bảng. Màu được tô màu là Truy vấn con được thực hiện trên bảng t1. Ở đây a và b là các cột được thêm vào truy vấn con và được gán cho col1. Col1 là giá trị cột có trong Bảng chính. Cột “col1” hiện diện trong truy vấn con này tương đương với truy vấn bảng chính trong cột col1.

Nhúng tập lệnh tùy chỉnh

Tổ ong cung cấp tính khả thi của việc viết các tập lệnh cụ thể của người dùng cho các yêu cầu của khách hàng. Người dùng có thể viết bản đồ của riêng mình và rút gọn các tập lệnh cho các yêu cầu. Chúng được gọi là tập lệnh tùy chỉnh nhúng. Logic mã hóa được xác định trong các tập lệnh tùy chỉnh và chúng ta có thể sử dụng tập lệnh đó trong thời gian ETL.

Khi nào nên chọn Tập lệnh nhúng:

  • Trong các yêu cầu cụ thể của khách hàng, nhà phát triển phải viết và triển khai các tập lệnh trong Hive
  • Trường hợp các chức năng sẵn có của Hive sẽ không hoạt động đối với các yêu cầu tên miền cụ thể

Đối với điều này trong Hive, nó sử dụng mệnh đề TRANSFORM để nhúng cả tập lệnh bản đồ và tập lệnh rút gọn.

Trong tập lệnh tùy chỉnh nhúng này, chúng ta phải lưu ý những điểm sau

  • Các cột sẽ được chuyển thành chuỗi và được phân cách bằng TAB trước khi đưa vào tập lệnh người dùng
  • Đầu ra tiêu chuẩn của tập lệnh người dùng sẽ được coi là các cột chuỗi được phân tách bằng TAB

Tập lệnh nhúng mẫu,

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;

Từ đoạn script trên, chúng ta có thể quan sát những điều sau

Đây chỉ là kịch bản mẫu để hiểu

  • pv_users là bảng người dùng có các trường như userid và ngày như được đề cập trong map_script
  • Tập lệnh rút gọn được xác định theo ngày và số lượng bảng pv_users