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
aSnowflakeSQLException
, que armazena toda a exceção subjacente desnowflake-connector-python
.Adicionado suporte para
RelationalGroupedDataframe.pivot()
acessarpivot
no seguinte padrãoDataframe.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
emsnowflake.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ão3.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 executardf.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
emUDTFRegistration.register
,UDTFRegistration.register_file
efunctions.pandas_udtf
. Por padrão,RelationalGroupedDataFrame.applyInPandas
inferirá os nomes das colunas do esquema DataFrame atual.Adicionados atributos
sql_error_code
eraw_message
aSnowflakeSQLException
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()
quandooffset
é usado e o paiDataFrame
usalimit
. Agora ooffset
não afetará olimit
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 literaisARRAY
eOBJECT
.
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
eIMMUTABLE
ao registrar UDFs.Adicionado suporte para especificar chaves de clustering ao salvar dataframes usando
DataFrame.save_as_table
.Aceita a entrada de objetos
Iterable
paraschema
ao criar dataframes usandoSession.create_dataframe
.Adicionada a propriedade
DataFrame.session
para retornar um objetoSession
.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 objetoSnowflakeConnection
.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 emsession.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 parasession.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 quandostage_name
é fornecido. O valor padrão deis_permanent
éFalse
, por isso, se esse valor não for explicitamente definido comoTrue
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
esecrets
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
eflatten
.Adição de suporte para
apply_in_pandas
emsnowflake.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
ouSession.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
ecustom_packages_force_upload_enabled
para ativar o suporte ao recurso de pacotes puros Python mencionado acima. Ambos os parâmetros são padronizados comoFalse
.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 oSelectable.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
eDataFrame.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()
parafunctions.get()
.Adicionado o alias
Column.contains
parafunctions.contains
.Adicionado o recurso experimental
DataFrame.alias
.Adicionado suporte para consultar colunas de metadados do estágio durante a criação de
DataFrame
usandoDataFrameReader
.Adicionado suporte para
StructType.add
para acrescentar mais campos a objetosStructType
existentes.Adicionado suporte para parâmetro
execute_as
emStoredProcedureRegistration.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
eColumnOrLiteral
que estavam interrompendo as verificações demypy
.Corrigido um bug onde
DataFrameWriter.save_as_table
eDataFrame.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
edate_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 usandoregister_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()
ouDataFrame.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
, emsession.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 emDataFrame.collect
usando o parâmetrocase_sensitive
.Suporte ao indexador adicionado para
snowflake.snowpark.types.StructType
.Adição de um argumento de palavra-chave
log_on_exception
aDataframe.collect
eDataframe.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 eDataFrame.select
ouDataFrame.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 comsession.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 emsnowflake.snowflake.files.SnowflakeFile.open()
(em versão preliminar privada) para substituiris_owner_file
, que está marcado para ser descontinuado.
Correções de bugs¶
Bug corrigido que substituía
paramstyle
porqmark
ao criar uma sessão do Snowpark.Bug corrigido quando
df.join(..., how="cross")
falha comSnowparkJoinException: (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
eunix_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 dePYTHON_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, definaPYTHON_SNOWPARK_USE_SQL_SIMPLIFIER
no Snowflake como False ou executesession.sql_simplifier_enabled = False
a partir do Snowpark. Recomenda-se usar o simplificador SQL porque ele ajuda a gerar um SQL mais conciso.