Unindo Tabelas com Hive

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. Banco 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 se chegar a um banco de dados normalizado, mas Regra 1 é que você deve acabar com um grupo de mesas. (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, as 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 em seu servidor quando você começar a juntar tabelas, e os discos ocupado geralmente resultam em tempos de resposta de usuário mais lentos . No entanto, a boa notícia é que RDBMSs e EDWs são ajustados para tornar junta-se 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 as informações que está escondido em estruturas de dados maciças é 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 # 147 pokiness # 148- da resposta do sistema.

Lembre-se que MapReduce e HDFS são otimizados para rendimento com grandes análise 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 o 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 é por isso que tipos de dados complexos, como STRUCTareia ARRAYs são fornecidos. Você pode usar esses 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 entendido 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, tais como # 147 Queryable # 148- arquivos exigem muitas vezes junta-se para análise de dados.

Aqui está uma colmeia juntar exemplo, usando tabelas de dados de voo. A listagem mostra como criar e exibir uma myflightinfo2007 e uma mesa myflightinfo2008 tabela a partir da maior FlightInfo2007 e FlightInfo2008 tabelas. 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.

image0.jpg

suportes hive equi-junções, um tipo específico de juntar-se que só usa comparações de igualdade no predicado associação. (ON m8.FlightNum = m7.FlightNum é um exemplo de uma equi-join) Outros comparadores tal como inferior a (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 tabelas.

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 ideia básica aqui é que uma junção interna retorna os registros que correspondem entre duas tabelas. Assim, uma associação interna é uma ferramenta de análise perfeita para determinar que os voos são os mesmos do JFK (Nova Iorque) para ORD (Chicago), em julho de 2007 e julho de 2008.

image1.jpg

Otimizando Hive junta é um tema quente na comunidade Hive. Para mais informações sobre técnicas de otimização atuais, consulte a página Optimization Junte-se na wiki hive.

menu