Impala - klauzula offsetowa

Ogólnie rzecz biorąc, wiersze w zestawie wyników a select zapytanie zaczyna się od 0. Za pomocą offsetklauzuli, możemy zdecydować, gdzie dane wyjście ma być brane pod uwagę. Na przykład, jeśli ustawimy przesunięcie na 0, wynik będzie jak zwykle, a jeśli wybierzemy przesunięcie na 5, wynik zacznie się od piątego rzędu.

Składnia

Poniżej znajduje się składnia offsetklauzula w Impala.

select data from table_name Group BY col_name;

Przykład

Załóżmy, że mamy tabelę o nazwie customers w bazie danych my_db a jego zawartość jest następująca -

[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

Możesz uporządkować rekordy w tabeli rosnąco według ich identyfikatorów i ograniczyć liczbę rekordów do 4, używając limit i order by klauzule, jak pokazano poniżej.

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

Poniżej znajduje się przykład offsetklauzula. Tutaj otrzymujemy rekordy wcustomerstabeli w kolejności ich identyfikatorów i wypisując pierwsze cztery wiersze, zaczynając od zerowego wiersza.

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

Podczas wykonywania powyższe zapytanie daje następujący wynik.

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

W ten sam sposób możesz pobrać cztery rekordy z pliku customers tabela począwszy od wiersza o przesunięciu 5, jak pokazano poniżej.

[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