Hive cung cấp ngôn ngữ truy vấn kiểu SQL cho mục đích ETL trên hệ thống tệp Hadoop.
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 được liên kết với Hive để thực hiện các thao tác và truy vấn dữ liệu kiểu 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
Trong bài viết này, bạn sẽ học-
- Đặt hàng theo truy vấn
- Nhóm theo truy vấn
- Sắp xếp theo
- Cluster By
- Phân phối bởi
Tạo bảng trong Hive
Trước khi bắt đầu với chủ đề chính của chúng ta cho hướng dẫn này, trước tiên chúng ta sẽ tạo một bảng để sử dụng nó 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 "worker_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 "nhân viên_guru" với 6 giá trị cột như Id, Tên, Tuổi, Đị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."
- Ở đây, trong bước này, chúng tôi đang tải dữ liệu vào bảng worker_guru. Dữ liệu mà chúng tôi sắp tải sẽ được đặt trong tệp NLĐ.txt
Đặt hàng theo truy vấn:
Cú pháp ORDER BY trong HiveQL tương tự như cú pháp ORDER BY trong ngôn ngữ SQL.Order by là mệnh đề chúng tôi sử dụng với câu lệnh "SELECT" trong các truy vấn Hive, 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, chúng tôi đ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á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ừ vựng. Ở cuối phía sau, nó phải được chuyển cho 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
- Đây là truy vấn thực hiện trên bảng "nhân viên_guru" với mệnh đề ORDER BY với Phòng như tên cột ORDER BY đã xác định.
"Cục" là Chuỗi nên nó sẽ hiển thị kết quả dựa trên thứ tự từ vựng.
- Đây là đầu ra thực tế cho truy vấn. Nếu chúng ta quan sát nó đúng cách, chúng ta có thể thấy rằng nó nhận được kết quả 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 Truy vấn.
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, chúng tôi đ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 dưới đây, 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ó "Bộ phận" là Nhóm theo giá trị.
Từ ảnh chụp màn hình trên, chúng ta sẽ quan sát những điều sau
- Đây là truy vấn được thực hiện trên bảng "worker_guru" với mệnh đề GROUP BY với Tên cột GROUP BY được xác định.
- Kết quả hiển thị ở đây là tên bộ phận và số lượng nhân viên ở các bộ phận khác nhau. Ở đây tất cả các nhân viên thuộc bộ phận cụ thể được nhóm lại và hiển thị trong kết quả. Vì vậy, kết quả là tên bộ phận với tổng số nhân viên có mặt trong mỗi bộ phận.
Truy vấn:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sắp xếp theo:
Sắp xếp theo mệnh đề 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ự theo thứ tự giảm dần và đề cập đến ASC cho thứ tự tăng dần của sắp xếp.
Theo cách sắp xếp này, nó sẽ sắp xếp các hàng trước khi cấp cho bộ giảm tốc. Luôn luôn sắp xếp theo tùy thuộc vào loại cột.
Ví dụ, nếu các loại cột là số, nó sẽ sắp xếp theo thứ tự số nếu các loại cột là chuỗi, nó sẽ sắp xếp theo thứ tự từ vựng.
Từ ảnh chụp màn hình trên, chúng ta có thể quan sát những điều sau:
- Đây là truy vấn thực hiện trên bảng "worker_guru" với mệnh đề SORT BY với "id" là xác định tên cột SORT BY. 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 là "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.
Mệnh đề Cluster BY được sử dụng trên các bảng có trong Hive. Hive sử dụng các cột trong Cluster by để phân phối các hàng giữa các bộ giảm bớt. Các cột Cluster BY sẽ chuyển đến nhiều bộ giảm.
- Nó đảm bảo sắp xếp thứ tự các giá trị có trong nhiều bộ giảm
Ví dụ, mệnh đề Cluster By được đề cập trên tên cột Id của bảng staff_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 ở cuối phía sau. Nhưng như giao diện người dùng, nó 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à quá trình kết thúc trở lại khi chúng tôi thực hiện một truy vấn với sắp xếp theo, nhóm theo và cụm theo khuôn khổ Bản đồ giảm. Vì vậy, nếu chúng ta muốn lưu trữ kết quả thành nhiều bộ giảm, chúng ta sử dụng Cluster By.
Từ ảnh chụp màn hình trên, chúng tôi nhận được các 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ẽ nhận được một loại giá trị Id.
- Nó hiển thị Id và Tên có trong loại guru_employees được sắp xếp theo
Truy vấn:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Phân phối bởi:
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 bớt. Tất cả các cột Phân phối BY sẽ chuyển đến cùng một bộ giảm.
- Nó đảm bảo mỗi bộ giảm thiểu N có được các dải cột không chồng chéo
- Nó không sắp xếp đầu ra của từng 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 Mệnh đề thực hiện trên Id của bảng "empoloyees_guru"
- Đầu ra hiển thị Id, Tên. Ở cuối, nó sẽ chuyển đến cùng một bộ giảm tốc
Truy vấn:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;