SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
COMO MELHOREI A PERFORMANCE
DE CONSULTA NA SDK DO
BIGQUERY EM 50X
CASE SOBRE PROTOCOLOS
E FORMATOS DE DADOS
Alvaro Viebrantz
DevRel Software Engineer no Google - Data Analytics and AI SDKs - BigQuery
aviebrantz.com
@alvaroviebrantz
DISCLAIMER #1
MODELOS GENERATIVOS NÃO FORAM
USADOS PARA ESSA PALESTRA
O que vamos ver hoje ?
O que é o
BigQuery ?
Cloud
SDKs
Case
Prático
O que é o BigQuery
Resumão
• Banco de dados totalmente gerenciado/serverless
• Escala de acordo com sua demanda
• Interface SQL
• Mesmas primitivas de bancos relacionais
• Tables, Views, Functions, etc
• Preço baseado em uso
• Armazenamento
• Consulta
BANCO SERVERLESS ?
DEMO #1
Wiki Data
Dados abertos da Wikipedia mais estruturados
• Big Data ?
• Pageviews em 2020
• 2.13 TB
• 52 bilhões de linhas
• Wikidata
• 1.44TB
• 87 milhões de linhas
2 TERABYTES ?
NÃO VAI SAIR CARO ?
Várias coisas são grátis
Dá pra fazer bastante coisa
• Carregar, Copiar e Exportar Dados
• Operações administrativas
• Re-calcular partições e clustering
• Cota Grátis
• 10 GB de Armazenamento Long Term e Active grátis.
• 1TB lido por Mês
• Não precisa de cartão pra começar
• Isso no modelo On-Demand.
A consulta
Usando datasets públicos no BigQuery
MARVEL
VS
DC
Buscando personagens
Filtros por super heróis e universos
fi
ccionais
Pageviews em 2022 por personagem
Top 20 visitados na Wikipedia
Data Lake
“Data has gravity”
• Planilhas do Google Sheets
• Arquivos no Google Cloud Storage
• CSV e JSON
• Avro, ORC, Parquet, Iceberg - BigData
• BigTable - HBase gerenciado pelo Google
• Spanner - Global Scale SQL Database
• Object Store - AWS S3 e Azure Blob Store (BigQuery Omni)
• De graça. Cobrança pelo infra usada pelo BigQuery
Throughput vs Latência
Não é voltado para baixa latência e como banco transacional (OLTP)
• Operações de consulta demoram na casa de segundos, não millisegundos
• Inaceitável para um sistema transacional
• Séries temporais
• Telemetria e Dados históricos
• Data warehouse
• Preferencialmente usar de forma Imutável / Append Only
• Mas também tem suporte para DML - Update/Delete
• Logs distribuido
Por baixo dos panos
Como ele funciona ?
• Baseado em vários projetos no Google.
• Borg - Pai do Kubernetes
• Colossus - Sistema de Arquivos
Distribuidos
• Jupiter - Rede na escala de Petabytes
• Capacitor - Engine de
armazenamento colunar
• Dremel - Motor de Execução
Evolução do Map Reduce
• 🌟 White Papers disponíveis 🌟
Cloud SDKs
Data Analytics and AI SDKs
BigQuery SDKs
Como a grande maioria dos usuários interagem com o BigQuery
• Core languages
• Java, Go, Python e NodeJS
• Core autogerados (repo googleapis)
• Camada escrita a mão para facilitar uso
• Python é a mais baixada - Data scientists 🤩
• Também disponível em outras linguagens
• C#, Ruby, PHP
• Grandes empresas utilizando. Twitter, Spotify, New York Times,
stackshare.io/google-bigquery
Demo #2
PyPi Downloads
Downloads de pacotes do PyPi
Estatísticas do pacote google-cloud-bigquery
packaging.python.org/en/latest/guides/analyzing-pypi-package-downloads/
Data Analytics and AI SDKs
Ecossistema envolta do produto que deve ser mantido
• Temos que manter não só as SDKs, mas produtos próximos disso.
• ORM
• SQL Alchemy
• Data Analyses
• Pandas, Spark, Arrow, Jupyter Notebooks
• Big Data
• Data
fl
ow, Apache Beam, Spark
GERAM POR MÊS REQUISIÇÕES
NA CASA DO TRILHÃO‼
NO BIGQUERY
ATÉ AGORA TÁ TUDO RÁPIDO
(???)
Problemas de performance ao baixar
grande quantidade de dados
Caminho feliz para consultas no BigQuery
Muita coisa acontece sem o usuário ver
1. Um Job é criado para execução
1. Esse job pode ser do tipo Query
2. Jobs tem como con
fi
guração uma tabela de destino
• Pode ser uma tabela criada anteriormente
• Ou uma temporária criada automaticamente
2. Espera o Job
fi
nalizar
• Pooling para ver se terminou de rodar
3. Download dos resultados de um Job
Caminho feliz para consultas no BigQuery
Muita coisa acontece sem o usuário ver
• Atualmente temos 3 endpoints que podem ser usados para consultar dados
• tabledata.List
• jobs.Query
• jobs.getQueryResults
• Caminho mais rápido
• Internamente faz um jobs.insert e retorna resultados se roda rápido o
bastante
Todos parte da BigQuery REST API
Onde mora o problema
Esses endpoint REST tem um design não ideal para grande download de dados
• Baixar conjuntos de dados grandes pode levar bastante tempo
• Trabalho extra no backend para serializar/deserializar dados em JSON
• Lembrando que por baixo dos panos o BigQuery é um engine columnar
• Paginação sequenciais usando page tokens
• Sem muitos detalhes mas page token são mais performáticos que o
ff
set based
• Mas nesse caso especi
fi
co atrapalha bastante
Onde mora o problema
Esses endpoint REST tem um design não ideal para grande download de dados
• Exemplo
• Tabela usa_1910_current do dataset “USA Names” ~6M linhas - 185MB
BigQuery Storage Read/Write API
Vamos focar na Storage Read API
• APIs com performance alta tanto para leitura como escrita
• API com design mais moderno
• Lembrando que o BigQuery é um projeto de 2010
• Não são voltadas para administração do BigQuery
• Funcionam em cima de um único recurso do BQ - Tables
• Formatos de dados
• Mais focados em BigData
• Protocol bu
ff
ers para escrita mais compacta
Comparativo
BigQuery REST API VS Storage Read API
BigQuery REST API BigQuery Storage API
Transport/Protocol HTTP HTTP2/gRPC ✅
Media Type Plain Text Binary ✅
Serialization JSON Arrow/Avro ✅
Data Access
Mechanism
Sequential Pagination
( using page token )
Parallel gRPC streams ✅
Client Library Used google.golang.org/api/bigquery/v2 cloud.google.com/go/bigquery/storage
gRPC
Framework de alta performance de Remote Procedure Call
• Utiliza HTTP/2 como transporte
• Comunicação bi-direcional e persistente entre client e server
• Construído em cima do Protocol Bu
ff
ers
• Formato binário para transferência de dados
• Rápido e baixo overhead
• IDL ( Interface description language ) para de
fi
nir mensagens
• Single Source of Truth
• Type-safe
• Geradores de código para multiplas linguagens e plataformas
grpc.io
Apache Arrow
in-memory Analytics
• Conjunto de tecnologias in-memory para processamento de dados
voltado a BigData sem serialização
• Formato Columnar in-memory independente de linguagem
• Zero-copy de memória e técnicas para mover dados entre processos (IPC)
• Suporte a leitura e escrita de formatos de arquivos
• CSV, Avro, ORC e Parquet. Feather (Arrow
fi
le)
• Outros projetos interessantes
• Arrow Database Connectivity (ADBC), Flight RPC e FlightSQL
Projetos usando Apache Arrow
Interessante
fi
car de olho. Ecossistema muito rico.
• DataFrames
• Pandas, pola.rs
• Databases e Data Platform
• DuckDB, In
fl
uxDB IOx, Dremio, ClickHouse
• AI
• ray.io, Petastorm
• Ferramentas de Visualização
• Perpective, Falcon
arrow.apache.org/powered_by/
Como fazer a integração
Requisitos para usar na SDK em Go
• Permitir que usuário baixem dados com a BigQuery Storage API
• Manter os mesmo benefícios da SDK atual
• Converte consultas em structs de
fi
nidas pelo usuário
• Usar Arrow como formato de dados por ser mais e
fi
ciente
Avro não foi avaliado por conta dos ganhos não serem tão signi
fi
cativos
Consultas com a BigQuery Storage Read API
Ainda tem muita coisa acontece sem o usuário ver
1. Mesmo
fl
uxo de antes: Query -> Job -> Destination Table
2. Abrir uma ReadSession
3. Converter TableSchema em Arrow Schema
4. Ler ReadStreams da ReadSession em paralelo
• Caso especial em consultas ordenadas
5. Converter Arrow Batches em User De
fi
ned Structs
• Utiliza o format IPC do Apache Arrow
github.com/googleapis/google-cloud-go/pull/6822
Demo #3
Exemplo de uso
Lendo query em uma user de
fi
ned struct
Exemplo de uso da nova API
Storage API precisa ser habilitada, o resto permanece o mesmo
Benchmarks
Benchmarks
Resultados com dataset USA Names
• Tabela usa_1910_current
• 6,311,504 rows and 185.85 MB.
• Consultas
• Filtro por state = CA (218,192 rows)
• Filtro por state = FL (400,762 rows)
• Full table scan (6,311,504 rows)
• Full table scan with ordered results ( worst case scenario )
Benchmarks - Runtime
4.5x to 55x faster
Benchmarks - Allocation
~50% menos memória
Benchmarks - Número de Alocações
~30% menos alocações
Protocolos e formatos de dados
podem fazer muita diferença.
OBRIGADO!
AVIEBRANTZ.COM
Alvaro Viebrantz
DevRel Software Engineer no Google - Data Analytics and AI SDKs - BigQuery
aviebrantz.com
@alvaroviebrantz

