Tipos de dados do Hive: como criar e descartar bancos de dados no Hive

⚡ Resumo Inteligente

Os tipos de dados do Hive definem o que cada coluna da tabela pode armazenar, e os comandos CREATE DATABASE e DROP DATABASE configuram ou removem o namespace onde essas tabelas residem dentro do metastore do Hive.

  • 🔢 Tipos numéricos: TINYINT até BIGINT abrangem números inteiros, enquanto DECIMAL(precisão, escala) mantém valores exatos que FLOAT e DOUBLE não conseguem.
  • 🔤 Tipos de string: STRING não possui limite declarado, VARCHAR aceita de 1 a 65535 caracteres e CHAR tem um limite fixo de 255 caracteres.
  • 📅 Data e hora: A função DATE armazena um valor simples no formato AAAA-MM-DD e a função TIMESTAMP adiciona, opcionalmente, precisão de nanossegundos a esse valor.
  • 🧩 Tipos complexos: ARRAY, MAP, STRUCT e UNIONTYPE agrupam vários valores relacionados em uma única coluna, em vez de várias.
  • ???? Criar um banco de dados: O comando CREATE DATABASE registra um namespace no metastore, e o comando SHOW DATABASES confirma sua existência.
  • 🗑️ Excluir um banco de dados: O comando DROP DATABASE remove o namespace, e o comando CASCADE é necessário sempre que ainda houver tabelas dentro dele.

Tipos de dados do Hive e como criar e excluir bancos de dados no Hive

Os tipos de dados são elementos muito importantes na linguagem de consulta e na modelagem de dados do Hive. Para definir os tipos de coluna de uma tabela, precisamos conhecer os tipos de dados e seus usos.

A seguir, apresentamos uma breve visão geral de alguns tipos de dados presentes no Hive:

  • Tipos Numéricos
  • Tipos de String
  • Tipos de data/hora
  • Tipos complexos

Tipos de dados no Hive

Cada coluna do Hive é declarada com um dos tipos abaixo. As famílias primitivas vêm primeiro, seguidas pelos tipos complexos que armazenam mais de um valor em uma única coluna.

Tipos de dados numéricos do Hive

As colunas numéricas variam de um único byte a oito bytes, portanto, escolher o menor tipo que se ajuste aos valores mantém os custos de armazenamento e de leitura baixos.

Formato Alocação de memória
TINYINT Inteiro assinado de 1 bytes (-128 a 127)
PEQUENO Inteiro assinado de 2 bytes (-32,768 a 32,767)
INT Inteiro assinado de 4 bytes (-2,147,483,648 a 2,147,483,647)
GRANDE Inteiro assinado de 8 bytes (-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807)
FLOAT Número de ponto flutuante de precisão simples de 4 bytes
DUPLO Número de ponto flutuante de dupla precisão de 8 bytes
DECIMAL Podemos definir a precisão e a escala neste tipo, como DECIMAL(precisão, escala). Quando são omitidas, o Hive usa DECIMAL(10,0).

Tipos de dados de string do Hive

As colunas de caracteres vêm em três formatos, e a diferença entre eles é se o Hive impõe ou não um comprimento declarado.

Formato Comprimento
CARACTERES Comprimento fixo, até 255 caracteres. Valores menores são preenchidos com espaços.
VARCHAR De 1 a 65,535 caracteres. Valores maiores serão truncados silenciosamente.
STRING Podemos definir o comprimento aqui (sem limite).

Tipos de dados de data/hora do Hive

As colunas temporais são armazenadas sem qualquer deslocamento de fuso horário, o que é importante lembrar antes de comparar valores gravados por clusters diferentes.

Formato Uso
Timestamp Suporta tradicional Unix carimbo de data/hora com precisão opcional de nanossegundos
Data Está no formato AAAA-MM-DD.
O intervalo de valores suportados para o tipo Data é de 0000-01-01 a 9999-12-31, dependendo do suporte do tipo primitivo. Java data típica

Tipos de dados diversos do Hive

Outros dois tipos primitivos estão fora das famílias numérica, de string e de data, mas aparecem regularmente em esquemas reais.

Formato Uso
BOOLEAN Armazena verdadeiro ou falso
BINARY Armazena uma matriz de bytes, o que impede que o conteúdo bruto seja inserido em uma coluna STRING.

Tipos de dados complexos do Hive

Os tipos complexos aninham valores dentro de uma única coluna, o que elimina a junção extra que um design relacional exigiria.

Formato Uso
Arrays VARIEDADE
Valores negativos e expressões não constantes não são permitidos
mapas MAPA
Valores negativos e expressões não constantes não são permitidos
Estruturas ESTRUTURA
União TIPO DE UNIÃO

