Funções definidas pelo usuário colocadas você no banco do motorista quando se trata de consultar e analisar seus dados.
No ecossistema do Couchbase, as funções definidas pelo usuário (UDFs) são reutilizáveis e parametrizáveis Consultas SQL++ que permitem modularizar as consultas e aumentar a reutilização do código, ao mesmo tempo em que oferecem mais controle sobre como uma determinada consulta interage com a lógica comercial.
Dito isso, tenho o prazer de anunciar que a versão 7.0 do Couchbase Server agora oferece suporte a funções definidas pelo usuário (UDFs) no Serviço de análise.
Confira a postagem de ontem no blog para mais informações sobre funções definidas pelo usuário na linguagem de consulta SQL++.
Funções definidas pelo usuário 101
No Couchbase Analytics, as funções definidas pelo usuário têm duas partes:
- A assinatura da função: A assinatura consiste no nome da função mais o número de parâmetros. Uma função recebe zero, um ou mais parâmetros. Cada função pertence a um universo de dados (ou Escopo na terminologia 7.0) e deve ter uma assinatura exclusiva dentro desse dataverse. Isso significa que você pode criar duas funções no mesmo dataverse que tenham o mesmo nome, mas com um número diferente de parâmetros. Como a assinatura da função é distinta (nome + número de parâmetros), isso é permitido.
- Corpo funcional: O corpo de uma função pode ser uma expressão ou uma subconsulta e pode fazer referência a conjuntos de dados ou para outras funções no mesmo dataverse ou em um dataverse diferente.
Aqui estão dois exemplos que mostram a assinatura da função - my_dataverse.GetOrders(...)
- e o corpo da função (tudo o que estiver entre chaves abaixo):
1 2 3 4 5 |
CRIAR OU SUBSTITUIR ANALÍTICA FUNÇÃO meu_dataverso.Obter pedidos(ID do cliente) { SELECIONAR o DE Pedidos AS o ONDE o.ID do cliente = ID do cliente } |
1 2 3 4 5 6 |
CRIAR OU SUBSTITUIR ANALÍTICA FUNÇÃO meu_dataverso.Obter pedidos(ID do cliente, ano) { SELECIONAR o DE Pedidos AS o ONDE o.ID do cliente = ID do cliente E o.ano = ano } |
Se o CRIAR FUNÇÃO DE ANÁLISE
não fornecer um nome de dataverse, a função será criada no dataverse ativo. Se um dataverse não for especificado, a função será criada no dataverse "Padrão".
Um dataverse pode ser fornecido por meio de um USE <>
na consulta ou por meio de uma instrução contexto_de_consulta
Parâmetro da API REST.
Histórico: Escopos e coleções no Couchbase Analytics
Antes de mostrar a você o ciclo de vida completo de um UDF do Couchbase Analytics, vamos primeiro nos atualizar sobre um contexto importante.
O diagrama A abaixo representa um exemplo de dados que poderiam ser usados por uma empresa de viagens para gerenciar reservas de companhias aéreas e hotéis.
Nessa arquitetura, temos um Bucket chamado viagens
(semelhante a um banco de dados em um banco de dados relacional), que contém um escopo chamado inventário
(semelhante a um esquema em um RDBMS) e quatro coleções denominadas companhia aérea
, aeroporto
, hotel
e rota
(semelhante a tabelas em um RDBMS). Para cada uma dessas coleções, temos quatro coleções analíticas correspondentes (também conhecidas como conjuntos de dados) e as organizamos dentro da seção travel.inventory
Escopo (também conhecido como dataverse).
Um exemplo de UDF usando o Couchbase Analytics
Para este exemplo, vamos supor que sua equipe de análise de dados precise consultar com frequência quais companhias aéreas de um determinado país voam mais rotas e quais são suas classificações percentuais.
Veja como os UDFs ajudam sua equipe a concluir essas consultas complexas.
Como gerenciar seus UDFs
A primeira etapa é criar a função definida pelo usuário no Analytics Scope (ou dataverse) designada como travel.inventory
.
Abaixo está a instrução Data Definition Language (DDL) para criar um UDF que torna sua consulta mais sucinta:
1 2 3 4 5 6 7 8 9 10 |
CRIAR OU SUBSTITUIR ANALÍTICA FUNÇÃO viagens.inventário.getAirlineRank(em_país) { SELECIONAR a.id, a.nome AS companhia aérea, contagem(r.id) AS contagem de rotas, PERCENT_RANK() SOBRE (ORDEM BY contagem(r.id)) AS `classificação` DE viagens.inventário.companhia aérea a JUNTAR viagens.inventário.rota r ON a.id = r.companhia aérea ONDE a.país = em_país GRUPO BY a.id, a.nome } |
O UDF acima usa o parâmetro em_país
como entrada para o nome do país e o usa como um filtro para a consulta. Em seguida, a consulta executa um JOIN entre o companhia aérea
e rota
Coleções e realiza agregações para cada companhia aérea a fim de:
- Contar o número de rotas de companhias aéreas
- Calcule a classificação percentual das contagens de rotas usando o
PERCENT_RANK
com a funçãoSOBRE
cláusula.
(O SOBRE
recupera um conjunto específico de linhas em relação à linha atual e executa uma agregação sobre o conjunto de linhas id
campo. Saiba mais sobre as funções de janela nesta postagem do blog.)
Como avaliar seus UDFs
Em seguida, vamos testar sua nova UDF.
A consulta a seguir determina as três principais companhias aéreas de um determinado país ("Estados Unidos", neste exemplo).
1 2 3 4 5 6 |
SELECIONAR ar.companhia aérea como Companhia aérea, REDONDA(ar.classificação*100,2) como Classificação, ar.contagem de rotas como RouteCount DE viagens.inventário.getAirlineRank("Unidos Estados") ar ORDEM BY ar.route_count desc LIMITE 3; |
O resultado da avaliação dessa consulta mostra as três principais companhias aéreas que voam com a maioria das rotas, juntamente com suas classificações percentuais:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[ { "Classificação": 100, "RouteCount": 2354, "Companhia aérea": "AMERICANO" }, { "Classificação": 96.97, "RouteCount": 2180, "Companhia aérea": "UNITED" }, { "Classificação": 93.94, "RouteCount": 1981, "Companhia aérea": "DELTA" } ] |
Como eliminar seus UDFs
Quando não precisar mais do UDF, você poderá descartá-lo usando a instrução DDL abaixo:
1 |
DROP ANALÍTICA FUNÇÃO viagens.inventário.getAirlineRank(em_país) |
Fácil, não é?
Conclusão
As funções reutilizáveis definidas pelo usuário são úteis para simplificar e modularizar o seu código e, ao mesmo tempo, proporcionar mais flexibilidade ao seu sistema. Espero que essa nova funcionalidade de UDF seja útil para seu trabalho com o Couchbase Analytics.
Gostaria muito de ouvir suas opiniões e comentários abaixo sobre o que você acha do novo recurso UDF e como o está usando. Ou inicie uma conversa na seção Fóruns do Couchbase. Aguardo ansiosamente seu contato.
Teste o Couchbase 7 hoje mesmo