-
-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[infra] Adiciona ao cliente Python a funcionalidade de download direto (sem passar na memória) #123
Conversation
Aliás, se eu fiz algo errado ou não segui algum padrão que estão seguindo, por favor me avisem também que corrijo! |
Muito obrigado pela contribuição! Alguns comentários gerais. Closes #119 Acho que o download sem passar pela memória deveria ser o padrão. A opção passando pela memória nem deveria existir, pois, complexifica a implementação e não traz nenhuma vantagem clara. O que você acha? Dito isso, esse processo:
Sobre o formato, acho que Também, a sugestão de passar os parâmetros do Closes #68 Dado que não baixaremos mais os dados via pandas, não sei se é fácil tirar o Closes #122 Ótimo! CredenciaisEstou trabalhando em outro PR #120 para mudar como o usuário vai configurar as credenciais. Estamos pensando em fazer a validação via browser. Mas, ainda não testamos. Portanto, toda a requisição para o No geral, o PR está muito bom. Ainda não temos um padrão de PR, mas isso é uma ótima ideia. Fique à vontade para sugerir um padrão. Também, se você tiver pensando em contribuir mais para o projeto e participar das decisões de 'pra onde a gente vai', chega lá no grupo do Whatsapp que a gente marca uma conversa. |
Obrigado João, pelos comentários. Eu concordo que o Quanto à questão da compressão, já vi aqui como faz, vou testar e já incluo! Muito boa. Pra fazer funcionar com o parâmetro Mas com certeza, quero ajudar sim. Vou dar um toque no grupo! Valeu! |
…guiarandre-issue119
Aguiarandre issue119
Closes #119
Tentei criar esse pipeline de download à parte e opcional (através do argumento:
bypass_memory
, que por default éFalse
- inclusive, não sei criar nomes, fiquem à vontade pra sugerir haha) já que ele introduz uma dificuldade em termos de autorização (o usuário precisa ter uma credencial com acesso de escrita à buckets, leitura ao bigquery e criação de jobs).Basicamente, implementei a ideia de:
create temporary bucket ➡️ move table from bq to temp bucket ➡️ download blob from bucket ➡️ delete temporary bucket
Fiz todas estas funções como 'ocultas' (
_create_bucket
,_move_table_to_bucket
,_direct_download
, etc) pra não poluir pro usuário final. Não consegui pensar numa forma mais elegante de permitir que o bucket não seja temporário a não ser que o usuário use estas funções internas (_create_bucket(...)
➡️_move_table_to_bucket(...)
)Pontos de melhoria:
Acredito que há alguns pontos a serem melhorados, mas que não implementei nessa versão:
.csv
mas acredito que outros formatos trariam vantagem significativa em performance (avro
, por exemplo)Experimentos:
Fiz um pequeno experimento com uma base do
bigquery-public-data
. Usei duas bases diferentes pra não envolver problemas com cache (inclusive isso me deu ideia de outra melhoria, que seria permitir passar ojob_config
noread_sql
), mas ambas as bases possuem cerca de ~500MB no BigQuery e ~200MB em csv.Além da vantagem de wall-time para estas bases um pouco maiores, é interessante ver que o tempo de processamento é quase nulo (já que o processo é puramente I/O).
Closes #68
Na questão de tornar o
index=False
por default, usei a seguinte estratégia para aceitar oindex
e ainda permitir opandas_kwargs
:Veja se faz sentido pra vocês fazer dessa forma, por favor?
Closes #122
Apenas adicionei o argumento
project_id
à funçãoread_table()
para permitir que o usuário utilize um projeto específico.NOTA: Se tiverem alguma sugestão, por favor me avisem. Tentei fazer de maneira organizada mas não tenho experiência nessa questão de contribuição open-source e estou querendo me aprimorar. Fico à disposição para quaisquer dúvidas que não comentei por aqui!