Vídeo: Quebra de Seção no Word: Como Fazer ou Remover (e suas diversas finalidades!) 2024
Você provavelmente já sabe que especialistas em modelagem e design de banco de dados relacionais geralmente gastam muito tempo em design de bancos de dados normalizados ou esquemas <. O banco de dados normalização é uma técnica que protege contra perda de dados, redundância e outras anomalias à medida que os dados são atualizados e recuperados. Os especialistas seguem uma série de regras para chegar a um banco de dados normalizado, mas a Regra 1 é que você deve terminar com um
grupo de tabelas. (Uma tabela grande que armazena todos os seus dados não é normal - trocadilhos.) Existem exceções, dependendo do caso de uso, mas a lei de muitas tabelas geralmente é seguida de perto, especialmente para bancos de dados que suportam transações ou processamento analítico (business intelligence, por exemplo).
O que tudo isso tem a ver com juntas na Hive? Bem, lembre-se de que o sistema operacional subjacente para o Hive é (surpresa!) Apache Hadoop: o MapReduce é o mecanismo para juntar tabelas e o Hadoop File System (HDFS) é o armazenamento subjacente. É uma boa notícia para o usuário que quer criar, gerenciar e analisar grandes tabelas com o Hive.
Lembre-se de que o MapReduce e o HDFS são otimizados para a produção com grandes análises de dados e que, neste mundo, latências - tempos de resposta dos usuários, em outras palavras - geralmente são altos. A Hive foi projetada para o processamento analítico em lote, não para o processamento rápido de transações on-line. Os usuários que desejam o melhor desempenho possível com SQL no Apache Hadoop possuem soluções disponíveis.
Como a tabela de colméia lê e escreve via HDFS geralmente envolve blocos de dados muito grandes, quanto mais dados você pode gerenciar completamente em uma tabela, melhor será o desempenho geral.
O acesso ao disco e à rede é muito mais lento do que o acesso à memória, para minimizar o HDFS lê e grava o máximo possível.
Com esta informação de fundo em mente, você pode enfrentar fazer juntas com o Hive. Felizmente, a comunidade de desenvolvimento da Colméia foi realista e entendeu que os usuários desejariam e precisariam se juntar a tabelas com o HiveQL. Este conhecimento torna-se especialmente importante com o aumento de EDW. Casos de uso como arquivos "consultivos" geralmente requerem associações para análise de dados.
Aqui está um exemplo de junção de colmeia usando tabelas de dados de vôo. A lista mostra como criar e exibir uma tabela myflightinfo2007 e uma tabela myflightinfo2008 das tabelas FlightInfo2007 e FlightInfo2008 maiores. O plano ao longo do tempo era usar o CTAS criou as tabelas myflightinfo2007 e myflightinfo2008 para ilustrar como você pode realizar juntas na Hive.
A figura mostra o resultado de uma junção interna com as tabelas myflightinfo2007 e myflightinfo2008 usando o cliente SQuirreL SQL.
Hive suporta
equi-junções, um tipo específico de junção que usa apenas comparações de igualdade no predicado de junção. (ON m8. FlightNum = m7. FlightNum é um exemplo de equi-join.) Outros comparadores como Less Than (<) não são suportados. Essa restrição é apenas devido a limitações no mecanismo MapReduce subjacente. Além disso, você não pode usar OR na cláusula ON. A figura ilustra o exemplo anterior da união interna e outros dois tipos de junção de colmeia. Observe que você pode confirmar os resultados de uma junção interna, revisando o conteúdo das tabelas myflight2007 e myflight2008.
A figura a seguir ilustra como uma junção interna funciona usando um diagrama de Venn, caso você não esteja familiarizado com a técnica. A idéia básica aqui é que uma junção interna retorna os registros que combinam entre duas tabelas. Então, uma junção interna é uma ferramenta de análise perfeita para determinar quais vôos são os mesmos de JFK (Nova York) para ORD (Chicago) em julho de 2007 e julho de 2008.
Otimizar as junções de Hive é um tópico quente na comunidade Hive. Para obter mais informações sobre as técnicas de otimização atuais, consulte a página Aderir a otimização no wiki da Colméia.