Mais conteúdo relacionado

Semelhante a BigQuery Performance Improvements Storage API

Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google CloudAlvaro Viebrantz
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAnitaibezerra
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBAlan Glei
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescerGuilherme
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATALeonardo Dias
 
Integração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaIntegração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaLeocadio Tiné
 
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na PráticaAzure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na PráticaRenato Groff
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Renato Groffe
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureFabrício Lopes Sanchez
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 

Semelhante a BigQuery Performance Improvements Storage API (20)

Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google Cloud
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
 
Big Data
Big DataBig Data
Big Data
 
Meetup Tivir - Big Data Clusters
Meetup Tivir - Big Data ClustersMeetup Tivir - Big Data Clusters
Meetup Tivir - Big Data Clusters
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDB
 
Desafio de crescer
Desafio de crescerDesafio de crescer
Desafio de crescer
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATA
 
Integração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaIntegração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágica
 
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na PráticaAzure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
Azure + Desenvolvimento Web | Minicurso Gratuito - Azure na Prática
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 

Mais de Alvaro Viebrantz

End to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfEnd to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfAlvaro Viebrantz
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Prototipação em hackathons
Prototipação em hackathonsPrototipação em hackathons
Prototipação em hackathonsAlvaro Viebrantz
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and GoAlvaro Viebrantz
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine LearningAlvaro Viebrantz
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?Alvaro Viebrantz
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAlvaro Viebrantz
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudAlvaro Viebrantz
 
