sql – Arruda – Data Consulting https://modelo6.augustomello.com.br Tue, 28 Nov 2023 16:26:02 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.9 https://modelo6.augustomello.com.br/wp-content/uploads/2025/08/cropped-Logo-Arruda-Consulting-2025-Picto-1b-32x32.png sql – Arruda – Data Consulting https://modelo6.augustomello.com.br 32 32 A Importância do Comando EXPLAIN ANALYSE em Sistemas de Gerenciamento de Bancos de Dados https://modelo6.augustomello.com.br/5430-2/ https://modelo6.augustomello.com.br/5430-2/#respond Tue, 28 Nov 2023 16:26:02 +0000 https://arrudaconsulting.com.br/?p=5430 A Importância do Comando EXPLAIN ANALYSE em Sistemas de Gerenciamento de Bancos de Dados

Introdução

Dentro do universo dos sistemas de gerenciamento de bancos de dados (SGBDs), como PostgreSQL, a ferramenta EXPLAIN ANALYSE desempenha um papel crucial na otimização e eficiência das consultas SQL. Este artigo detalha o uso do EXPLAIN ANALYSE, fornecendo exemplos práticos e orientações sobre a interpretação dos resultados.

O que é EXPLAIN ANALYSE?

EXPLAIN ANALYSE é um comando SQL usado para analisar o plano de execução de consultas SQL. Ele executa a consulta e fornece estatísticas detalhadas sobre o tempo e recursos utilizados, indo além do que o EXPLAIN simples oferece.

Quando Utilizar

  1. Análise de Desempenho de Consultas
  2. Otimização de Consultas
  3. Indexação Eficaz
  4. Depuração

Exemplos de Comandos e Interpretação dos Resultados

Exemplo 1: Consulta Simples

Comando:

EXPLAIN ANALYSE SELECT * FROM clientes WHERE id = 101;

Resultado:

Seq Scan on clientes (cost=0.00..11.50 rows=1 width=240) (actual time=0.013..0.014 rows=1 loops=1) Filter: (id = 101) Rows Removed by Filter: 99 Planning Time: 0.052 ms Execution Time: 0.045 ms

Interpretação:

  • Seq Scan: Indica que foi feita uma varredura sequencial na tabela clientes.
  • Cost: Estima o custo da operação (custo inicial..custo total).
  • Rows: Número de linhas que o PostgreSQL espera processar.
  • Actual time: Tempo real de execução (início..fim).
  • Rows Removed by Filter: Quantidade de linhas descartadas pelo filtro.
  • Planning/Execution Time: Tempo de planejamento e execução da consulta.

Exemplo 2: Consulta com Join

Comando:

EXPLAIN ANALYSE SELECT * FROM pedidos JOIN clientes ON pedidos.cliente_id = clientes.id;

Resultado:

Hash Join (cost=4.27..8.31 rows=100 width=384) (actual time=0.026..0.027 rows=100 loops=1)
Hash Cond: (pedidos.cliente_id = clientes.id)
-> Seq Scan on pedidos (cost=0.00..2.00 rows=100 width=148) (actual time=0.006..0.007 rows=100 loops=1)
-> Hash (cost=2.20..2.20 rows=120 width=236) (actual time=0.012..0.012 rows=120 loops=1)
Buckets: 1024 Batches: 1 Memory Usage: 26kB
-> Seq Scan on clientes (cost=0.00..2.20 rows=120 width=236) (actual time=0.003..0.005 rows=120 loops=1)
Planning Time: 0.065 ms
Execution Time: 0.076 ms

