Notas de versão da Biblioteca Snowpark para Python para 2023

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.11.1 (07/12/2023)

A versão 1.11.1 da biblioteca do Snowpark apresenta alguns novos recursos.

Novos recursos

  • Adicionado o atributo conn_error a SnowflakeSQLException, que armazena toda a exceção subjacente de snowflake-connector-python.

  • Adicionado suporte para RelationalGroupedDataframe.pivot() acessar pivot no seguinte padrão Dataframe.group_by(...).pivot(...).

  • Adicionado o recurso experimental, Modo de teste local, que permite criar e operar em DataFrames do Snowpark Python localmente sem conectar-se a uma conta Snowflake. Você pode usar a estrutura de teste local para testar suas operações de DataFrame localmente, em sua máquina de desenvolvimento ou em um pipeline de CI (integração contínua), antes de implantar alterações de código em sua conta.

  • Adicionado suporte para novas funções arrays_to_object em snowflake.snowpark.functions.

  • Adicionado suporte para tipo de dados de vetor.

Atualizações de dependências

  • A dependência do cloudpickle foi incrementada para funcionar com cloudpickle==2.2.1.

  • snowflake-connector-python atualizado para a versão 3.4.0.

Correções de bugs

  • A verificação das aspas no nome de colunas do DataFrame agora oferece suporte a caracteres de nova linha.

  • Corrigido um bug onde um DataFrame gerado por session.read.with_metadata criava uma tabela inconsistente ao executar df.write.save_as_table.

Versão 1.10.0 (03/11/2023)

A versão 1.10.0 da biblioteca do Snowpark apresenta alguns novos recursos.

Novos recursos

  • Suporte adicionado para gerenciar a diferenciação de letras maiúsculas e minúsculas em DataFrame.to_local_iterator().

  • Adicionado suporte para especificar nomes de colunas de entrada da UDTF vetorizada usando o parâmetro opcional input_names em UDTFRegistration.register, UDTFRegistration.register_file e functions.pandas_udtf. Por padrão, RelationalGroupedDataFrame.applyInPandas inferirá os nomes das colunas do esquema DataFrame atual.

  • Adicionados atributos sql_error_code e raw_message a SnowflakeSQLException quando isso é causado por uma exceção SQL.

Correções de bugs

  • Corrigido um bug em DataFrame.to_pandas() onde a conversão de Snowpark DataFrames em Pandas DataFrames perdia a precisão em números inteiros com mais de 19 dígitos.

  • Corrigido um bug em session.add_packages onde ele não conseguia lidar com um especificador de requisitos que continha um nome de projeto com sublinhado e uma versão.

  • Corrigido um bug em DataFrame.limit() quando offset é usado e o pai DataFrame usa limit. Agora o offset não afetará o limit do DataFrame pai.

  • Corrigido um bug em DataFrame.write.save_as_table onde o DataFrames criado a partir do API de leitura não conseguia salvar dados no Snowflake devido a um nome de coluna inválido $1.

Mudanças de comportamento

  • Mudança de comportamento de date_format:

    • O argumento format mudou de opcional para obrigatório.

    • O resultado retornado mudou de um objeto de data para uma cadeia de caracteres formatada para data.

  • Quando uma função de janela ou uma função geradora de dados dependente de sequência (normal, zipf, uniform, seq1, seq2, seq4, seq8) é usada, a operação de classificação e filtro irá não será mais nivelada ao gerar a consulta.

Versão 1.9.0 (16/10/2023)

A versão 1.9.0 da biblioteca do Snowpark apresenta alguns novos recursos.

Novos recursos

  • Adicionado suporte para o ambiente de tempo de execução do Python 3.11.

  • Suporta objetos serializáveis PythonObjJSONEncoder JSON para literais ARRAY e OBJECT.

Atualizações de dependências

  • Adicionada novamente a dependência de typing-extensions.

Correções de bugs

  • Corrigido um bug em que as importações de locais de estágio permanente eram ignoradas para procedimentos armazenados temporários, UDTFs, UDFs e UDAFs.

  • Volte a usar a instrução CTAS (CREATE TABLE AS SELECT) para DataFrameWriter.save_as_table que não precisa de permissão de inserção para escrever tabelas.

Versão 1.8.0 (14/09/2023)

A versão 1.8.0 da biblioteca do Snowpark apresenta alguns novos recursos.

