Hive: Criar tabela: interna, alterar e excluir com exemplos
⚡ Resumo Inteligente
Criar, alterar e soltarping As tabelas no Apache Hive usam DDL no estilo SQL, mas o resultado depende se a tabela é interna, ou seja, de propriedade do Hive, ou externa, que apenas descreve arquivos.
Operações em tabelas, como criação, alteração e exclusão.ping Neste passo a passo, você poderá observar as tabelas no Hive. Cada operação é demonstrada primeiro como uma sessão ao vivo e, em seguida, como uma instrução reutilizável.
Como criar, alterar e excluir uma tabela no Hive
Na captura de tela abaixo, estamos criando uma tabela com colunas e alterando o nome da tabela.
- Criando a tabela guru_sample com duas colunas chamadas “empid” e “empname”.
- Exibindo as tabelas presentes no banco de dados guru99
- guru_sample exibido em tabelas
- Alterando a tabela “guru_sample” para “guru_sampleNew”
- Novamente, ao executar o comando “show”, ele exibirá o novo nome guru_sampleNew.
A sessão abaixo executa todas as cinco etapas em ordem. colmeia> O comando `prompt`, e as duas chamadas `SHOW TABLES` antes e depois da renomeação, tornam o efeito visível.
Cairping tabela guru_sampleNew:
Uma única instrução DROP TABLE remove a tabela renomeada, e o Hive responde com OK.
Sintaxe e cláusulas comuns do comando CREATE TABLE no Hive
O exemplo acima usa a forma mais curta possível. A instrução documentada aceita várias cláusulas opcionais, e cada uma delas decide algo que o exemplo deixa com seu valor padrão.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| Cláusula | O que ele controla |
|---|---|
| EXTERNO | Cria uma tabela externa, portanto o comando DROP mantém os arquivos de dados no local. |
| TEMPORÁRIO | Cria uma tabela com escopo de sessão que desaparece ao término da sessão. |
| SE NÃO EXISTE | Suprime o erro quando já existe uma tabela com esse nome. |
| PARTICIONADO POR | Divide a tabela em um diretório por valor de chave. |
| AGRUPADOS POR … EM n BALDES | Agrupa linhas em um número fixo de arquivos. |
| FORMATO DA LINHA / ARMAZENADO COMO | Define o delimitador ou SerDe e o formato do arquivo, como TEXTFILE, ORC ou Parquet. |
| LOCALIZAÇÃO | Aponta a tabela para um caminho HDFS específico em vez do padrão do warehouse. |
| TBLPROPERTIES | Anexa pares de chave-valor de metadados, incluindo external.table.purge. |
Uma forma relacionada, CRIAR TABELA nova_tabela COMO tabela_existente, copia um esquema sem copiar nenhuma linha. Cláusulas estruturais como PARTITIONED BY e CLUSTERED BY são abordadas em detalhes no guia para Divisórias e baldes para colmeias.
Tipos de tabela e seu uso
Em relação às tabelas, o processo é semelhante ao que fazemos em bancos de dados relacionais tradicionais. Funcionalidades como filtragem e junções podem ser realizadas nas tabelas.
O Hive lida com dois tipos de estruturas de tabelas: tabelas internas e externas, dependendo do carregamento e do design do esquema. ColméiaA escolha não é meramente estética: ela decide quem é o proprietário dos arquivos de dados e o que acontece com eles quando a tabela é excluída.
Tabelas internas no Hive
- A tabela interna é inerentemente acoplada. Nesse tipo de tabela, primeiro precisamos criar a tabela e depois carregar os dados.
- Podemos chamar isso de dados sobre esquema.
- Por gotaping Esta tabela, tanto os dados quanto o esquema, será removida.
- O local armazenado desta tabela será /user/hive/warehouse.
- As tabelas internas também são chamadas de tabelas gerenciadas, e somente elas suportam as transações TRUNCATE, ARCHIVE, MERGE, CONCATENATE e ACID.
Quando escolher a tabela interna?
- Se os dados de processamento estiverem disponíveis no sistema de arquivos local
- Se quisermos que o Hive gerencie o ciclo de vida completo dos dados, incluindo a exclusão
Exemplo de trecho de código para tabela interna
- Para criar a tabela interna
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Carregue os dados na tabela interna
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Exibir o conteúdo da tabela
Hive>select * from guruhive_internaltable;
- Para eliminar a tabela interna
Hive>DROP TABLE guruhive_internaltable;
Se você excluir a tabela interna guruhive_internaltable, seus metadados e dados serão apagados do Hive. A menos que o comando PURGE seja especificado, os arquivos são movidos para a lixeira do HDFS em vez de serem removidos imediatamente.
Na captura de tela a seguir, podemos observar o resultado de todas as quatro instruções em uma única sessão, finalizando com a exclusão bem-sucedida.
No código acima e conforme a captura de tela, fazemos o seguinte:
- Crie a tabela interna
- Carregue os dados na tabela interna
- Exibir o conteúdo da tabela
- Para eliminar a tabela interna
Tabelas externas no Hive
- A tabela externa possui um acoplamento fraco. Os dados estarão disponíveis no HDFS. A tabela será criada com base nos dados do HDFS.
- Em outras palavras, podemos dizer que está criando um esquema com base nos dados.
- No momento da quedaping A tabela é excluída, apenas o esquema; os dados continuarão disponíveis no HDFS como antes.
- Tabelas externas fornecem uma opção para criar vários esquemas para os dados armazenados no HDFS em vez de excluir os dados sempre que o esquema for atualizado
- A partir do Hive 4.0.0, definir a propriedade da tabela `external.table.purge` como `true` faz com que o comando `DROP` também exclua os dados.
Quando escolher a mesa externa?
- Se os dados de processamento estiverem disponíveis no HDFS
- Útil quando os arquivos estão sendo usados fora do Hive
Exemplo de trecho de código para tabela externa
- Criar tabela externa
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Se não especificarmos a localização no momento da criação da tabela, podemos carregar os dados manualmente.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Exibir o conteúdo da tabela
Hive>select * from guruhive_external;
- Para excluir a tabela externa
Hive>DROP TABLE guruhive_external;
Na captura de tela a seguir, podemos observar a saída. Observe que a ação de soltar no final remove apenas o esquema – o arquivo no caminho LOCATION permanece intacto.
No código acima, fazemos o seguinte:
- Crie a tabela externa
- Carregue os dados na tabela externa
- Exibir o conteúdo da tabela
- Cairping tabela externa
Diferença entre tabelas internas e externas
| Característica | Interno | Externo |
|---|---|---|
| Esquema | Dados no esquema | Esquema em dados |
| Local de armazenamento | /user/hive/warehouse | Localização HDFS fornecida por LOCATION |
| Disponibilidade de dados | Dentro do sistema de arquivos local | Dentro do HDFS |
| Efeito da QUEDA | Exclui o esquema e os dados. | Exclui apenas o esquema, a menos que external.table.purge seja verdadeiro. |
| Suporte a TRUNCATE | Suportado | Não suportado |
| Transações ACID | Suportado | Não suportado |
O Documentação do Apache Hive A regra é clara: o Hive assume que possui os dados das tabelas gerenciadas e assume que não os possui para as tabelas externas, e todas as diferenças acima decorrem dessa única premissa.
Referência dos comandos ALTER TABLE e DROP TABLE
As capturas de tela acima mostram apenas uma renomeação e uma exclusão. Essas são as instruções que um profissional utiliza com mais frequência em uma tabela existente.
| Declaração | Propósito |
|---|---|
| ALTER TABLE nome_da_tabela RENAME TO novo_nome; | Renomeia a tabela; para uma tabela gerenciada, isso também move seu diretório HDFS. |
| ALTER TABLE nome_da_tabela ADD COLUMNS (nome_da_coluna tipo_de_dados); | Acrescenta uma ou mais colunas ao final do esquema. |
| ALTER TABLE nome_da_tabela CHANGE COLUMN nome_antigo nome_novo tipo_de_dados; | Renomeia uma coluna ou altera seu tipo. |
| ALTER TABLE nome_da_tabela REPLACE COLUMNS (…); | Substitui toda a lista de colunas por uma nova. |
| ALTER TABLE nome_da_tabela SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Converte uma tabela gerenciada em uma tabela externa, e FALSE reverte essa conversão. |
| DROP TABLE [IF EXISTS] nome_da_tabela [PURGE]; | Remove a tabela; o comando PURGE ignora a pasta Lixeira, portanto os dados não podem ser recuperados. |
| TRUNCATE [TABLE] nome_da_tabela; | Remove todas as linhas, mas mantém o esquema; somente para tabelas gerenciadas. |
Duas medidas de segurança são importantes em qualquer script. A condição `IF EXISTS` impede que a exclusão falhe em uma tabela que já foi removida, e a condição `DESCRIBE FORMATTED` confirma se o destino é uma tabela gerenciada (MANAGED_TABLE) ou externa (EXTERNAL_TABLE) antes da execução da exclusão.





