Impala - Clausola offset
In generale, le righe nel gruppo di risultati di un file select la query inizia da 0. Utilizzando l'estensione offsetclausola, possiamo decidere da dove considerare l'output. Ad esempio, se scegliamo l'offset come 0, il risultato sarà come al solito e se scegliamo l'offset come 5, il risultato inizia dalla quinta riga.
Sintassi
Di seguito è riportata la sintassi di offsetclausola in Impala.
select data from table_name Group BY col_name;
Esempio
Supponiamo di avere una tabella denominata customers nel database my_db e il suo contenuto è il seguente:
[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
È possibile disporre i record nella tabella in ordine crescente rispetto ai loro ID e limitare il numero di record a 4, utilizzando limit e order by clausole come mostrato di seguito.
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
Di seguito è riportato un esempio di offsetclausola. Qui stiamo ottenendo i record nel filecustomerstavolo in ordine di id e stampando le prime quattro righe a partire dalla 0 esima riga.
[quickstart.cloudera:21000] > select * from customers order by id limit 4 offset 0;
All'esecuzione, la query precedente fornisce il risultato seguente.
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
Allo stesso modo, puoi ottenere quattro record dal file customers tabella a partire dalla riga avente offset 5 come mostrato di seguito.
[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