Janelas em HiveQL
O conceito de janelas, introduzido no SQL: 2003, permite que o programador SQL para criar um quadro a partir dos dados contra o qual se agregam e outras funções de janela pode operar. HiveQL agora suporta janelas acordo com o padrão SQL. Exemplos são bastante útil quando explicando janelas e as funções de agregação.
atrasos Partida vêm com o território ao voar é o seu modo escolhido de viagens. Ele vem como nenhuma surpresa, então, que os dados de voo RITA-compilados inclui esta informação. "O que exatamente é o atraso médio de voo por dia"? A consulta na listagem a seguir produz a média de atraso da partida por dia em 2008.
(UMA) colmeia (flightdata)> Create View avgdepdelay AS> DayOfWeek SELECT, AVG (DepDelay) FROM FlightInfo2008 GROUP BY DayOfWeek-OKTime tomadas: 0,121 segundos(B) colmeia (flightdata)> SELECT * FROM avgdepdelay -... OK1 10,2699902444594732 8,976897120687353 8,2897610536587284 9,7728971778367025 12,1580363878696566 8,6456809049036147 11.568973392595312Time tomadas: 18,6 segundos, obtida: 7 row (s)
TGIF, ou "Graças a Deus é sexta-feira," não se aplica a todos. Não deve ser nenhuma surpresa que sexta-feira - Dia 5 sob os resultados do Passo (B) - teve o maior número de atrasos.
De qualquer forma, sobre essa consulta no Passo (A): de Hive Data Definition Language (DDL) também inclui o CREATE VIEW declaração, que pode ser bastante útil. Em Hive, vista permitir uma consulta para ser salvo, mas os dados não são armazenados como com a Tabela Criar como Select (CTAS) comunicado.
Quando uma exibição é referenciada em HiveQL, Hive executa a consulta e, em seguida, utiliza os resultados, que poderiam ser parte de uma consulta mais ampla. Isto pode ser muito útil para simplificar consultas complexas e dividi-los em componentes lógicos. Além disso, observe a cláusula GROUP BY, que reúne todos os dias por semana e permite que o AVG função de agregação para fornecer uma resposta consolidada por dia.
Esta informação é útil, é claro, mas o que se você quiser ver alguns números individuais por dia? Consolidar os dados com GROUP BY, e você tem a resposta que você está procurando, embora você perdeu informações também. Resolver este problema de perda de informações é onde janelas torna-se bastante útil.
Aqui está outra pergunta sobre os dados do voo RITA 2008, que Apache Hive pode responder: "Qual é o primeiro voo entre o aeroporto de X e Y"? Suponha-se que, para além desta informação, você quer saber sobre voos subsequentes, apenas no caso de você não é uma "pessoa da manhã." Bem, este é um trabalho para o janelamento no HiveQL! A listagem a seguir fornece-lhe uma consulta que responde a estas perguntas.
(UMA) colmeia (flightdata)> f08.Month SELECT, f08.DayOfMonth, cr.description, f08.Origin, f08.Dest, f08.FlightNum, f08.DepTime, MIN (f08.DepTime) OVER (PARTITION BY ORDER BY f08.DayOfMonth f08 .DepTime) FROM f08 flightinfo2008 Cadastre Carriers cr ONf08.UniqueCarrier = cr.codeWHERE f08.Origin = 'JFK' E f08.Dest = 'ORD' ANDf08.Month = 1 AND f08.DepTime! = 0 -... OK1 1 JetBlue Airways JFK ORD 903 641 6411 1 American Airlines Inc. JFK ORD 1323 833 6411 1 JetBlue Airways JFK ORD 907 929 6411 1 Comair Inc. JFK ORD 5083 945 6411 1 Comair Inc. JFK ORD 5634 1215 6411 1 JetBlue Airways JFK ORD 915 1352 6411 1 American Airlines Inc. JFK ORD 1323 833 6411 1 JetBlue Airways JFK ORD 907 929 6411 1 Comair Inc. JFK ORD 5083 945 6411 1 Comair Inc. JFK ORD 5634 1215 6411 1 JetBlue Airways JFK ORD 915 1352 6411 1 American Airlines Inc. JFK ORD 1815 1610 6411 1 JetBlue Airways JFK ORD 917 1735 6411 1 Comair Inc. JFK ORD 5469 1749 6411 1 Comair Inc. JFK ORD 5492 2000 6411 1 JetBlue Airways JFK ORD 919 2102 6411 31 JetBlue Airways JFK ORD 919 48 481 31 JetBlue Airways JFK ORD 903 635 481 31 Comair Inc. JFK ORD 5447 650 481 31 American Airlines Inc. JFK ORD 1323 840 481 31 JetBlue Airways JFK ORD 907 921 481 31 JetBlue Airways JFK ORD 917 1859 48
No passo (a), o GROUP BY cláusula foi substituído com o SOBRE cláusula de onde você especificar o PARTITION ou janela sobre a qual você deseja que o MIN função de agregação de operar. Também está incluído o ORDENAR POR cláusula de modo que você pode ver esses voos subsequentes após a primeira.
Como você pode ver a partir da listagem, em 31 de janeiro, a JetBlue tem um bom vôo, cedo às 00:48 -OPT para uma posterior, às 6h35 questões madrugador de lado, note que você tem mantido a informação em a saída de consulta que teria sido perdido se você tivesse escolhido usar um GROUP BY cláusula novamente.
Esta capacidade só faz o janelamento um recurso poderoso, e não há mais. Junto com janelas na liberação Hive 0,11, a comunidade forneceu algumas de análise funções que podem ser utilizadas em conjunto com janelas. Também à sua disposição são as seguintes funções: CLASSIFICAÇÃO, ROW_NUMBER, DENSE_RANK, CUME_DIST, PERCENT_RANK, e NTILE.
Finalmente, não perca o uso de JUNTE-SE: É uma vida real, exemplo prático de uma junção interna em que você se juntar ao FlightInfo2008 com a tabela Carriers tabela para obter o nome da companhia aérea - em vez do código enigmática encontrada no FlightInfo2008 mesa.