Edge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudEdge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudAlvaro Viebrantz
 
Iniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudIniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudAlvaro Viebrantz
 
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloConstruindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloAlvaro Viebrantz
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudAlvaro Viebrantz
 
Construindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTConstruindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTAlvaro Viebrantz
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoAlvaro Viebrantz
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudAlvaro Viebrantz
 
Soluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseSoluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseAlvaro Viebrantz
 
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Alvaro Viebrantz
 
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018Alvaro Viebrantz
 
Arquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google CloudArquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google CloudAlvaro Viebrantz
 
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligente
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligenteInternet das coisas - Conectando seus dispositivos à nuvem de forma inteligente
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligenteAlvaro Viebrantz
 

Mais de Alvaro Viebrantz (20)

End to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfEnd to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdf
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Prototipação em hackathons
Prototipação em hackathonsPrototipação em hackathons
Prototipação em hackathons
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and Go
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine Learning
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google Cloud
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google Cloud
 
Edge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudEdge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google Cloud
 
Iniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudIniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google Cloud
 
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloConstruindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google Cloud
 
Construindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTConstruindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoT
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente Embarcado
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google Cloud
 
Soluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseSoluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e Firebase
 
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
 
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018
Codelab - Google Cloud IoT Core e MongooseOS - I/O Extended Cuiabá 2018
 
Arquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google CloudArquitetura de Internet das Coisas usando Google Cloud
Arquitetura de Internet das Coisas usando Google Cloud
 
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligente
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligenteInternet das coisas - Conectando seus dispositivos à nuvem de forma inteligente
Internet das coisas - Conectando seus dispositivos à nuvem de forma inteligente
 