Novos recursos

  • Adicionado suporte para palavras-chave VOLATILE e IMMUTABLE ao registrar UDFs.

  • Adicionado suporte para especificar chaves de clustering ao salvar dataframes usando DataFrame.save_as_table.

  • Aceita a entrada de objetos Iterable para schema ao criar dataframes usando Session.create_dataframe.

  • Adicionada a propriedade DataFrame.session para retornar um objeto Session.

  • Adicionada a propriedade Session.session_id para retornar um número inteiro que representa a ID da sessão.

  • Adicionada a propriedade Session.connection para retornar um objeto SnowflakeConnection.

  • Adicionado suporte para criar uma sessão do Snowpark a partir de um arquivo de configuração ou variáveis de ambiente.

Atualizações de dependências

  • snowflake-connector-python atualizado para 3.2.0.

Correções de bugs

  • Corrigido um bug em que um upload automático de pacote gerava ValueError mesmo quando versões de pacote compatíveis eram adicionadas em session.add_packages.

  • Corrigido um bug onde os procedimentos armazenados da tabela não eram registrados corretamente ao usar register_from_file.

  • Corrigido um bug em que as junções de dataframe falhavam com o erro invalid_identifier.

  • Corrigido um bug onde DataFrame.copy desativava o simplificador de SQL para a cópia retornada.

  • Corrigido um bug em que session.sql().select() falharia se algum parâmetro fosse especificado para session.sql().

Versão 1.7.0 (28/08/2023)

A versão 1.7.0 da biblioteca do Snowpark apresenta alguns novos recursos.

Mudanças de comportamento

  • Ao criar procedimentos armazenados, UDFs, UDTFs e UDAFs com o parâmetro is_permanent=False, objetos temporários são criados mesmo quando stage_name é fornecido. O valor padrão de is_permanent é False, por isso, se esse valor não for explicitamente definido como True para objetos permanentes, os usuários notarão uma mudança no comportamento.

  • types.StructField agora coloca o identificador da coluna por padrão.

Novos recursos

  • Adicionados parâmetros external_access_integrations e secrets que podem ser usados ao criar uma UDF, UDTF ou procedimento armazenado do Snowpark Python para permitir a integração com acesso externo.

  • Adicionado suporte para essas novas funções em snowflake.snowpark.functions: array_flatten e flatten.

  • Adição de suporte para apply_in_pandas em snowflake.snowpark.relational_grouped_dataframe.

  • Adicionado suporte para replicar seu ambiente Python local no Snowflake via Session.replicate_local_environment.

Correções de bugs

  • Corrigido um bug em que session.create_dataframe falhava ao definir corretamente colunas anuláveis onde a nulidade era afetada pela ordem ou quando os dados eram fornecidos.

  • Corrigido um bug em que DataFrame.select não conseguia identificar colunas de alias ao usar funções de tabela quando as colunas de saída da função de tabela se sobrepunham às colunas em DataFrame.

Versão 1.6.1 (2023-08-02)

Mudanças de comportamento

  • DataFrameWriter.save_as_table agora respeita o campo anulável do esquema fornecido pelo usuário ou o esquema inferido com base nos dados da entrada do usuário.

Novos recursos

  • Adicionado suporte para novas funções em snowflake.snowpark.functions:

    • array_sort

    • sort_array

    • array_min

    • array_max

    • explode_outer

  • Adicionado suporte para pacotes puros Python especificados via Session.add_requirements ou Session.add_packages. Eles agora podem ser usados em procedimentos armazenados e UDFs mesmo se os pacotes não estiverem presentes no canal Snowflake Anaconda.

  • Adicionados os parâmetros de sessão custom_packages_upload_enabled e custom_packages_force_upload_enabled para ativar o suporte ao recurso de pacotes puros Python mencionado acima. Ambos os parâmetros são padronizados como False.

  • Adicionado suporte para especificar requisitos de pacote passando um arquivo YAML de ambiente conda para Session.add_requirements.

  • Adicionado suporte para execução assíncrona de dataframes de múltiplas consultas que contêm variáveis de vinculação.

  • Adicionado suporte para renomear várias colunas em DataFrame.rename.

  • Adicionado suporte para tipos de dados de geometria.

  • Adicionado suporte para parâmetros em session.sql() em procedimentos armazenados.

  • Adicionado suporte para funções agregadas definidas pelo usuário (UDAFs). Este recurso está atualmente em versão preliminar privada.

  • Adicionado suporte para funções de tabela vetorizadas definidas pelo usuário (UDTFs vetorizadas). Este recurso está atualmente em versão preliminar pública.

  • Adicionado suporte para variantes de carimbo de data/hora do Snowflake (ou seja, TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ):

    • Adicionado TimestampTimezone como um argumento no construtor TimestampType.

    • Adicionadas dicas de tipo: NTZ, LTZ, TZ e carimbo de data/hora para anotar funções ao registrar UDFs.