Interpretação:

  •  Hash Join (cost=4.27..8.31 rows=100 width=384) (actual time=0.026..0.027 rows=100 loops=1)

    O PostgreSQL está realizando um Hash Join entre duas tabelas, pedidos e clientes. O cost=4.27..8.31 indica o custo estimado dessa operação, começando de 4.27 e indo até 8.31. rows=100 sugere que o otimizador espera que 100 linhas sejam retornadas, e width=384 indica o tamanho médio de cada linha em bytes. Na prática, essa operação levou de 0.026 a 0.027 milissegundos (actual time) e foi executada uma vez (loops=1), retornando 100 linhas (rows=100).O PostgreSQL juntou as tabelas pedidos e clientes rapidamente, esperando encontrar cerca de 100 linhas, o que realmente aconteceu.
  • Hash Cond: (pedidos.cliente_id = clientes.id)

    Esta é a condição do join. O PostgreSQL usou o campo cliente_id da tabela pedidos e o campo id da tabela clientes para juntar as duas tabelas.
  • Seq Scan on pedidos (cost=0.00..2.00 rows=100 width=148) (actual time=0.006..0.007 rows=100 loops=1)Aqui, o PostgreSQL fez uma varredura sequencial (Seq Scan) na tabela pedidos. Estimou um custo de 0.00 a 2.00, esperando encontrar 100 linhas (rows=100) com um tamanho médio de linha de 148 bytes (width=148). Na prática, essa varredura levou de 0.006 a 0.007 milissegundos e encontrou 100 linhas.
  • Hash (cost=2.20..2.20 rows=120 width=236) (actual time=0.012..0.012 rows=120 loops=1)Este processo levou exatamente 0.012 milissegundos (actual time) e foi realizado uma vez (loops=1), processando 120 linhas (rows=120) como previsto.
  • Buckets: 1024 Batches: 1 Memory Usage: 26kBEstes detalhes referem-se à operação de hash mencionada acima.
  • Buckets: 1024: indica o número de compartimentos utilizados na estrutura de hash.
  • Batches: 1 significa que a operação de hash foi realizada em um único lote.
  • Memory Usage: 26kB: mostra a quantidade de memória utilizada para a operação de hash.
  • Planning Time: 0.065 msEste é o tempo que o PostgreSQL levou para planejar a execução da consulta. Neste caso, foram 0.065 milissegundos.
  • Execution Time: 0.076 msEste é o tempo total que o PostgreSQL levou para executar a consulta, incluindo o join e as varreduras nas tabelas. O tempo foi de 0.076 milissegundos.

Melhores Práticas

  • Use em ambiente de testes.
  • Compare os planos de execução antes e depois das otimizações.
  • Utilize como forma de definir melhor estratégia para suas consultas, definindo pela melhor performance.
  • Realize análises periódicas.

Conclusão

O EXPLAIN ANALYSE é essencial para a otimização de consultas em SGBDs. A compreensão dos resultados pode levar a melhorias significativas no desempenho, tornando-se uma ferramenta valiosa para profissionais da área de dados.

]]>
https://modelo6.augustomello.com.br/5430-2/feed/ 0
PandaSQL: Como usar SQL em Dataframes do Pandas https://modelo6.augustomello.com.br/pandasql-como-usar-sql-em-dataframes-do-pandas/ https://modelo6.augustomello.com.br/pandasql-como-usar-sql-em-dataframes-do-pandas/#respond Tue, 02 May 2023 13:39:21 +0000 https://arrudaconsulting.com.br/?p=5247 Pandas é uma das bibliotecas mais populares do Python para análise de dados. Ele oferece muitas funções para manipular, visualizar e extrair informações de seus dados. Porém, há momentos em que os usuários precisam de recursos adicionais para manipular dados com maior precisão e rapidez. É aí que entra o pandasql, uma ferramenta que permite usar SQL no pandas.

Pandasql é uma biblioteca Python que permite que os usuários escrevam consultas SQL em pandas. Ele usa SQLite como backend, o que significa que as consultas são executadas em memória. Isso é especialmente útil para usuários que estão acostumados a trabalhar com SQL e querem estender suas habilidades para o mundo do pandas.

Instalando pandasql

Antes de começar a usar o pandasql, você precisa instalá-lo. Você pode instalar o pandasql usando pip:

pip install pandasql
pip install sqlalchemy==1.4.46

Exemplos de uso

