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ção last_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ão to_pandas, para alocação de memória ideal. Este parâmetro é passado para pyarrow.Table.to_pandas, o que permite que PyArrow 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 coluna IntergerType 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 como int8 é retornada como int64. 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 de Session.call não acionaria um procedimento armazenado, a menos que uma operação collect() fosse executada.

  • StoredProcedureRegistration agora adiciona automaticamente snowflake-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 em StoredProcedure.__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 e secrets 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 em DataFrame.analytics para permitir agregações móveis, como somas e médias com vários tamanhos de janela.

    • Adicionada a função cummulative_agg em DataFrame.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 como TimestampType(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 como TimestampType(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 em pandas. 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 de DataFrame.sort().limit().

    • DataFrame.sort() ou filter() é 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.
    
    Copy
  • 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 com limit().

  • Corrigido um bug que gerava uma exceção quando o parâmetro de sessão ERROR_ON_NONDETERMINISTIC_UPDATE era verdadeiro.