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
Bước 2) Đang tải và hiển thị dữ liệu
Từ ảnh chụp màn hình ở trên
- Đang tải dữ liệu vào sample_joins từ Customer.txt
- 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
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- Tạo bảng sample_joins1 với các cột Orderid, Date1, Id, Số tiền
- Đang tải dữ liệu vào sample_joins1 từ order.txt
- 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.
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- Ở đâ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).
- Đầ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
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- Ở đâ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.
- Đầ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í đó.
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- Ở đâ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).
- Đầ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.
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:
- Ở đâ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).
- Đầ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