BigQuery Performance Improvements Storage API

  • 1. COMO MELHOREI A PERFORMANCE DE CONSULTA NA SDK DO BIGQUERY EM 50X CASE SOBRE PROTOCOLOS E FORMATOS DE DADOS Alvaro Viebrantz DevRel Software Engineer no Google - Data Analytics and AI SDKs - BigQuery aviebrantz.com @alvaroviebrantz
  • 2. DISCLAIMER #1 MODELOS GENERATIVOS NÃO FORAM USADOS PARA ESSA PALESTRA
  • 3. O que vamos ver hoje ? O que é o BigQuery ? Cloud SDKs Case Prático
  • 4.
  • 5. O que é o BigQuery Resumão • Banco de dados totalmente gerenciado/serverless • Escala de acordo com sua demanda • Interface SQL • Mesmas primitivas de bancos relacionais • Tables, Views, Functions, etc • Preço baseado em uso • Armazenamento • Consulta
  • 8.
  • 9. Wiki Data Dados abertos da Wikipedia mais estruturados • Big Data ? • Pageviews em 2020 • 2.13 TB • 52 bilhões de linhas • Wikidata • 1.44TB • 87 milhões de linhas
  • 10. 2 TERABYTES ? NÃO VAI SAIR CARO ?
  • 11. Várias coisas são grátis Dá pra fazer bastante coisa • Carregar, Copiar e Exportar Dados • Operações administrativas • Re-calcular partições e clustering • Cota Grátis • 10 GB de Armazenamento Long Term e Active grátis. • 1TB lido por Mês • Não precisa de cartão pra começar • Isso no modelo On-Demand.
  • 12. A consulta Usando datasets públicos no BigQuery
  • 14. Buscando personagens Filtros por super heróis e universos fi ccionais
  • 15. Pageviews em 2022 por personagem Top 20 visitados na Wikipedia
  • 16. Data Lake “Data has gravity” • Planilhas do Google Sheets • Arquivos no Google Cloud Storage • CSV e JSON • Avro, ORC, Parquet, Iceberg - BigData • BigTable - HBase gerenciado pelo Google • Spanner - Global Scale SQL Database • Object Store - AWS S3 e Azure Blob Store (BigQuery Omni) • De graça. Cobrança pelo infra usada pelo BigQuery
  • 17. Throughput vs Latência Não é voltado para baixa latência e como banco transacional (OLTP) • Operações de consulta demoram na casa de segundos, não millisegundos • Inaceitável para um sistema transacional • Séries temporais • Telemetria e Dados históricos • Data warehouse • Preferencialmente usar de forma Imutável / Append Only • Mas também tem suporte para DML - Update/Delete • Logs distribuido
  • 18. Por baixo dos panos Como ele funciona ? • Baseado em vários projetos no Google. • Borg - Pai do Kubernetes • Colossus - Sistema de Arquivos Distribuidos • Jupiter - Rede na escala de Petabytes • Capacitor - Engine de armazenamento colunar • Dremel - Motor de Execução Evolução do Map Reduce • 🌟 White Papers disponíveis 🌟
  • 20. BigQuery SDKs Como a grande maioria dos usuários interagem com o BigQuery • Core languages • Java, Go, Python e NodeJS • Core autogerados (repo googleapis) • Camada escrita a mão para facilitar uso • Python é a mais baixada - Data scientists 🤩 • Também disponível em outras linguagens • C#, Ruby, PHP • Grandes empresas utilizando. Twitter, Spotify, New York Times, stackshare.io/google-bigquery
  • 22. Downloads de pacotes do PyPi Estatísticas do pacote google-cloud-bigquery packaging.python.org/en/latest/guides/analyzing-pypi-package-downloads/
  • 23. Data Analytics and AI SDKs Ecossistema envolta do produto que deve ser mantido • Temos que manter não só as SDKs, mas produtos próximos disso. • ORM • SQL Alchemy • Data Analyses • Pandas, Spark, Arrow, Jupyter Notebooks • Big Data • Data fl ow, Apache Beam, Spark
  • 24. GERAM POR MÊS REQUISIÇÕES NA CASA DO TRILHÃO‼ NO BIGQUERY
  • 25. ATÉ AGORA TÁ TUDO RÁPIDO (???)
  • 26. Problemas de performance ao baixar grande quantidade de dados
  • 27. Caminho feliz para consultas no BigQuery Muita coisa acontece sem o usuário ver 1. Um Job é criado para execução 1. Esse job pode ser do tipo Query 2. Jobs tem como con fi guração uma tabela de destino • Pode ser uma tabela criada anteriormente • Ou uma temporária criada automaticamente 2. Espera o Job fi nalizar • Pooling para ver se terminou de rodar 3. Download dos resultados de um Job
  • 28. Caminho feliz para consultas no BigQuery Muita coisa acontece sem o usuário ver • Atualmente temos 3 endpoints que podem ser usados para consultar dados • tabledata.List • jobs.Query • jobs.getQueryResults • Caminho mais rápido • Internamente faz um jobs.insert e retorna resultados se roda rápido o bastante Todos parte da BigQuery REST API
  • 29. Onde mora o problema Esses endpoint REST tem um design não ideal para grande download de dados • Baixar conjuntos de dados grandes pode levar bastante tempo • Trabalho extra no backend para serializar/deserializar dados em JSON • Lembrando que por baixo dos panos o BigQuery é um engine columnar • Paginação sequenciais usando page tokens • Sem muitos detalhes mas page token são mais performáticos que o ff set based • Mas nesse caso especi fi co atrapalha bastante
  • 30. Onde mora o problema Esses endpoint REST tem um design não ideal para grande download de dados • Exemplo • Tabela usa_1910_current do dataset “USA Names” ~6M linhas - 185MB
  • 31.
  • 32. BigQuery Storage Read/Write API Vamos focar na Storage Read API • APIs com performance alta tanto para leitura como escrita • API com design mais moderno • Lembrando que o BigQuery é um projeto de 2010 • Não são voltadas para administração do BigQuery • Funcionam em cima de um único recurso do BQ - Tables • Formatos de dados • Mais focados em BigData • Protocol bu ff ers para escrita mais compacta
  • 33. Comparativo BigQuery REST API VS Storage Read API BigQuery REST API BigQuery Storage API Transport/Protocol HTTP HTTP2/gRPC ✅ Media Type Plain Text Binary ✅ Serialization JSON Arrow/Avro ✅ Data Access Mechanism Sequential Pagination ( using page token ) Parallel gRPC streams ✅ Client Library Used google.golang.org/api/bigquery/v2 cloud.google.com/go/bigquery/storage
  • 34. gRPC Framework de alta performance de Remote Procedure Call • Utiliza HTTP/2 como transporte • Comunicação bi-direcional e persistente entre client e server • Construído em cima do Protocol Bu ff ers • Formato binário para transferência de dados • Rápido e baixo overhead • IDL ( Interface description language ) para de fi nir mensagens • Single Source of Truth • Type-safe • Geradores de código para multiplas linguagens e plataformas grpc.io
  • 35. Apache Arrow in-memory Analytics • Conjunto de tecnologias in-memory para processamento de dados voltado a BigData sem serialização • Formato Columnar in-memory independente de linguagem • Zero-copy de memória e técnicas para mover dados entre processos (IPC) • Suporte a leitura e escrita de formatos de arquivos • CSV, Avro, ORC e Parquet. Feather (Arrow fi le) • Outros projetos interessantes • Arrow Database Connectivity (ADBC), Flight RPC e FlightSQL
  • 36. Projetos usando Apache Arrow Interessante fi car de olho. Ecossistema muito rico. • DataFrames • Pandas, pola.rs • Databases e Data Platform • DuckDB, In fl uxDB IOx, Dremio, ClickHouse • AI • ray.io, Petastorm • Ferramentas de Visualização • Perpective, Falcon arrow.apache.org/powered_by/
  • 37. Como fazer a integração Requisitos para usar na SDK em Go • Permitir que usuário baixem dados com a BigQuery Storage API • Manter os mesmo benefícios da SDK atual • Converte consultas em structs de fi nidas pelo usuário • Usar Arrow como formato de dados por ser mais e fi ciente Avro não foi avaliado por conta dos ganhos não serem tão signi fi cativos
  • 38. Consultas com a BigQuery Storage Read API Ainda tem muita coisa acontece sem o usuário ver 1. Mesmo fl uxo de antes: Query -> Job -> Destination Table 2. Abrir uma ReadSession 3. Converter TableSchema em Arrow Schema 4. Ler ReadStreams da ReadSession em paralelo • Caso especial em consultas ordenadas 5. Converter Arrow Batches em User De fi ned Structs • Utiliza o format IPC do Apache Arrow github.com/googleapis/google-cloud-go/pull/6822
  • 40. Exemplo de uso Lendo query em uma user de fi ned struct
  • 41. Exemplo de uso da nova API Storage API precisa ser habilitada, o resto permanece o mesmo
  • 43. Benchmarks Resultados com dataset USA Names • Tabela usa_1910_current • 6,311,504 rows and 185.85 MB. • Consultas • Filtro por state = CA (218,192 rows) • Filtro por state = FL (400,762 rows) • Full table scan (6,311,504 rows) • Full table scan with ordered results ( worst case scenario )
  • 44. Benchmarks - Runtime 4.5x to 55x faster
  • 46. Benchmarks - Número de Alocações ~30% menos alocações
  • 47. Protocolos e formatos de dados podem fazer muita diferença.
  • 48. OBRIGADO! AVIEBRANTZ.COM Alvaro Viebrantz DevRel Software Engineer no Google - Data Analytics and AI SDKs - BigQuery aviebrantz.com @alvaroviebrantz