Truy vấn Hive: Sắp xếp theo, Nhóm theo, Phân phối theo, Cluster Bằng ví dụ
Hive cung cấp ngôn ngữ truy vấn kiểu SQL cho mục đích ETL Hadoop hệ thống tập tin.
Ngôn ngữ truy vấn Hive (HiveQL) cung cấp môi trường kiểu SQL trong Hive để làm việc với các bảng, cơ sở dữ liệu, truy vấn.
Chúng ta có thể có một loại Điều khoản khác nhau được liên kết với Hive để thực hiện các thao tác và truy vấn dữ liệu loại khác nhau. Để kết nối tốt hơn với các nút khác nhau bên ngoài môi trường. HIVE cũng cung cấp kết nối JDBC.
Truy vấn Hive cung cấp các tính năng sau:
- Mô hình hóa dữ liệu như Tạo cơ sở dữ liệu, bảng, v.v.
- Các chức năng ETL như Trích xuất, Chuyển đổi và Tải dữ liệu vào bảng
- Tham gia để hợp nhất các bảng dữ liệu khác nhau
- Tập lệnh tùy chỉnh dành riêng cho người dùng để dễ viết mã
- Công cụ truy vấn nhanh hơn trên Hadoop
Tạo bảng trong Hive
Trước khi bắt đầu với chủ đề chính của hướng dẫn này, trước tiên chúng ta sẽ tạo một bảng để sử dụng làm tài liệu tham khảo cho hướng dẫn sau.
Ở đây trong hướng dẫn này, chúng ta sẽ tạo bảng “employees_guru” với 6 cột.
Từ ảnh chụp màn hình ở trên,
- Chúng tôi đang tạo bảng “employees_guru” với 6 giá trị cột như Id, Name, Age, Địa chỉ, Mức lương, Phòng ban, thuộc về các nhân viên có mặt trong tổ chức “guru”.
- Ở bước này, chúng ta đang tải dữ liệu vào bảng nhân viên_guru. Dữ liệu chúng ta sắp tải sẽ được đặt trong tệp Nhân viên.txt
Thứ tự theo truy vấn
Cú pháp ORDER BY trong HiveQL tương tự như cú pháp ORDER BY trong SQL ngôn ngữ.
Order by là mệnh đề chúng ta sử dụng với câu lệnh “SELECT” trong Truy vấn tổ ong, giúp sắp xếp dữ liệu. Mệnh đề Order by sử dụng các cột trên bảng Hive để sắp xếp các giá trị cột cụ thể được đề cập với Order by. Đối với bất kỳ tên cột nào mà chúng ta đang xác định thứ tự theo mệnh đề, truy vấn sẽ chọn và hiển thị kết quả theo thứ tự tăng dần hoặc giảm dần của các giá trị cột cụ thể.
Nếu thứ tự theo trường được đề cập là một chuỗi thì nó sẽ hiển thị kết quả theo thứ tự từ điển. Ở phía sau, nó phải được chuyển đến một bộ giảm tốc duy nhất.
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- Đó là truy vấn thực hiện trên bảng “employees_guru” với mệnh đề ORDER BY với Bộ phận như được xác định tên cột ORDER BY. Bộ phận Bộ phận là Chuỗi nên nó sẽ hiển thị kết quả dựa trên thứ tự từ điển.
- Đây là đầu ra thực tế cho truy vấn. Nếu quan sát đúng, chúng ta có thể thấy rằng nó nhận được kết quả được hiển thị dựa trên cột Bộ phận như QUẢN TRỊ, Tài chính, v.v. để thực hiện orderQuery.
Truy vấn :
SELECT * FROM employees_guru ORDER BY Department;
Nhóm theo truy vấn
Nhóm theo mệnh đề sử dụng các cột trên bảng Hive để nhóm các giá trị cột cụ thể được đề cập với nhóm theo. Đối với bất kỳ tên cột nào mà chúng ta đang xác định mệnh đề “groupby”, truy vấn sẽ chọn và hiển thị kết quả bằng cách nhóm các giá trị cột cụ thể.
Ví dụ: trong ảnh chụp màn hình bên dưới, nó sẽ hiển thị tổng số nhân viên có mặt trong mỗi bộ phận. Ở đây chúng ta có “Department” là Nhóm theo giá trị.
Từ ảnh chụp màn hình ở trên, chúng ta sẽ quan sát thấy những điều sau
- Đó là truy vấn được thực hiện trên bảng “employees_guru” với mệnh đề GROUP BY với Bộ phận được xác định là tên cột GROUP BY.
- Đầu ra hiển thị ở đây là tên phòng ban và số lượng nhân viên trong các phòng ban khác nhau. Ở đây, tất cả nhân viên thuộc về phòng ban cụ thể được nhóm theo và hiển thị trong kết quả. Vì vậy, kết quả là tên phòng ban với tổng số nhân viên có mặt trong mỗi phòng ban.
truy vấn:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sắp xếp theo
Mệnh đề sắp xếp theo thực hiện trên tên cột của bảng Hive để sắp xếp đầu ra. Chúng ta có thể đề cập đến DESC để sắp xếp thứ tự giảm dần và đề cập đến ASC cho thứ tự sắp xếp tăng dần.
Trong cách sắp xếp này, nó sẽ sắp xếp các hàng trước khi đưa vào bộ giảm tốc. Luôn sắp xếp theo tùy thuộc vào loại cột.
Ví dụ: nếu loại cột là số, nó sẽ sắp xếp theo thứ tự số nếu loại cột là chuỗi, nó sẽ sắp xếp theo thứ tự từ điể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:
- Đó là truy vấn thực hiện trên bảng “employees_guru” với mệnh đề SORT BY với “id” làm tên cột SORT BY xác định. Chúng tôi đã sử dụng từ khóa DESC.
- Vì vậy, đầu ra được hiển thị sẽ theo thứ tự giảm dần của “id”.
truy vấn:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By được sử dụng thay thế cho cả mệnh đề Phân phối BY và Sắp xếp BY trong Hive-QL.
Cluster Mệnh đề BY được sử dụng trên các bảng có trong Hive. Hive sử dụng các cột trong Cluster bằng cách phân phối các hàng giữa các bộ giảm tốc. Cluster Các cột BY sẽ đi đến nhiều bộ giảm tốc.
- Nó đảm bảo sắp xếp thứ tự các giá trị có trong nhiều bộ giảm tốc
Ví dụ, Cluster Bởi mệnh đề được đề cập trên tên cột Id của bảng Workers_guru. Đầu ra khi thực hiện truy vấn này sẽ đưa ra kết quả cho nhiều bộ giảm tốc ở phía sau. Nhưng với tư cách là giao diện người dùng, đây là một mệnh đề thay thế cho cả Sắp xếp theo và Phân phối theo.
Đây thực sự là quy trình back-end khi chúng ta thực hiện truy vấn với sort by, group by và cluster by theo khuôn khổ Map reduce. Vì vậy, nếu chúng ta muốn lưu trữ kết quả vào nhiều reducer, chúng ta sẽ sử dụng Cluster Bởi.
Từ ảnh chụp màn hình ở trên, chúng ta có thể nhận được những quan sát sau:
- Đây là truy vấn thực hiện mệnh đề CLUSTER BY trên giá trị trường Id. Ở đây nó sẽ sắp xếp các giá trị Id.
- Nó hiển thị Id và Tên có trong sắp xếp guru_employees được sắp xếp theo
truy vấn:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Phân phối theo
Mệnh đề phân phối BY được sử dụng trên các bảng có trong Hive. Hive sử dụng các cột trong Phân phối theo để phân phối các hàng giữa các bộ giảm tốc. Tất cả các cột Phân phối BY sẽ chuyển đến cùng một bộ giảm tốc.
- Nó đảm bảo mỗi bộ giảm N có phạm vi cột không chồng chéo
- Nó không sắp xếp đầu ra của mỗi bộ giảm tốc
Từ ảnh chụp màn hình ở trên, chúng ta có thể quan sát những điều sau
- PHÂN PHỐI THEO Điều khoản thực hiện trên Id của bảng “employees_guru”
- Đầu ra hiển thị Id, Name. Ở back end, nó sẽ đi đến cùng một reducer
truy vấn:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;