Para ilustrar como usar o pandasql, vamos usar um conjunto de dados simples. Imagine que temos um conjunto de dados com informações sobre filmes, incluindo o título do filme, a duração e a classificação. Vamos usar pandas para criar um DataFrame com essas informações:

import pandas as pd

data = { 'title': ['The Shawshank Redemption', 'The Godfather', 'The Dark Knight', 'Schindler\'s List', 'Forrest Gump']
, 'duration': [142, 175, 152, 195, 142]
, 'rating': ['9.3', '9.2', '9.0', '8.9', '8.8'] }

movies = pd.DataFrame(data)

Exemplo 1: Selecionando dados com pandasql (select)

Agora que temos um DataFrame, podemos usar pandasql para selecionar dados com base em uma consulta SQL. Vamos começar selecionando todos os filmes com duração superior a 150 minutos:

from pandasql import sqldf
query = ''' SELECT title, duration FROM movies WHERE duration > 150 '''

result = sqldf(query, locals())
print(result)

Este código retornará um DataFrame com os títulos e as durações dos filmes que têm mais de 150 minutos:

                title  duration
0        The Godfather       175
1     The Dark Knight       152
2    Schindler's List       195

Exemplo 2: Ordenando dados com pandasql (order by)

Podemos usar pandasql para classificar dados também. Vamos classificar os filmes por duração em ordem decrescente:

query = ''' SELECT title, duration FROM movies ORDER BY duration DESC '''
result = sqldf(query, locals())
print(result)

Este código retornará um DataFrame com os títulos e as durações dos filmes ordenados por duração em ordem decrescente:

                      title   duration
0           Schindler's List  195
1             The Godfather   175
2            The Dark Knight  152
3  The Shawshank Redemption   142
4              Forrest Gump   142

 

Exemplo 3: Agrupando dados com pandasql (group by)

Podemos usar pandasql para agrupar dados também. Vamos agrupar os filmes por classificação e calcular a média das durações:

query = ''' SELECT rating, AVG(duration) as avg_duration FROM movies GROUP BY rating ''' 
result = sqldf(query, locals()) 
print(result)

Este código retornará um DataFrame com as classificações dos filmes e as médias das durações dos filmes para cada classificação:

  rating  avg_duration
0    8.8         142.0
1    8.9         195.0
2    9.0         152.0
3    9.2         175.0
4    9.3         142.0

Exemplo 4: Unindo dados com pandasql (joins)

Podemos usar pandasql para unir dados de diferentes fontes. Vamos criar outro DataFrame com informações sobre diretores e usar pandasql para unir as informações de diretores com as informações de filmes:

data = { 'title': ['The Shawshank Redemption', 'The Godfather', 'The Dark Knight', 'Schindler\'s List', 'Forrest Gump'], 'director': ['Frank Darabont', 'Francis Ford Coppola', 'Christopher Nolan', 'Steven Spielberg', 'Robert Zemeckis'] }

directors = pd.DataFrame(data)

query = ''' SELECT title, director, duration, rating 
FROM movies 
JOIN directors ON movies.title = directors.title '''

result = sqldf(query, locals())
print(result)

Este código retornará um DataFrame com os títulos dos filmes, diretores, durações e classificações dos filmes, unindo informações de duas fontes:

                title              director  duration rating
0        The Godfather  Francis Ford Coppola       175    9.2
1     The Dark Knight     Christopher Nolan       152    9.0
2    Schindler's List     Steven Spielberg       195    8.9
3  The Shawshank Redemption       Frank Darabont       142    9.3
4          Forrest Gump     Robert Zemeckis       142    8.8

Conclusão

Pandasql é uma ferramenta poderosa para usuários do pandas que querem usar SQL para manipular seus dados. Ele oferece muitas funções para selecionar, classificar, agrupar e unir dados de forma eficiente. Esperamos que esses exemplos tenham sido úteis para você começar a usar o pandasql em seus próprios projetos de análise de dados.

 

Quer aprender mais…
Então participe da nossa live que será no dia 09/05/2023, para se inscrever só clicar no link abaixo:

