Juntando-se tabelas com colmeia
Video: SandroGeo: Juntando tabelas através de relações espaciais
Você provavelmente já sabe que os especialistas em modelagem de banco de dados relacional e design normalmente gastam muito do seu tempo projetar bancos de dados normalizados, ou schemas. Base de dados normalização é uma técnica que protege contra a perda de dados, redundância e outras anomalias como os dados são atualizados e recuperados.
Os especialistas seguem uma série de regras para chegar a um banco de dados normalizado, mas Regra 1 é que você deve acabar com um grupo de tabelas. (Uma grande mesa de armazenar todos os seus dados não é normal -. Trocadilhos) Há exceções, dependendo do caso de uso, mas a lei de muitas tabelas é geralmente seguido de perto, especialmente para bancos de dados que suportam transações ou processamento analítico (inteligência de negócios, por exemplo).
Quando você começa a consultar e analisar seus dados, tabelas são unidas com base nas relações definidas entre eles usando SQL - o que significa que os discos são em última análise, ocupado no seu servidor quando você começar a juntar tabelas, e os discos ocupados geralmente resultam em tempos de resposta de usuário mais lentas . No entanto, a boa notícia é que RDBMSs e EDWs estão sintonizados para fazer une o mais rápido possível.
O que tudo isso tem a ver com junta em Hive? Bem, lembre-se que o sistema operacional subjacente para Hive é Apache Hadoop (surpresa!): MapReduce é o motor para associar tabelas, eo sistema de arquivos Hadoop (HDFS) é o armazenamento subjacente. É uma boa notícia para o usuário que quer criar, gerenciar e analisar grandes mesas com Hive.
O potencial para desbloquear informações que está escondido em estruturas de dados massivos é emocionante. No entanto, se junta com Hive normalmente não funcionar tão bem como eles fazem no mundo RDBMS / EDW, para que os usuários de primeira viagem são muitas vezes surpreendidos pela “pokiness” da resposta do sistema.
Lembre-se que MapReduce e HDFS são otimizados para rendimento com grandes análises de dados e que, neste mundo, latências - tempos de resposta do usuário, em outras palavras - são geralmente elevadas. Hive é projetado para processamento analítico-style lote, e não para processamento de transações on-line rápido. Os usuários que querem o melhor desempenho possível com SQL no Apache Hadoop têm soluções disponíveis.
Manter esta dinâmica em mente quando você começar a juntar tabelas com Hive. Observe também que os arquitetos Hive normalmente desnormalizar suas bases de dados, em certa medida, de modo a ter menos tabelas maiores é comum. Isso é tipos de dados por complexos como STRUCTareia ARRAYs são fornecidos. Você pode usar estes tipos de dados complexos para embalar muito mais dados em uma única tabela.
Como a tabela Hive lê e escreve via HDFS geralmente envolvem muito grandes blocos de dados, quanto mais dados você pode gerenciar por completo em uma tabela, melhor o desempenho global.
Rígido e acesso à rede é muito mais lento do que o acesso à memória, assim minimizar HDFS lê e escreve, tanto quanto possível.
Com esta informação de fundo em mente, você pode lidar com a tomada de junta com Hive. Felizmente, a comunidade de desenvolvimento Hive era realista e entender que os usuários querem e precisam para se juntar tabelas com HiveQL. Este conhecimento torna-se especialmente importante com EDW aumento. Os casos de uso como “Queryable” arquivos exigem muitas vezes se junta para análise de dados.
Aqui está uma colmeia se juntar exemplo o uso de tabelas de dados de voo. A listagem mostra como criar e exibir uma myflightinfo2007 mesa e uma myflightinfo2008 tabela a partir da maior FlightInfo2007 e FlightInfo2008 mesas. O plano o tempo todo era usar a CTAS criado myflightinfo2007 e myflightinfo2008 mesas para ilustrar como você pode executar junta-Hive.
A figura mostra o resultado de uma junção interna com o myflightinfo2007 e myflightinfo2008 tabelas usando o cliente SQuirreL SQL.
Video: DB Juntando Tabelas
suportes hive equi-junções, um tipo específico de juntar-se que só usa comparações de igualdade no predicado de junção. (EM m8.FlightNum = m7.FlightNum é um exemplo de uma junção de igualdade) Outros comparadores tal como menos do que (lt;.) não são suportados. Esta restrição é apenas por causa de limitações sobre o mecanismo MapReduce subjacente. Além disso, você não pode usar OU no EM cláusula.
A figura ilustra o exemplo anterior da junção interna e outros dois tipos Hive participar. Note que você pode confirmar os resultados de uma junção interna, revendo o conteúdo do myflight2007 e myflight2008 mesas.
A figura a seguir ilustra como uma junção interna obras usando um diagrama de Venn, no caso de você não estiver familiarizado com a técnica. A idéia básica aqui é que uma junção interna retorna os registros que correspondem entre duas tabelas. Então, uma junção interna é uma ferramenta de análise perfeita para determinar que os voos são os mesmos de JFK (Nova Iorque) para ORD (Chicago), em julho de 2007 e julho de 2008.
Otimizando Hive junta é um tema quente na comunidade Hive. Para mais informações sobre técnicas de otimização atuais, consulte a página de Otimização Junte-na wiki hive.