Melhorias

  • Removidas extensões de digitação de dependência redundantes.

  • DataFrame.cache_result agora cria uma tabela temporária de nomes totalmente qualificados no banco de dados e esquema atuais.

Correções de bugs

  • Corrigido um bug onde a verificação de tipo acontecia em pandas antes de ser importada.

  • Corrigido um bug ao criar uma UDF de numpy.ufunc.

  • Corrigido um bug em que DataFrame.union não gerava o Selectable.schema_query correto quando o simplificador SQL estava ativado.

Atualizações de dependências

  • snowflake-connector-python atualizado para a versão 3.0.4.

Versão 1.5.1 (20/06/2023)

Novos recursos e atualizações

  • Adicionado suporte para o ambiente de tempo de execução do Python 3.10.

Versão 1.5.0 (13/06/2023)

Mudanças de comportamento

  • Resultados de agregação, de funções como DataFrame.agg e DataFrame.describe, não removem mais os caracteres não imprimíveis dos nomes das colunas.

Novos recursos e atualizações

  • Adicionado suporte para o ambiente de tempo de execução do Python 3.9.

  • Adicionado suporte para novas funções em snowflake.snowpark.functions:

  • array_generate_range

  • array_unique_agg

  • collect_set

  • sequence

  • Adicionado suporte para registrar e chamar procedimentos armazenados com o tipo de retorno TABLE.

  • Adicionado suporte para parâmetro comprimento em StringType() para especificar o número máximo de caracteres que podem ser armazenados pela coluna.

  • Adicionado o alias functions.element_at() para functions.get().

  • Adicionado o alias Column.contains para functions.contains.

  • Adicionado o recurso experimental DataFrame.alias.

  • Adicionado suporte para consultar colunas de metadados do estágio durante a criação de DataFrame usando DataFrameReader.

  • Adicionado suporte para StructType.add para acrescentar mais campos a objetos StructType existentes.

  • Adicionado suporte para parâmetro execute_as em StoredProcedureRegistration.register_from_file() para especificar os direitos do chamador do procedimento armazenado.

Correções de bugs

  • Corrigido um bug onde o Dataframe.join_table_function não executou todas as consultas necessárias para configurar a função de tabela de junção quando o simplificador SQL foi ativado.

  • Declaração de dica de tipo fixo para tipos personalizados: ColumnOrName, ColumnOrLiteralStr, ColumnOrSqlExpr, LiteralType e ColumnOrLiteral que estavam interrompendo as verificações de mypy.

  • Corrigido um bug onde DataFrameWriter.save_as_table e DataFrame.copy_into_table falhavam ao analisar nomes de tabelas totalmente qualificados.

Versão 1.4.0 (24/04/2023)

Novos recursos

  • Adição de suporte para session.getOrCreate.

  • Adicionado suporte para alias Column.getField.

  • Adicionado suporte para novas funções em snowflake.snowpark.functions:

    • date_add e date_sub para facilitar as operações de adição e subtração.

    • ddaydiff

    • dexplode

    • darray_distinct

    • dregexp_extract

    • dstruct

    • dformat_number

    • dbround

    • dsubstring_index

  • Adicionado o parâmetro skip_upload_on_content_match ao criar UDFs, UDTFs e procedimentos armazenados usando register_from_file para ignorar o carregamento de arquivos para um estágio se a mesma versão dos arquivos já estiver no estágio.

  • Adicionado suporte para o método DataFrame.save_as_table para receber nomes de tabelas que contêm pontos.

  • O SQL gerado nivelado quando DataFrame.filter() ou DataFrame.order_by() é seguido por uma instrução de projeção (por exemplo, DataFrame.select(), DataFrame.with_column()).

  • Adição de suporte para criação de tabelas dinâmicas (em versão preliminar privada) usando Dataframe.create_or_replace_dynamic_table.

  • Adição de um argumento opcional, params, em session.sql() para oferecer suporte a variáveis de ligação. Observe que esse argumento ainda não é compatível com procedimentos armazenados.

Correções de bugs

  • Corrigido um bug em strtok_to_array em que uma exceção era lançada quando um delimitador era passado.

  • Corrigido um bug em session.add_import em que o módulo tinha o mesmo namespace de outras dependências.

