Impala - Điều khoản bù đắp

Nói chung, các hàng trong tập kết quả của một select truy vấn bắt đầu từ 0. Sử dụng offset, chúng ta có thể quyết định xem kết quả đầu ra từ đâu. Ví dụ, nếu chúng ta chọn độ lệch là 0, kết quả sẽ như bình thường và nếu chúng ta chọn độ lệch là 5, kết quả bắt đầu từ hàng thứ năm.

Cú pháp

Sau đây là cú pháp của offsetmệnh đề trong Impala.

select data from table_name Group BY col_name;

Thí dụ

Giả sử chúng ta có một bảng tên customers trong cơ sở dữ liệu my_db và nội dung của nó như sau:

[quickstart.cloudera:21000] > select * from customers; 
Query: select * from customers 
+----+----------+-----+-----------+--------+ 
| id | name     | age | address   | salary | 
+----+----------+-----+-----------+--------+ 
| 3  | kaushik  | 23  | Kota      | 30000  | 
| 6  | Komal    | 22  | MP        | 32000  | 
| 1  | Ramesh   | 32  | Ahmedabad | 20000  | 
| 5  | Hardik   | 27  | Bhopal    | 40000  | 
| 2  | Khilan   | 25  | Delhi     | 15000  | 
| 8  | ram      | 22  | vizag     | 31000  | 
| 9  | robert   | 23  | banglore  | 28000  |
| 7  | ram      | 25  | chennai   | 23000  | 
| 4  | Chaitali | 25  | Mumbai    | 35000  | 
+----+----------+-----+-----------+--------+ 
Fetched 9 row(s) in 0.51s

Bạn có thể sắp xếp các bản ghi trong bảng theo thứ tự tăng dần của id của chúng và giới hạn số lượng bản ghi là 4, bằng cách sử dụng limitorder by mệnh đề như hình dưới đây.

Query: select * from customers order by id limit 4 
+----+----------+-----+-----------+--------+ 
| id | name     | age | address   | salary | 
+----+----------+-----+-----------+--------+ 
| 1  | Ramesh   | 32  | Ahmedabad | 20000  | 
| 2  | Khilan   | 25  | Delhi     | 15000  | 
| 3  | kaushik  | 23  | Kota      | 30000  | 
| 4  | Chaitali | 25  | Mumbai    | 35000  | 
+----+----------+-----+-----------+--------+ 
Fetched 4 row(s) in 0.64s

Sau đây là một ví dụ về offsetmệnh đề. Ở đây, chúng tôi đang nhận được các bản ghi trongcustomersbảng theo thứ tự id của chúng và in bốn hàng đầu tiên bắt đầu từ hàng thứ 0 .

[quickstart.cloudera:21000] > select * from customers order by id limit 4 offset 0;

Khi thực thi, truy vấn trên cho kết quả sau.

Query: select * from customers order by id limit 4 offset 0 
+----+----------+-----+-----------+--------+
| id | name     | age | address   | salary | 
+----+----------+-----+-----------+--------+ 
| 1  | Ramesh   | 32  | Ahmedabad | 20000  | 
| 2  | Khilan   | 25  | Delhi     | 15000  | 
| 3  | kaushik  | 23  | Kota      | 30000  | 
| 4  | Chaitali | 25  | Mumbai    | 35000  | 
+----+----------+-----+-----------+--------+ 
Fetched 4 row(s) in 0.62s

Theo cách tương tự, bạn có thể lấy bốn bản ghi từ customers bảng bắt đầu từ hàng có độ lệch 5 như hình dưới đây.

[quickstart.cloudera:21000] > select * from customers order by id limit 4 offset 5; 
Query: select * from customers order by id limit 4 offset 5 
+----+--------+-----+----------+--------+ 
| id | name   | age | address  | salary | 
+----+--------+-----+----------+--------+ 
| 6  | Komal  | 22  | MP       | 32000  | 
| 7  | ram    | 25  | chennai  | 23000  | 
| 8  | ram    | 22  | vizag    | 31000  |
| 9  | robert | 23  | banglore | 28000  | 
+----+--------+-----+----------+--------+ 
Fetched 4 row(s) in 0.52s