Visualização e indexação do Hive: Crie com exemplos
⚡ Resumo Inteligente
As views no Hive são consultas salvas que se comportam como tabelas somente leitura, enquanto os índices são ponteiros para uma coluna que aceleram as pesquisas, e ambos são criados com instruções HiveQL curtas, como mostrado aqui.

O que é uma visão?
As views são semelhantes às tabelas e são geradas com base nos requisitos. Uma view é um objeto puramente lógico, sem armazenamento próprio: o Hive mantém apenas o texto da consulta no metastore e o avalia sempre que a view é referenciada.
- Podemos salvar qualquer dado do conjunto de resultados como uma visualização no Hive
- A utilização é semelhante às visualizações usadas em SQL
- Uma view é somente leitura, portanto não pode ser alvo de uma instrução LOAD, INSERT ou ALTER que escreva dados.
Criação de Visualização:
Sintaxe:
Create VIEW <VIEWNAME> AS SELECT
A forma completa documentada também aceita uma cláusula IF NOT EXISTS e uma lista de colunas opcional, o que é útil quando a lista SELECT contém expressões em vez de nomes de colunas simples.
Exemplo:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Neste exemplo, estamos criando a view Sample_View, que exibe todos os valores de linha com um campo de salário maior que 25000. O filtro reside dentro da view, portanto, qualquer consulta que selecione dados da Sample_View verá apenas essas linhas.
O que é Índice?
Índices são ponteiros para o nome de uma coluna específica de uma tabela. O objetivo de um índice é melhorar a velocidade de busca: sem um, uma consulta com um predicado como ONDE tab1.col1 = 10 Carrega a tabela ou partição inteira e processa cada linha, enquanto um índice na coluna 1 permite que o Hive leia apenas parte do arquivo.
- O usuário deve definir manualmente o índice
- Sempre que criamos um índice, estamos criando um ponteiro para um nome de coluna específico da tabela.
- Quaisquer alterações feitas na coluna presente na tabela são armazenadas usando o valor do índice criado no nome da coluna.
Essa aceleração não é gratuita. A criação do índice exige processamento adicional, e o próprio índice ocupa espaço em disco que precisa ser mantido juntamente com a tabela.
Sintaxe:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Exemplo:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Aqui, estamos criando um índice na tabela guruhive_internaltable para a coluna com o nome id. Observe que uma instrução completa em uma versão que ainda oferece suporte a indexação também precisa de uma cláusula index-handler, que será detalhada na próxima seção.
Diferença entre visualização e índice no Hive
As visualizações e os índices são frequentemente apresentados juntos porque ambos se baseiam em uma tabela existente, mas resolvem problemas diferentes. Uma visualização altera o que uma consulta vê, enquanto um índice altera a velocidade com que o Hive a encontra. A tabela abaixo compara os dois.
| Aspecto | Consultar | Índice |
|---|---|---|
| O que ele armazena | Apenas a instrução SELECT, no metastore. | Uma tabela de índice separada contendo ponteiros para os dados. |
| Propósito | Simplificar ou restringir o que uma consulta retorna. | Reduzir a quantidade de dados analisados para um predicado |
| Custo do disco | nenhum | Armazenamento extra e reconstrução após alterações de dados |
| Acesso de escrita | Somente leitura | Não é consultado diretamente; o otimizador o utiliza. |
| Estado actual | Totalmente compatível | Removido no Hive 3.0 |
Na prática, uma visualização é criada para facilitar a leitura e o controle de acesso, enquanto um índice foi criado exclusivamente para otimizar o desempenho em uma coluna específica.
Tipos de índice no Hive com sintaxe
As versões do Hive até a 2.x incluíam dois manipuladores de índice, e o manipulador é nomeado na cláusula AS obrigatória. A indexação compacta chegou no Hive 0.7.0 e a indexação bitmap no Hive 0.8.0.
- Índice compacto: Armazena o valor juntamente com o endereço do bloco HDFS que o contém, em vez de registrar a localização de cada ocorrência individual. É adequado para colunas com muitos valores distintos.
- Índice do mapa de bits: Armazena um bitmap para cada valor distinto, que é a abordagem usual para uma coluna com apenas um pequeno número de valores distintos, como um indicador de status ou gênero.
Um índice compacto é criado, listado e descartado da seguinte forma:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
A opção WITH DEFERRED REBUILD registra o índice sem o preencher, permitindo que a criação seja agendada separadamente com ALTER INDEX. Um índice bitmap é criado da mesma forma, com um nome de manipulador diferente:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Um índice não é atualizado automaticamente. Sempre que a tabela base recebe novos dados, o comando ALTER INDEX … REBUILD precisa ser executado novamente e, em uma tabela particionada, a reconstrução pode ser limitada a uma única partição.
Por que a indexação foi removida no Hive 3.0
A indexação foi removida do Hive na versão 3.0, conforme o bug HIVE-18448, portanto, os comandos CREATE INDEX, SHOW INDEX e DROP INDEX não existem mais em um cluster atual. O recurso raramente justificava o custo de reconstrução após a consolidação do armazenamento colunar e do otimizador baseado em custo. Três alternativas cobrem as mesmas necessidades.
- Vistas materializadas: introduzido no Hive 3.0.0, um visão materializada Armazena o resultado pré-computado de uma consulta e o otimizador reescreve automaticamente as consultas recebidas com base nesse resultado.
- Formatos de arquivo colunares: Os formatos ORC e Parquet possuem seus próprios índices leves e estatísticas de mínimo/máximo, permitindo que o leitor ignore faixas, blocos ou arquivos inteiros sem a necessidade de um índice definido pelo usuário.
- Partições e baldes: particionamento e agrupamento A limpeza de dados em nível de diretório e arquivo geralmente remove muito mais dados de entrada do que um índice jamais removeu.
No Hive 2.x, um índice ainda é válido, mas novos trabalhos são melhor atendidos por uma das opções acima.