Versão 1.3.0 (28/03/2023)

Novos recursos

  • Suporte adicionado para o parâmetro delimitadores em functions.initcap().

  • Suporte adicionado para functions.hash() para aceitar um número variável de expressões de entrada.

  • Adição da API Session.conf para obter, configurar ou verificar a mutabilidade de qualquer configuração de tempo de execução.

  • Suporte adicionado para gerenciar a diferenciação de letras maiúsculas e minúsculas em Row resulta em DataFrame.collect usando o parâmetro case_sensitive.

  • Suporte ao indexador adicionado para snowflake.snowpark.types.StructType.

  • Adição de um argumento de palavra-chave log_on_exception a Dataframe.collect e Dataframe.collect_no_wait para opcionalmente desativar o registro de erros para exceções SQL.

Correções de bugs

  • Corrigido um bug em que uma operação de definição do DataFrame (DataFrame.subtract, DataFrame.union etc.) sendo chamada após outra operação de definição do DataFrame e DataFrame.select ou DataFrame.with_column lança uma exceção.

  • Corrigido um bug em que as instruções de classificação em cadeia são substituídas pelo simplificador SQL.

Melhorias

  • Consultas simplificadas JOIN para usar aliases constantes de subconsultas (SNOWPARK_LEFT, SNOWPARK_RIGHT) por padrão. Os usuários podem desativar isto em tempo de execução com session.conf.set('use_constant_subquery_alias', False) para usar alias gerados aleatoriamente.

  • Permitido especificar parâmetros de instrução em session.call().

  • Habilitou o carregamento de grandes DataFrames pandas em procedimentos armazenados por padrão para um tamanho de 100.000 linhas.

Versão 1.2.0 (02/03/2023)

Novos recursos e atualizações

  • Suporte adicionado para exibição do código fonte como comentários nos scripts gerados ao registrar os procedimentos armazenados. Isto está habilitado por padrão, desabilite especificando source_code_display=False no registro.

  • Parâmetro if_not_exists adicionado ao criar uma UDF, UDTF ou procedimento armazenado do Snowpark Python para ignorar a criação da função ou procedimento especificado se ele já existir.

  • Aceitar inteiros ao chamar snowflake.snowpark.functions.get para extrair valor da matriz.

  • Adicionado functions.reverse em funções para abrir o acesso à função interna Snowflake REVERSE.

  • Parâmetro require_scoped_url adicionado em snowflake.snowflake.files.SnowflakeFile.open() (em versão preliminar privada) para substituir is_owner_file, que está marcado para ser descontinuado.

Correções de bugs

  • Bug corrigido que substituía paramstyle por qmark ao criar uma sessão do Snowpark.

  • Bug corrigido quando df.join(..., how="cross") falha com SnowparkJoinException: (1112): Unsupported using join type 'Cross'.

  • Bug corrigido em que a consulta de uma coluna DataFrame criada a partir de chamadas de função encadeadas utilizava um nome de coluna errado.

Versão 1.1.0 (26/01/2023)

Novos recursos e atualizações

  • asc, asc_nulls_first, asc_nulls_last, desc, desc_nulls_first, desc_nulls_last, date_part e unix_timestamp adicionados em funções.

  • Adicionada a propriedade DataFrame.dtypes para retornar uma lista de pares de nomes de colunas e tipos de dados.

  • Os seguintes aliases foram adicionados:

    • functions.expr() for functions.sql_expr().

    • functions.date_format() for functions.to_date().

    • functions.monotonically_increasing_id() for functions.seq8().

    • functions.from_unixtime() for functions.to_timestamp().

Correções de bugs

  • Corrigido um bug no simplificador SQL que não lidava com o alias de coluna e fez uma boa junção em alguns casos. Consulte https://github.com/snowflakedb/snowpark-python/issues/658 para obter detalhes.

  • Corrigido um bug no simplificador SQL que gerava nomes de colunas errados para chamadas de funções, NaN e INF.

Melhorias

  • O parâmetro da sessão PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER será True após o Snowflake 7.3 ser lançado. Em snowpark-python, session.sql_simplifier_enabled lê o valor de PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER por padrão, o que significa que o simplificador de SQL é habilitado por padrão após o lançamento do Snowflake 7.3. Para desativar isso, defina PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER no Snowflake como False ou execute session.sql_simplifier_enabled = False a partir do Snowpark. Recomenda-se usar o simplificador SQL porque ele ajuda a gerar um SQL mais conciso.