Live – Python + GCP

Muito Obrigado e nos vemos na live!!

]]>
https://modelo6.augustomello.com.br/pandasql-como-usar-sql-em-dataframes-do-pandas/feed/ 0
Criando um Banco de dados na Google Cloud https://modelo6.augustomello.com.br/criando-um-banco-de-dados-na-google-cloud/ https://modelo6.augustomello.com.br/criando-um-banco-de-dados-na-google-cloud/#respond Mon, 11 Oct 2021 12:17:36 +0000 https://arrudaconsulting.com.br/?p=4459 Criando Banco de Dados na Google Cloud

Olá!

Tudo bem contigo?

Antes de mais nada Talvez você já tenha conectado em algum banco de dados que esteja na nuvem, certo? Porém se te pedirem para CRIAR um banco de dados na nuvem você saberia fazer?

Se a resposta for não, fique tranquilo que esse artigo irá te ensinar como criar um banco de dados na GCP, além disso iremos mostrar como acessar esse banco.

Primeiramente para criar um banco de dados, independente na nuvem não é só clicar em criar e pronto, sempre tem alguma regra de liberação para você conseguir conectar neste banco.

Nesse sentido Iremos criar um banco de dados na Google Cloud Plataform. Para Criar banco de dados relacionais usamos O serviço Cloud SQL e temos 3 opções:

 

  • Mysql
  • PostgreSQL
  • SQL Server

 

 

Agora Iremos clicar em Escolher Mysql, para criar uma instância de banco de dados.

 

 

No id da Instância: mysql_test.

Senha: Irá cadastrar.

E iremos escolher a versão 5.6 para esse nosso teste.

A nossa instancia ela vem com uma configuração padrão de 4CPU e 26GB de RAM, para o nosso teste podemos utilizar uma configuração mais simples mesmo.

Embaixo de Personalizar sua Instância só clicar em Mostrar Opções de Configuração.

Agora sim, teremos uma CPU com 3,75GB de RAM para o nosso teste.

Armazenamento: Podemos manter os 100GB mesmo.

Além Disso Um detalhe importante é em conexões, aonde informamos qual IP que terá acesso ao Banco de dados que estamos criando.

Utilizando o IP: 0.0.0.0/0 Qualquer Pessoa irá conseguir acessar o banco de dados desde que o usuário e senha estejam corretor.

Caso quiser fazer o teste com o seu IP Público basta acessar o seguinte link: Check your IP address | MyIP.com

E copiar o seu IP público e utilizar ao invés do IP na imagem abaixo.

A configuração é muito importante, sem ela você nunca irá acessar o banco fora da Google Cloud, ou seja através de algum computador pessoal ou da sua empresa.

Agora é só clicar em criar Instância, e esperar alguns minutos até que o seu banco de dados esteja disponível.

Imediatamente O Endereço do IP Publico é o IP do banco de dados.

 

Em seguida iremos tentar acessar esse banco de dados.

Agora Vamos utilizar o HeidSQL para conectar no banco de dados, da mesma forma você pode utilizar a IDE que esta acostumado a utilizar como Workbench, Dbeaver.

User: root

Senha: Senha cadastrada na hora de criar a instancia.

finalmente estamos conectado no Mysql que esta dentro da Google Cloud Plataform.

 

 

Então é dessa forma que criamos um banco de dados na Google Cloud e assim como acessamos esse banco do nosso computador.

 

Curso Completo de Google Cloud

E se você quiser aprender tudo sobre Integração de Dados no Google Cloud, Confira nosso Treinamento de GCP que acontece no dia 12/03 onde iremos ensinar tudo desde como Criar até como Entregar um projeto no Google Cloud Platform

Clique no Link e Faça sua inscrição no treinamento de Google Cloud Platform – (Inscrições Abertas)

Muito Obrigado!

 

]]>
https://modelo6.augustomello.com.br/criando-um-banco-de-dados-na-google-cloud/feed/ 0