Exemplo de tipos de dados complexos do Hive

A tabela acima apresenta a forma de declaração. A instrução abaixo reúne três dos tipos complexos em uma única tabela, permitindo visualizar as cláusulas delimitadoras e a sintaxe de acesso em conjunto.

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

São necessários três delimitadores distintos: um entre as colunas, um segundo entre os itens de um ARRAY ou STRUCT e um terceiro entre a chave de um MAP e seu valor. Uma vez que a tabela exista, cada coluna complexa é lida com seu próprio acessador.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

A tabela abaixo resume a qual tipo pertence cada acessador.

Formato Como um valor é lido
ARRAY Índice baseado em zero, como skills[0]
MAPA Consulta de chave entre colchetes, como deduções['imposto']
ESTRUTURA A notação de ponto no nome do campo, como endereço.cidade
TIPO DE UNIÃO Raramente utilizado, pois o suporte a consultas para ele permanece incompleto.

Tipos complexos podem ser aninhados, portanto, ARRAY > é uma declaração de coluna válida. Uma vez definido o layout das colunas, as próprias tabelas são construídas com as instruções abordadas em Hive cria, altera e exclui tabelas.

Como criar e descartar bancos de dados no Hive

Um banco de dados no Hive é simplesmente um espaço de nomes que agrupa tabelas, sendo, portanto, o primeiro objeto a ser criado antes de qualquer manipulação de tabelas. A seguir, estão os passos para criar e excluir bancos de dados no Hive.

Passo 1) Criar banco de dados no Hive

Para criar um banco de dados no shell do Hive, precisamos usar o comando conforme mostrado na sintaxe abaixo:

Sintaxe:

Create database <DatabaseName>

Exemplo: Criar banco de dados “guru99”

A captura de tela abaixo mostra a instrução CREATE seguida por um comando SHOW listando todos os bancos de dados no cluster.

O shell do Hive cria o banco de dados guru99 e lista os bancos de dados com o comando show.

Conforme a captura de tela acima, estamos fazendo duas coisas:

  1. Criando banco de dados “guru99” no Hive
  2. Exibindo bancos de dados existentes usando o comando “show”

Na mesma tela, o banco de dados “guru99” é exibido ao final da execução do comando show, o que significa que o banco de dados “guru99” foi criado com sucesso.

Etapa 2) Excluir banco de dados no Hive

Para quedaping Para excluir um banco de dados no shell do Hive, precisamos usar o comando "drop", conforme mostrado na sintaxe abaixo:

Sintaxe:

Drop database <DatabaseName>

Exemplo: Excluir banco de dados guru99

Na próxima captura de tela, a instrução drop é executada primeiro e o comando show que se segue não lista mais o banco de dados.

queda de concha da colmeiaping o banco de dados guru99 e a confirmação da remoção com show

Na captura de tela acima, estamos fazendo duas coisas:

  1. Estamos caindoping banco de dados 'guru99' do Hive
  2. verificando o mesmo com o comando “mostrar”

Na mesma tela, após verificar os bancos de dados com o comando show, o banco de dados “guru99” não aparece no Hive. Portanto, podemos confirmar que o banco de dados “guru99” foi excluído.

Comandos do banco de dados Hive: USE, DESCRIBE, SHOW e ALTER DATABASE

As duas declarações acima usam sua forma mais curta. A sintaxe documentada contém cláusulas opcionais que definem onde os arquivos serão salvos e o que acontece quando o nome já estiver em uso.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

As palavras-chave DATABASE e SCHEMA são intercambiáveis ​​em todo o código, portanto, CREATE SCHEMA e CREATE DATABASE fazem exatamente a mesma coisa. Os comandos restantes complementam o trabalho diário com um namespace.

Command O que ele faz
MOSTRAR BANCOS DE DADOS; Lista todos os bancos de dados registrados no metastore.
USE nome_do_banco de dados; Define o banco de dados atual para que os nomes das tabelas não precisem de prefixo.
DESCRIBE DATABASE nome_do_banco_de_dados; O relatório inclui o comentário, a localização no HDFS e o proprietário.
DESCRIBE DATABASE EXTENDED database_name; Adiciona os pares chave-valor DBPROPERTIES a essa saída.
ALTER DATABASE nome_do_banco_de_dados SET DBPROPERTIES (…); Adiciona ou substitui propriedades de metadados
ALTER DATABASE nome_do_banco_de_dados SET OWNER USER nome_do_usuário; Transfere a propriedade para outro usuário ou função.
ALTER DATABASE nome_do_banco_de_dados SET LOCATION caminho_hdfs; Altera o caminho usado pelas tabelas criadas a partir de então.

