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.

  • 👁️ A visão é lógica: Uma view armazena apenas sua instrução SELECT no metastore, portanto, não ocupa espaço em disco próprio.
  • 🔒 Somente leitura por design: Uma view não pode ser alvo de LOAD, INSERT ou ALTER, porque o Hive a avalia novamente a cada consulta.
  • 📍 Os pontos de índice apontam para os dados: Um índice é um ponteiro para o valor de uma coluna que permite ao Hive ler parte de um arquivo em vez da tabela inteira.
  • 🗂️ Dois tratadores: A indexação compacta é adequada para colunas de alta cardinalidade, enquanto a indexação por bitmap é adequada para colunas com poucos valores distintos.
  • 🔄 Reconstrução manual: Um índice nunca é atualizado automaticamente, portanto, o comando ALTER INDEX REBUILD deve ser executado após as alterações na tabela base.
  • 🚫 Removido no Hive 3.0: A indexação foi descontinuada sob a regulamentação HIVE-18448, sendo substituída por visualizações materializadas, armazenamento ORC ou Parquet e particionamento.

Visão geral e índices no Hive explicados com exemplos.

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.

Perguntas Frequentes

O comando DROP VIEW nome_da_view remove a view, e o comando ALTER VIEW nome_da_view RENAME TO nome_da_view a renomeia. Como uma view não contém dados, o comando DROP VIEW remove a view.ping A tabela base nunca é alterada; apenas a entrada no metastore desaparece.

Uma visão materializada armazena o resultado da consulta pré-computado como dados reais, portanto, ocupa espaço em disco e precisa ser reconstruída (REBUILD). Uma visão normal armazena apenas o texto da consulta e é recalculada a cada referência.

Não. O metastore mantém a instrução SELECT e a lista de colunas resolvida, nada mais. Cada referência executa novamente a consulta subjacente, e é por isso que uma visualização sobre uma junção lenta continua lenta.

No Hive 0.12.0 e versões anteriores, os nomes dos índices diferenciavam maiúsculas de minúsculas para CREATE INDEX e DROP INDEX, enquanto ALTER INDEX exigia letras minúsculas. O Hive 0.13.0 tornou os nomes dos índices insensíveis a maiúsculas e minúsculas para todas as instruções.

Sim, em qualquer cluster moderno. A poda de partições remove diretórios inteiros antes do início da varredura, e o agrupamento restringe uma junção ou amostra a arquivos específicos, o que geralmente supera o que uma tabela de índice poderia oferecer.

As ferramentas de aprendizado de máquina analisam os logs de consultas, classificam as colunas de predicados por seletividade e frequência e sugerem onde uma visão materializada ou um esquema de particionamento seria vantajoso. Valide cada sugestão com um plano EXPLAIN antes de aplicá-la.

Ele gera instruções CREATE VIEW de forma confiável a partir de um comentário curto. Verifique quaisquer especificidades da versão, pois ele ainda emite a sintaxe CREATE INDEX, que um cluster Hive 3.0 ou posterior rejeita completamente.

O índice é uma tabela separada de ponteiros, e o Hive nunca o atualiza quando a tabela base é alterada. Sem uma reconstrução, os ponteiros ficam obsoletos, então o otimizador ignora o índice ou retorna correspondências desatualizadas.

Resuma esta postagem com: