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 limit và order 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