Vale a pena memorizar duas configurações padrão. Sem uma cláusula LOCATION, os arquivos ficam no diretório do warehouse, normalmente /user/hive/warehouse/nome_do_banco_de_dados.db, e sem IF EXISTS, uma operação de exclusão em um arquivo com nome inexistente gera um erro em vez de prosseguir sem problemas. Ambas as configurações são armazenadas no arquivo. Metastore do Hive.

Conversão de tipo de dados e erros comuns no Hive

Os tipos nem sempre são usados ​​exatamente como declarados. O Hive amplia um valor automaticamente quando nenhuma informação pode ser perdida e deixa todo o resto para uma conversão explícita.

  • O alargamento implícito segue a cadeia TINYINT para SMALLINT para INT para BIGINT para FLOAT para DOUBLE, e uma STRING que contém dígitos é promovida para DOUBLE.
  • A conversão de um valor do tipo DOUBLE para INT nunca ocorre espontaneamente, portanto, um valor DOUBLE atribuído a uma coluna INT precisa de uma conversão escrita.
  • A função CAST realiza essa conversão escrita e retorna NULL em vez de um erro quando o valor não pode ser convertido.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Os erros abaixo são responsáveis ​​pela maioria das surpresas que os iniciantes encontram em seu primeiro esquema.

Sintoma Causa e solução
A operação de exclusão falha enquanto o banco de dados ainda contém tabelas. RESTRICT é o padrão. Adicione CASCADE para excluir as tabelas incluídas.
Uma longa corda chega encurtada. VARCHAR trunca silenciosamente os dados além do comprimento declarado. Use STRING quando não desejar um limite.
Uma coluna é exibida como NULL após uma conversão. A função CAST não conseguiu analisar o valor. Verifique os dados de origem antes de ampliar o tipo.
Os valores das moedas perdem seus centavos. DECIMAL sem argumentos significa DECIMAL(10,0). Indique a escala explicitamente.
Duas datas idênticas nunca coincidem. Uma data em formato de string e uma coluna de data são tipos diferentes. Converta um lado antes de comparar.

Uma vez que os tipos estejam funcionando corretamente, o próximo passo é carregar e consultar os dados em si, o que é abordado em [referência]. Consultas Hive com Order By, Group By e Cluster By.

Perguntas Frequentes

Não. DATABASE e SCHEMA são palavras-chave intercambiáveis ​​em HiveQL, portanto, CREATE SCHEMA sales e CREATE DATABASE sales produzem o mesmo objeto metastore. A escolha é puramente uma questão de estilo da empresa.

No diretório do warehouse, normalmente /user/hive/warehouse/nome_do_banco_de_dados.db no HDFS. Uma cláusula LOCATION no comando CREATE DATABASE sobrescreve esse caminho, e o comando DESCRIBE DATABASE reporta o local que foi efetivamente utilizado.

A forma STRING é a escolha usual porque não possui limite declarado e não precisa de preenchimento. VARCHAR é útil quando um comprimento específico precisa ser imposto, e CHAR é adequada para códigos curtos de largura fixa, como abreviações de países.

DOUBLE é um tipo de dados binário de ponto flutuante, portanto, somas repetidas podem variar em frações de centavo. DECIMAL, por sua vez, armazena valores exatos com uma precisão e escala definidas, o que mantém os totais financeiros reproduzíveis em diferentes execuções.

Um TIMESTAMP simples não leva em consideração o fuso horário e é lido exatamente como foi escrito. O Hive 3.1 adicionou o TIMESTAMP WITH LOCAL TIME ZONE, que normaliza o valor para UTC na gravação e o converte na leitura.

Sim. Uma STRUCT pode estar dentro de um ARRAY e um valor de MAP pode ser ele próprio uma STRUCT, portanto, ARRAY > é válido em ColméiaAninhamento profundo complica os delimitadores, portanto, mantenha-o superficial.

Sim. As ferramentas de perfilamento de dados amostram a cardinalidade, as taxas de valores nulos e os intervalos de valores, sugerindo então o tipo de arquivo e o formato de arquivo mais adequados. Considere a sugestão como um rascunho, pois o modelo não consegue prever cargas de trabalho futuras.

O Copilot gera instruções CREATE TABLE e CREATE DATABASE a partir de um breve comentário, e assistentes de agentes podem converter um arquivo de exemplo em um esquema. Sempre verifique a escala DECIMAL e as cláusulas delimitadoras antes de executar o resultado.

Resuma esta postagem com: