Alguém pode me dizer a diferença entre a tabela externa do Hive e as tabelas internas. Eu sei que a diferença vem ao largar a mesa. Não entendo o que você quer dizer com os dados e os metadados são excluídos nas tabelas internas e apenas os metadados são excluídos nas tabelas externas. Alguém pode me explicar em termos de nós, por favor.
110
As tabelas do Hive podem ser criadas como EXTERNAL ou INTERNAL. Esta é uma escolha que afeta como os dados são carregados, controlados e gerenciados.
Use tabelas EXTERNAL quando:
Use tabelas INTERNAS quando:
fonte
Para responder a sua pergunta:
Para tabelas externas, o Hive armazena os dados no LOCAL especificado durante a criação da tabela (geralmente não no diretório do warehouse). Se a tabela externa for eliminada, os metadados da tabela serão excluídos, mas não os dados.
Para tabelas internas, o Hive armazena dados em seu diretório de warehouse. Se a tabela for descartada, os metadados e os dados da tabela serão excluídos.
Para sua referência,
Diferença entre tabelas internas e externas:
O Hive pode ter tabelas internas ou externas, esta é uma escolha que afeta como os dados são carregados, controlados e gerenciados.
Use tabelas EXTERNAL quando:
Use tabelas INTERNAS quando:
Fonte :
HDInsight: introdução às tabelas internas e externas do Hive
Tabelas internas e externas no Hadoop- HIVE
fonte
Os dados de uma tabela interna são armazenados na pasta do warehouse, enquanto os dados de uma tabela externa são armazenados no local que você mencionou na criação da tabela.
Portanto, quando você exclui uma tabela interna, ele exclui o esquema, bem como os dados da pasta do warehouse, mas para uma tabela externa é apenas o esquema que você perderá.
Portanto, quando você quiser uma tabela externa de volta após excluí-la, pode criar uma tabela com o mesmo esquema novamente e apontá-la para o local dos dados originais. Espero que esteja claro agora.
fonte
A única diferença de comportamento (não o uso pretendido) com base na minha pesquisa e testes limitados até agora (usando Hive 1.1.0 -cdh5.12.0) parece ser quando uma tabela é descartada
(NOTA: Veja a seção 'Tabelas gerenciadas e externas' em https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL que lista algumas outras diferenças que eu não entendi completamente)
Eu acredito que o Hive escolhe o local onde precisa criar a tabela com base na seguinte precedência de cima para baixo
Quando a opção "Localização" não é usada durante a "criação de uma tabela de colmeia", a regra de precedência acima é usada. Isso é aplicável para tabelas internas e externas. Isso significa que uma tabela interna não precisa necessariamente residir no diretório Warehouse e pode residir em qualquer outro lugar.
Nota: Eu posso ter perdido alguns cenários, mas com base em minha exploração limitada, o comportamento da mesa interna e externa parece ser o mesmo, exceto por uma diferença (exclusão de dados) descrita acima. Tentei os seguintes cenários para tabelas internas e externas.
fonte
Em tabelas externas, se você eliminá-lo, ele exclui apenas o esquema da tabela, os dados da tabela existem no local físico. Portanto, para excluir os dados, use hadoop fs - rmr tablename. A seção de tabelas gerenciadas terá controle total sobre as tabelas. Em tabelas externas, os usuários terão controle sobre ele.
fonte
As tabelas internas são úteis se você deseja que o Hive gerencie o ciclo de vida completo dos seus dados, incluindo a exclusão, enquanto as tabelas externas são úteis quando os arquivos estão sendo usados fora do Hive.
fonte
A tabela hive externa tem as vantagens de não remover arquivos quando removemos tabelas, podemos definir formatos de linha com configurações diferentes, como serde .... delimitado
fonte
Lembre-se também de que o Hive é um grande data warehouse. Quando você deseja eliminar uma tabela, não quer perder Gigabytes ou Terabytes de dados. Gerar, mover e copiar dados nessa escala pode ser demorado. Quando você descarta uma seção de tabela 'Gerenciada', também destrói seus dados. Quando você remove uma tabela 'Externa', apenas a definição do esquema do meta-armazenamento do hive é removida. Os dados sobre os hdfs ainda permanecem.
fonte
Considere este cenário que melhor se adequa à Tabela Externa:
Um trabalho MapReduce (MR) filtra um enorme arquivo de log para liberar
n
arquivos de sub log (por exemplo, cada arquivo de sub log contém um log de tipo de mensagem específico) e a saída, ou seja, osn
arquivos de sub log são armazenados em hdfs.Esses arquivos de log devem ser carregados nas tabelas do Hive para a realização de análises adicionais, neste cenário eu recomendaria uma (s) Tabela (s) Externa (s), porque os arquivos de log reais são gerados e pertencentes a um processo externo, ou seja, um trabalho de MR além de você pode evitar um etapa adicional de carregar cada arquivo de log gerado na respectiva tabela Hive também.
fonte
O melhor caso de uso para uma tabela externa na seção é quando você deseja criar a tabela a partir de um arquivo CSV ou de texto
fonte
O hive armazena apenas os metadados no metastore e os dados originais no lado externo do hive quando usamos a tabela externa, podemos dar a localização '' por estes nossos dados originais não afetarão quando descartamos a tabela
fonte
Quando já houver dados no HDFS, uma tabela Hive externa pode ser criada para descrever os dados. É denominado EXTERNAL porque os dados na tabela externa são especificados nas propriedades LOCATION em vez do diretório padrão do warehouse.
Ao manter os dados nas tabelas internas, o Hive gerencia totalmente o ciclo de vida da tabela e dos dados. Isso significa que os dados são removidos assim que a tabela interna é eliminada. Se a tabela externa for eliminada, os metadados da tabela serão excluídos, mas os dados serão mantidos. Na maioria das vezes, uma tabela externa é preferida para evitar a exclusão de dados junto com as tabelas por engano.
fonte
Para tabelas gerenciadas, o Hive controla o ciclo de vida de seus dados. O Hive armazena os dados das tabelas gerenciadas em um subdiretório no diretório definido por hive.metastore.warehouse.dir por padrão.
Quando eliminamos uma tabela gerenciada, o Hive exclui os dados da tabela. Mas as tabelas gerenciadas são menos convenientes para compartilhar com outras ferramentas. Por exemplo, digamos que temos dados que são criados e usados principalmente pelo Pig, mas queremos executar algumas consultas neles, mas não dar ao Hive a propriedade dos dados.
Nesse momento, é definida uma tabela externa que aponta para esses dados, mas não se apropria deles.
fonte
INTERNO : a tabela é criada primeiro e os dados são carregados depois
EXTERNO : os dados estão presentes e a tabela é criada sobre eles.
fonte
No Hive, também podemos criar uma mesa externa. Diz ao Hive para consultar os dados que estão em um local existente fora do diretório do warehouse. A eliminação de tabelas externas excluirá os metadados, mas não os dados.
fonte
Eu gostaria de adicionar isso
fonte
Em palavras simples, existem duas coisas:
O Hive pode gerenciar coisas no warehouse, ou seja, não excluirá dados do warehouse. Quando excluímos a tabela:
1) Para tabelas internas, os dados são gerenciados internamente no warehouse. Portanto, será excluído.
2) Para tabelas externas, os dados são gerenciados eternamente a partir do warehouse. Portanto, não pode ser excluído e outros clientes além do hive também podem usá-lo.
fonte