Distribuição de cargas de trabalho que obtêm resultados com o Conector Snowflake para Python¶
Se você estiver usando um ambiente distribuído para paralelizar cargas de trabalho, pode usar o Conector Snowflake para Python para distribuir o trabalho de buscar e processar resultados.
Introdução¶
Após usar o objeto Cursor para executar uma consulta, você pode distribuir o trabalho de buscar resultados usando lotes de resultados. Um lote de resultados encapsula uma função que recupera um subconjunto dos resultados. Você pode designar trabalhadores diferentes para usar lotes de resultados diferentes para buscar e processar resultados em paralelo.
Recuperação da lista de lotes de resultados¶
Após executar uma consulta, você pode recuperar os resultados em um dos seguintes formatos:
Objetos ResultBatch.
Para fazer isso, chame o método
get_result_batches()no objeto Cursor. Isto retorna uma lista de objetosResultBatchque você pode atribuir a diferentes trabalhadores para processamento. Por exemplo:Tabelas PyArrow.
Para obter mais informações, consulte as tabelas PyArrow.
Você pode usar os seguintes métodos para recuperar os lotes de resultados como tabelas PyArrow:
fetch_arrow_all(): Chame este método para retornar uma tabela PyArrow contendo todos os resultados.fetch_arrow_batches(): Chame este método para retornar um iterador que você pode usar para retornar uma tabela PyArrow para cada lote de resultados.
Por exemplo:
objetos pandas DataFrame.
Se você instalou a versão compatível com pandas do Conector Snowflake para Python, pode usar os seguintes métodos para recuperar os lotes de resultados como objetos Pandas DataFrame:
fetch_pandas_all(): chame este método para retornar um pandas DataFrame contendo todos os resultados.fetch_pandas_batches(): chame este método para retornar um iterador que você pode usar para retornar um pandas DataFrame para cada lote de resultados.
Por exemplo:
Serialização de lotes de resultados¶
Para mover os lotes de resultados para outros trabalhadores ou nós, você pode serializar e desfazer a serialização de lotes de resultados. Por exemplo:
Como trabalhar com lotes de resultados¶
As próximas seções explicam como trabalhar com objetos ResultBatch:
Obtenção do número de linhas e tamanho de um lote de resultados
Conversão de um lote de resultados Arrow em uma tabela PyArrow ou Pandas DataFrame
Iteração em linhas em um lote de resultados¶
Com um objeto ResultBatch, você pode iterar as linhas que fazem parte desse lote. Por exemplo:
Quando você cria um iterador de um objeto ResultBatch, o objeto busca e converte o subconjunto de linhas para esse lote.
Materialização de linhas em um lote de resultados¶
Para materializar o subconjunto de linhas em um lote de resultados passando aquele objeto ResultBatch para a função list(). Por exemplo:
Obtenção do número de linhas e tamanho de um lote de resultados¶
Se você precisar determinar o número de linhas em um lote de resultados e o tamanho dos dados, pode usar os atributos rowcount, compressed_size e uncompressed_size do objeto ResultBatch. Por exemplo:
Observe que estes atributos estão disponíveis antes de você iterar o lote de resultados. Você não precisa buscar o subconjunto de linhas para o lote a fim de obter os valores destes atributos.
Conversão de um lote de resultados Arrow em uma tabela PyArrow ou Pandas DataFrame¶
Para converter um ArrowResultBatch em uma tabela PyArrow ou um pandas DataFrame, use os seguintes métodos:
to_pandas(): chame este método para retornar um pandas DataFrame contendo as linhas em umArrowResultBatch, se você tiver instalado a versão compatível com Pandas do Conector Snowflake para Python.to_arrow(): Chame este método para retornar uma tabela PyArrow contendo as linhas em umResultBatch.
Por exemplo: