Impala - Cláusula de Compensação
Em geral, as linhas no conjunto de resultados de um select consulta começa em 0. Usando o offsetcláusula, podemos decidir de onde a saída deve ser considerada. Por exemplo, se escolhermos o deslocamento como 0, o resultado será como de costume e se escolhermos o deslocamento como 5, o resultado começa na quinta linha.
Sintaxe
A seguir está a sintaxe do offsetcláusula no Impala.
select data from table_name Group BY col_name;
Exemplo
Suponha que temos uma mesa chamada customers no banco de dados my_db e seu conteúdo é o seguinte -
[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
Você pode organizar os registros na tabela em ordem crescente de seus ids e limitar o número de registros a 4, usando limit e order by cláusulas conforme mostrado abaixo.
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
A seguir está um exemplo do offsetcláusula. Aqui, estamos obtendo os registros nocustomerstabela na ordem de seus ids e imprimindo as primeiras quatro linhas começando na 0ª linha.
[quickstart.cloudera:21000] > select * from customers order by id limit 4 offset 0;
Na execução, a consulta acima fornece o seguinte resultado.
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
Da mesma forma, você pode obter quatro registros do customers tabela começando na linha com deslocamento 5, conforme mostrado abaixo.
[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