Notas de versão da Biblioteca Snowpark para Python para 2024¶
Este artigo contém as notas de versão do Snowpark Library for Python, incluindo o seguinte, quando aplicável:
Mudanças de comportamento
Novos recursos
Correções de bugs voltados para o cliente
Snowflake usa controle de versão semântico para atualizações de Snowpark Library for Python.
Versão 1.13.0 (26/02/2024)¶
A versão 1.13.0 da biblioteca do Snowpark apresenta alguns novos recursos.
Novos recursos¶
Adicionado suporte para um argumento
date_part
opcional na funçãolast_day
.SessionBuilder.app_name
definiráquery_tag
após a criação da sessão.Adicionado suporte para as seguintes funções de teste locais:
current_timestamp
current_date
current_time
strip_null_value
upper
lower
length
initcap
Melhorias¶
Adicionada lógica de limpeza no desligamento do intérprete para fechar todas as sessões ativas.
Correções de bugs¶
Corrigido um bug em
DataFrame.to_local_iterator
onde o iterador poderia produzir resultados errados se outra consulta fosse executada antes do iterador terminar devido ao nível de isolamento errado.Corrigido um bug que truncava nomes de tabelas em mensagens de erro ao executar um plano com testes locais habilitados.
Corrigido um bug que
Session.range
retornava um resultado vazio quando o intervalo era grande.
Versão 1.12.1 (08/02/2024)¶
A versão 1.12.1 da biblioteca do Snowpark apresenta alguns novos recursos.
Melhorias¶
Use
split_blocks=True
por padrão, durante a conversãoto_pandas
, para alocação de memória ideal. Este parâmetro é passado parapyarrow.Table.to_pandas
, o que permite quePyArrow
divida a alocação de memória em blocos menores e mais gerenciáveis, em vez de alocar um único bloco contíguo. Isso resulta em melhor gerenciamento de memória ao lidar com conjuntos de dados maiores.
Correções de bugs¶
Corrigido um bug em
DataFrame.to_pandas
que causava um erro ao avaliar um Dataframe com uma colunaIntergerType
com valores nulos.
Versão 1.12.0 (29/01/2024)¶
A versão 1.12.0 da biblioteca do Snowpark apresenta alguns novos recursos.
Mudanças de comportamento (compatível com API)¶
Ao analisar tipos de dados durante uma operação
to_pandas
, contamos com o valor de precisão GS para corrigir problemas de precisão para valores inteiros grandes. Isso pode afetar os usuários onde uma coluna que foi retornada anteriormente comoint8
é retornada comoint64
. Os usuários podem corrigir isso especificando explicitamente valores de precisão para sua coluna de retorno.Comportamento alinhado para
Session.call
no caso de procedimentos armazenados de tabela em que a execução deSession.call
não acionaria um procedimento armazenado, a menos que uma operaçãocollect()
fosse executada.StoredProcedureRegistration
agora adiciona automaticamentesnowflake-snowpark-python
como uma dependência de pacote na versão local da biblioteca do cliente. Um erro será gerado se o servidor não puder suportar essa versão.
Novos recursos¶
statement_params
exposto emStoredProcedure.__call__
.Adicionados dois argumentos opcionais a
Session.add_import
:chunk_size
: o número de bytes para hash por parte dos arquivos carregados.whole_file_hash
: por padrão, apenas a primeira parte da importação carregada é criptografada para economizar tempo. Quando definido como true, cada arquivo carregado é totalmente hash.
Adicionados parâmetros
external_access_integrations
esecrets
ao criar um UDAF do Snowpark Python para permitir a integração com acesso externo.Adicionado um novo método
Session.append_query_tag
, que permite que uma tag adicional seja adicionada à tag de consulta atual, anexando-a como um valor separado por vírgula.Adicionado um novo método
Session.update_query_tag
, que permite atualizações em uma tag de consulta de dicionário codificada em JSON.SessionBuilder.getOrCreate
agora tentará substituir o singleton retornado quando a expiração do token for detectada.Adicionadas as seguintes funções em
snowflake.snowpark.functions
:array_except
create_map
sign
/signum
Adicionadas as seguintes funções a
DataFrame.analytics
:Adicionada a função
moving_agg
emDataFrame.analytics
para permitir agregações móveis, como somas e médias com vários tamanhos de janela.Adicionada a função
cummulative_agg
emDataFrame.analytics
para permitir agregações móveis, como somas e médias com vários tamanhos de janela.
Correções de bugs¶
Corrigido um bug em
DataFrame.na.fill
que fazia com que valores booleanos substituíssem erroneamente valores inteiros.Corrigido um bug em
Session.create_dataframe
onde o Snowpark DataFrames criado usando pandas DataFrames não inferia corretamente o tipo das colunas de carimbo de data/hora. O comportamento é o seguinte:Colunas de carimbo de data/hora anteriores sem fuso horário seriam convertidas em épocas de nanossegundos e inferidas como
LongType()
, mas agora serão mantidas corretamente como valores de carimbo de data/hora e inferidas comoTimestampType(TimestampTimeZone.NTZ)
.Colunas de carimbo de data/hora anteriores com fuso horário seriam inferidas como
TimestampType(TimestampTimeZone.NTZ)
e informações de fuso horário soltas, mas agora serão inferidas corretamente comoTimestampType(TimestampTimeZone.LTZ)
e as informações de fuso horário serão retidas corretamente.Defina o parâmetro de sessão
PYTHON_SNOWPARK_USE_LOGICAL_TYPE_FOR_CREATE_DATAFRAME
para voltar ao comportamento antigo. Snowflake recomenda que você atualize seu código para alinhá-lo com o comportamento correto porque o parâmetro será removido no futuro.
Corrigido um bug que
DataFrame.to_pandas
obtém o tipo decimal quando a escala não é 0 e cria um tipo de objeto empandas
. Em vez disso, convertemos o valor em um tipo float64.Bugs corrigidos que nivelavam incorretamente o SQL gerado quando uma das seguintes situações acontecia:
DataFrame.filter()
é chamado depois deDataFrame.sort().limit()
.DataFrame.sort()
oufilter()
é chamado em um DataFrame que já possui uma função de janela ou coluna geradora de dados dependente de sequência. Por exemplo,df.select("a", seq1().alias("b")).select("a", "b").sort("a")
não nivelará mais a cláusula de classificação.Uma coluna do gerador de dados dependente de janela ou sequência é usada após
DataFrame.limit()
. Por exemplo,df.limit(10).select(row_number().over())
não nivelará o limite e selecionará no SQL gerado.
Corrigido um bug em que o alias de uma coluna DataFrame gerava um erro quando o DataFame era copiado de outro DataFrame com uma coluna com alias. Por exemplo,
df = df.select(col("a").alias("b")) df = copy(df) df.select(col("b").alias("c")) # Threw an error. Now it's fixed.
Corrigido um bug em
Session.create_dataframe
em que o campo não anulável em um esquema não é respeitado para o tipo booleano. Observe que essa correção só tem efeito quando o usuário tem o privilégio de criar uma tabela temporária.Corrigido um bug no simplificador SQL onde instruções não selecionadas em
session.sql
descartavam uma consulta SQL quando usadas comlimit()
.Corrigido um bug que gerava uma exceção quando o parâmetro de sessão
ERROR_ON_NONDETERMINISTIC_UPDATE
era verdadeiro.