top of page
Foto do escritorReginaldo Silva

Databricks - API - Executando um comando SQL via API

Fala dataholics, no post de hoje mais uma dica rápida, veremos como integrar nossas aplicações externas em nosso ambiente Databricks usando API.


É comum termos a necessidade de integrar alguma aplicação com nosso ambiente analítico para ler alguma informação que já foi processada e está disponível em uma tabela Delta, ha muitas maneiras de se ler uma tabela Delta e hoje vou te apresentar mais uma, em posts anteriores há mostrei como usar Azure Function sem Spark, dá uma conferida la.


Você pode integrar sua aplicação ao Databricks usando driver JDBC, como se fosse conectar a um banco de dados tradicional, você conseguirá visualizar os bancos de dados e tabelas que o seu token tiver permissão, abaixo um exemplo do meu SQL Warehouse.


Essa é uma maneira bem simples de fazer integração, mas tem outra bem dinâmica que você pode utilizar que é por meio de API.


A API SQL Statement te permite executar comandos SQL no seu Warehouse, seria como se você estivesse abrindo o SQL Query Editor e rodando queries, mas sem usar a interface gráfica.


Criaremos um app em Python que irá ler dados do nosso SQL Warehouse.


O código é bem simples, nessa primeira parte temos alguns pontos importantes.

  • Primeiro observe a importação das bibliotecas, usaremos requests, json, pandas, tabulate e matplot

  • Na primeira seta definimos a URL do Workspace e endereço da API

  • Na segunda seta o token para autenticação

  • Na terceira seta o comando SQL, um comando simples para ver o custo mensal de DBUs

  • Na última seta a requisição na API do tipo POST.

    • Detalhes para o parâmetro Wait_timeout, se minha API não responder essa query em 5 segundos a operação será cancelada.


Nesse parte temos um trecho bem importante, a criação do Dataframe Pandas, a nossa API retorna os dados em uma estrutura de JSON_ARRAY logo é necessário conhecimento em manipulação de JSON e Array para entender o formato retornado.


Nesse último trecho temos apenas a parte de visualização, na primeira seta estamos imprimindo o resultado em uma tabela formatada em um modelo mais visual do que o pandas pode entregar.

Na segunda seta estamos imprimindo um gráfico de linhas com o custo mensal.


Isso é só um exemplo do que podemos fazer, uma vez que integrado a sua aplicação você pode ler e manipular os dados com a linguagem que preferir.


Vejamos o resultado dessa execução.

Na primeira etapa estamos imprimindo na tela o status code e o JSON retornado pela API.

Sobre o JSON ele tem a seguinte estrutura abaixo, o que precisamos dele é o Array de colunas e dados.


Abaixo o resultado da minha execução:


O meu Data_Array retornou 6 itens, ou seja, 6 linhas.


O trecho de código que extrai as colunas e dados e transforma num Dataframe é esse:


Depois apresentamos essa tabela em tela de uma maneira mais visual usando a biblioteca tabulate.

E por fim um gráfico gerado pela biblioteca matplot:


Abaixo um exemplo quando sua requisição não retorna em menos de 5 segundos (Threshold configurado na requisição, pode chegar até 50 segundos), ele retorna status 200, mas, somente com o retorno do motivo da falha ou da query não ter executado, nesse caso é devido ao meu cluster SQL Warehouse estava em processo de ligar.

Essa API tem foco para requisições pequenas, ou seja, para retornar poucos dados, o retorno padrão da API é INLINE que retornar os dados na própria requisição, para retornar massas de dados maiores você pode usar o EXTERNAL_LINKS ele irá devolver um link para você baixar os dados, exemplo na requisição abaixo.

Obs: Muito cuidado com esse método para não expor seus dados em público.


Todas as requisições realizadas por API você consegue ver e monitorar no seu SQL Warehouse:


Consigo ver o tempo de execução delas, qual usuário chamou (mesmo que esteja usando um token de Service Account, irá aparecer ali), aqui temos todas as features do SQL Warehouse, podemos ver o plano de execução e estatísticas da query.

Se você abrir uma execução notara que o Query Source é da Databricks API.


Em resumo, pode ser muito útil para alguns cenários em que precisamos automatizar ou integrar aplicações ao nosso ambiente Lakehouse, aqui mostrei um exemplo simples de criação de um app em Python que faz uma query SQL através da API e manipula esses dados retornados para gerar insights.


Espero que esse conhecimento te ajude.

Fique bem e até a próxima.


Código Github:




460 visualizações0 comentário

Posts recentes

Ver tudo

Comments


Post: Blog2 Post
bottom of page