O documento descreve como o palestrante melhorou a performance de consultas no BigQuery em 50x ao migrar para a BigQuery Storage Read API e usar o formato de dados Apache Arrow. A apresentação também discute os protocolos gRPC e HTTP/2 e como eles melhoram a performance em comparação com a BigQuery REST API original.
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
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
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
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.
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
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
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 )