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.

Consulte Guia do desenvolvedor de Snowpark para Python para ver a documentação.

Versão 1.23.0 (9 de outubro de 2024)

Novos recursos

  • Adição das seguintes novas funções em snowflake.snowpark.functions:

    • make_interval

  • Adição de suporte ao uso de constantes de intervalo Snowflake com Window.range_between() quando a ordem por coluna for do tipo TIMESTAMP ou DATE.

  • Adição de suporte para gravações de arquivo. Este recurso está atualmente em versão preliminar privada.

  • Adição de thread_id para QueryRecord rastrear o ID do thread que envia o histórico de consulta.

  • Adição de suporte para Session.stored_procedure_profiler.

Correções de bugs

  • Correção de um bug onde o registro de um procedimento armazenado ou UDxF com dicas de tipo geraria um aviso NoneType sem len() ao tentar ler valores padrão da função.

Atualizações da Snowpark pandas API

Novos recursos

  • Adição de suporte para o método TimedeltaIndex.mean.

  • Adição de suporte para alguns casos de agregação de colunas Timedelta em axis=0 com agg ou aggregate.

  • Adição de suporte para by, left_by, right_by, left_index e right_index para pd.merge_asof.

  • Adição de suporte para passagem do parâmetro include_describe para Session.query_history.

  • Adição de suporte aos métodos DatetimeIndex.mean e DatetimeIndex.std.

  • Adição de suporte para Resampler.asfreq, Resampler.indices, Resampler.nunique e Resampler.quantile.

  • Adição de suporte para as frequência de resample W, ME e YE com closed = "left".

  • Adição de suporte para DataFrame.rolling.corr e Series.rolling.corr para pairwise = False e window do tipo inteiro.

  • Adição de suporte para as cadeias de caracteres baseadas em tempo window e min_periods = None para Rolling.

  • Adicionado suporte para DataFrameGroupBy.fillna e SeriesGroupBy.fillna.

  • Adição de suporte para construir de objetos Series e DataFrame com o objeto Index ocioso como os argumentos data, index e columns.

  • Adição de suporte para construir os objetos Series e DataFrame com os valores index e column não presentes em DataFrame/Series data.

  • Adição de suporte para pd.read_sas (Usa o pandas nativo para processamento).

  • Adição de suporte para aplicação de rolling().count() e expanding().count() para as séries e colunas Timedelta.

  • Adição de suporte para tz em pd.date_range e pd.bdate_range.

  • Adição de suporte para Series.items.

  • Adição de suporte para errors="ignore" em pd.to_datetime.

  • Adicionado suporte para DataFrame.tz_localize e Series.tz_localize.

  • Adicionado suporte para DataFrame.tz_convert e Series.tz_convert.

  • Adição de suporte para aplicação de funções Python do Snowpark (por exemplo, sin) em Series.map, Series.apply, DataFrame.apply e DataFrame.applymap.

Melhorias

  • Melhoria de to_pandas para preservar o deslocamento do fuso horário original para o tipo TIMESTAMP_TZ.

  • Resultados de dtype aprimorados para o tipo TIMESTAMP_TZ exibir o deslocamento correto do fuso horário.

  • Resultados de dtype aprimorados para o tipo TIMESTAMP_LTZ exibir o fuso horário correto.

  • Mensagem de erro aprimorada ao passar valor não booliano para numeric_only em agregações com group by.

  • Aviso desnecessário removido sobre algoritmo de classificação em sort_values.

  • Use o objeto SCOPED para criar tabelas temporárias internas. Os objetos SCOPED serão armazenados no escopo do sproc se forem criados dentro do sproc armazenado; caso contrário, serão armazenados no escopo da sessão e o objeto será limpo automaticamente no final do escopo.

  • Mensagens de aviso aprimoradas para operações que levam à materialização com lentidão inadvertida.

  • Remoção da mensagem de aviso desnecessária sobre convert_dtype em Series.apply.

Correções de bugs

  • Correção de um bug em que um objeto Index criado a partir de um Series/DataFrame atualizava incorretamente o nome do índice do Series/DataFrame após uma atualização local ter sido aplicada ao Series/DataFrame original.

  • Correção de um SettingWithCopyWarning que às vezes aparecia ao imprimir colunas Timedelta.

  • Correção do argumento inplace para objetos Series derivados de outros objetos Series.

  • Correção de um bug no qual Series.sort_values falhava se o nome da série se sobrepusesse ao nome da coluna do índice.

  • Correção de um bug em que a transposição de um dataframe mapeava níveis de índice Timedelta para níveis de coluna de inteiros.

  • Correção de um bug em que métodos Resampler em colunas timedelta produziam resultados inteiros.

  • Correção de um bug em que pd.to_numeric() deixava as entradas Timedelta como Timedelta em vez de convertê-las em números inteiros.

  • Correção de loc definido ao configurar uma única linha, ou várias linhas, de um DataFrame com um valor de série.

Versão 1.22.1 (11 de setembro de 2024)

  • Este é um relançamento da versão 1.22.0. Consulte as notas de lançamento 1.22.0 para obter o conteúdo detalhado do lançamento .

Versão 1.22.0 (10 de setembro de 2024)

Novos recursos

  • Adição das seguintes novas funções em snowflake.snowpark.functions:

    • array_remove

    • ln

Melhorias

  • Documentação aprimorada para Session.write_pandas tornando a opção use_logical_type mais explícita.

  • Adição de suporte para especificar o seguinte para DataFrameWriter.save_as_table:

    • enable_schema_evolution

    • data_retention_time

    • max_data_extension_time

    • change_tracking

    • copy_grants

    • iceberg_config – Um dicionário que pode conter as seguintes opções de configuração Iceberg:

      • external_volume

      • catalog

      • base_location

      • catalog_sync

      • storage_serialization_policy

  • Adição de suporte para especificar o seguinte para DataFrameWriter.copy_into_table:

    • iceberg_config – Um dicionário que pode conter as seguintes opções de configuração Iceberg:

      • external_volume

      • catalog

      • base_location

      • catalog_sync

      • storage_serialization_policy

  • Adição de suporte para especificar os seguintes parâmetros para DataFrame.create_or_replace_dynamic_table:

    • mode

    • refresh_mode

    • initialize

    • clustering_keys

    • is_transient

    • data_retention_time

    • max_data_extension_time

Correções de bugs

  • Correção de um bug em session.read.csv que causava um erro ao configurar PARSE_HEADER = True em um formato de arquivo definido externamente.

  • Correção de um bug na geração de consulta a partir de operações de conjunto que permitia a geração de consultas duplicadas quando os filhos tinham subconsultas comuns.

  • Correção de um bug em session.get_session_stage que fazia referência a um estágio inexistente após alternar o banco de dados ou esquema.

  • Correção de um bug onde chamar DataFrame.to_snowpark_pandas sem inicializar explicitamente o plugin Snowpark pandas causava um erro.

  • Correção de um bug onde o uso da função explode na criação de tabela dinâmica causava um erro de compilação SQL devido à conversão de tipo booliano incorreta no parâmetro outer.

Atualizações de testes locais do Snowpark

Novos recursos

  • Adição de suporte para coerção de tipo ao passar colunas como entrada para chamadas UDF.

  • Adição de suporte para Index.identical.

Correções de bugs

  • Correção de um bug em que o modo de truncamento em DataFrameWriter.save_as_table tratava incorretamente DataFrames com apenas um subconjunto de colunas da tabela existente.

  • Correção de um bug em que a função to_timestamp não define o fuso horário padrão do tipo de dados da coluna.

Atualizações da Snowpark pandas API

Novos recursos

  • Adição de suporte limitado para o tipo Timedelta, incluindo os seguintes recursos. O Snowpark pandas aumentará NotImplementedError para os casos de uso Timedelta sem suporte.

    • suporte para rastrear o tipo Timedelta através de copy, cache_result, shift, sort_index, assign, bfill, ffill, fillna, compare, diff, drop, dropna, duplicated, empty, equals, insert, isin, isna, items, iterrows, join, len, mask, melt, merge, nlargest, nsmallest e to_pandas.

    • Suporte à conversão de não timedelta para timedelta via astype.

    • NotImplementedError será gerado para o restante dos métodos que não oferecem suporte a Timedelta.

    • Suporte à subtração de dois carimbos de data/hora para obter um Timedelta.

    • Suporte à indexação com colunas de dados Timedelta.

    • Suporte à adição ou subtração de carimbos de data/hora e Timedelta.

    • Suporte à aritmética binária entre dois valores Timedelta.

    • Suporte à aritmética binária e comparações entre valores Timedelta e valores numérico.

    • Suporte para TimedeltaIndex lento.

    • Suporte para pd.to_timedelta.

    • Suporte às agregações GroupBy min, max, mean, idxmax, idxmin, std, sum, median, count, any, all, size, nunique, head, tail e aggregate.

    • Suporte a filtragens GroupBy first e last.

    • Suporte aos atributos TimedeltaIndex: days, seconds, microseconds e nanoseconds.

    • Suporte para diff com colunas de carimbo de data/hora em axis=0 e axis=1.

    • Suporte aos métodos TimedeltaIndex: ceil, floor e round.

    • Suporte ao método TimedeltaIndex.total_seconds.

  • Adição de suporte para operadores aritméticos e de comparação do índice.

  • Adição de suporte para Series.dt.round.

  • Adição das páginas de documentação para DatetimeIndex.

  • Adição de suporte para Index.name, Index.names, Index.rename e Index.set_names.

  • Adição de suporte para Index.__repr__.

  • Adicionado suporte para DatetimeIndex.month_name e DatetimeIndex.day_name.

  • Adição de suporte para Series.dt.weekday, Series.dt.time e DatetimeIndex.time.

  • Adicionado suporte para Index.min e Index.max.

  • Adição de suporte para pd.merge_asof.

  • Adicionado suporte para Series.dt.normalize e DatetimeIndex.normalize.

  • Adição de suporte para Index.is_boolean, Index.is_integer, Index.is_floating, Index.is_numeric e Index.is_object.

  • Adição de suporte para DatetimeIndex.round, DatetimeIndex.floor e DatetimeIndex.ceil.

  • Adicionado suporte para Series.dt.days_in_month e Series.dt.daysinmonth.

  • Adicionado suporte para DataFrameGroupBy.value_counts e SeriesGroupBy.value_counts.

  • Adicionado suporte para Series.is_monotonic_increasing e Series.is_monotonic_decreasing.

  • Adicionado suporte para Index.is_monotonic_increasing e Index.is_monotonic_decreasing.

  • Adição de suporte para pd.crosstab.

  • Adição de suporte para pd.bdate_range e inclusão de suporte de frequência comercial (B, BME, BMS, BQE, BQS, BYE, BYS) para pd.date_range e pd.bdate_range.

  • Adição de suporte para objetos Index lentos como labels em DataFrame.reindex e Series.reindex.

  • Adição de suporte para Series.dt.days, Series.dt.seconds, Series.dt.microseconds e Series.dt.nanoseconds.

  • Adição de suporte para criar um DatetimeIndex a partir de um Index de tipo numérico ou de cadeia de caracteres.

  • Adição de suporte para indexação de cadeia de caracteres com objetos Timedelta.

  • Adição de suporte ao método Series.dt.total_seconds.

Melhorias

  • Desempenho melhorado de concatenação e junção quando operações são executadas em uma série proveniente do mesmo DataFrame, evitando junções desnecessárias.

  • Refatoração de quoted_identifier_to_snowflake_type para evitar a realização de consultas de metadados se os tipos tiverem sido armazenados em cache localmente.

  • Melhoria de pd.to_datetime para lidar com todos os casos de entrada local.

  • Crie um índice lento a partir de outro índice lento sem extrair dados para o cliente.

  • Geração de NotImplementedError para operadores bit a bit de Index.

  • Exibe uma mensagem de erro mais clara quando Index.names é definido como um objeto que não é do tipo lista.

  • Emita um aviso sempre que valores MultiIndex forem extraídos localmente.

  • Mensagem de aviso aprimorada para pd.read_snowflake para incluir o motivo da criação quando a criação da tabela temporária é acionada.

  • Desempenho aprimorado para DataFrame.set_index, ou definir DataFrame.index ou Series.index evitando verificações que exigem avaliação rápida. Como consequência, quando o novo índice não corresponde ao comprimento de objeto atual de Series ou DataFrame, um ValueError não é mais gerado. Em vez disso, quando o objeto Series ou DataFrame é maior que o índice fornecido, o novo índice do Series ou DataFrame é preenchido com valores NaN para os elementos “extras”. Caso contrário, os valores extras no índice fornecido serão ignorados.

Correções de bugs

  • Parou de ignorar nanossegundos em escalares pd.Timedelta.

  • Correção de AssertionError na árvore de operações binárias.

  • Correção de bug em Series.dt.isocalendar usando uma série nomeada.

  • Correção do argumento inplace para objetos Series derivados de colunas DataFrame.

  • Correção de um bug em que Series.reindex e DataFrame.reindex não atualizava o nome do índice de resultados corretamente.

  • Correção de um bug em que Series.take não dava erro quando axis=1 era especificado.

Versão 1.21.1 (5 de setembro de 2024)

Correções de bugs

  • Correção de um bug em que o uso de to_pandas_batches com tarefas assíncronas causava um erro devido ao tratamento incorreto da espera pela conclusão da consulta assíncrona.

Versão 1.21.0 (19 de agosto de 2024)

Novos recursos

  • Adição de suporte para snowflake.snowpark.testing.assert_dataframe_equal, que é uma função utilitária para verificar a igualdade de dois DataFrames Snowpark.

Melhorias

  • Adição de suporte para limitações de tamanho de cadeia de caracteres do lado do servidor.

  • Adição de suporte para criar e invocar procedimentos armazenados, UDFs e UDTFs com argumentos opcionais.

  • Adição de suporte para linhagem de coluna na DataFrame.lineage.trace API.

  • Adição de suporte para passar as opções INFER_SCHEMA para DataFrameReader via INFER_SCHEMA_OPTIONS.

  • Adição de suporte para passagem de parâmetro parameters para Column.rlike e Column.regexp.

  • Adição de suporte para limpeza automática de tabelas temporárias criadas por df.cache_result() na sessão atual quando os DataFrame não são mais referenciados (ou seja, são coletados como lixo). Ainda é um recurso experimental e não é habilitado por padrão. Pode ser habilitado configurando session.auto_clean_up_temp_table_enabled para True.

  • Adição de suporte para literais de cadeia de caracteres ao parâmetro fmt de snowflake.snowpark.functions.to_date.

Correções de bugs

  • Correção de um bug onde o SQL gerado para selecionar a coluna * tinha uma subconsulta incorreta.

  • Correção de um bug em DataFrame.to_pandas_batches no qual o iterador podia gerar um erro se uma determinada transformação fosse feita nos DataFrame pandas devido ao nível de isolamento errado.

  • Correção de um bug em DataFrame.lineage.trace para dividir corretamente o nome e a versão da exibição do recurso citado.

  • Correção de um bug em Column.isin que causava geração inválida de SQL ao passar uma lista vazia.

  • Correção de um bug que não gerava NotImplementedError ao configurar uma célula com um item do tipo lista.

Atualizações de testes locais do Snowpark

Novos recursos

  • Adicionado suporte para as seguintes APIs:

    • snowflake.snowpark.functions

      • rank

      • dense_rank

      • percent_rank

      • cume_dist

      • ntile

      • datediff

      • array_agg

    • snowflake.snowpark.column.Column.within_group

  • Adição de suporte para análise de sinalizadores em instruções Regex para planos simulados. Isso mantém a paridade com as alterações rlike e regexp acima.

Correções de bugs

  • Correção de um bug em que a as funções de janela LEAD e LAG não manipulavam a opção ignore_nulls corretamente.

  • Correção de um bug em que os valores não eram preenchidos no DataFrame de resultado durante a inserção de uma operação de mesclagem de tabela.

Melhorias

  • Correção do pandas FutureWarning sobre a indexação de inteiro.

Atualizações da Snowpark pandas API

Novos recursos

  • Adição de suporte para DataFrame.backfill, DataFrame.bfill, Series.backfill e Series.bfill.

  • Adição de suporte para DataFrame.compare e Series.compare com parâmetros padrão.

  • Adicionado suporte para Series.dt.microsecond e Series.dt.nanosecond.

  • Adicionado suporte para Index.is_unique e Index.has_duplicates.

  • Adição de suporte para Index.equals.

  • Adição de suporte para Index.value_counts.

  • Adicionado suporte para Series.dt.day_name e Series.dt.month_name.

  • Adição de suporte para inclusão no Index, por exemplo, df.index[:10].

  • Adicionado suporte para DataFrame.unstack e Series.unstack.

  • Adicionado suporte para DataFrame.asfreq e Series.asfreq.

  • Adicionado suporte para Series.dt.is_month_start e Series.dt.is_month_end.

  • Adicionado suporte para Index.all e Index.any.

  • Adicionado suporte para Series.dt.is_year_start e Series.dt.is_year_end.

  • Adicionado suporte para Series.dt.is_quarter_start e Series.dt.is_quarter_end.

  • Adição de suporte para DatetimeIndex lento.

  • Adicionado suporte para Series.argmax e Series.argmin.

  • Adição de suporte para Series.dt.is_leap_year.

  • Adição de suporte para DataFrame.items.

  • Adicionado suporte para Series.dt.floor e Series.dt.ceil.

  • Adição de suporte para Index.reindex.

  • Adição de suporte para as propriedades DatetimeIndex: year, month, day, hour, minute, second, microsecond, nanosecond, date, dayofyear, day_of_year, dayofweek, day_of_week, weekday, quarter, is_month_start, is_month_end, is_quarter_start, is_quarter_end, is_year_start, is_year_end e is_leap_year.

  • Adicionado suporte para Resampler.fillna e Resampler.bfill.

  • Adição de suporte limitado para o tipo Timedelta, incluindo a criação de colunas Timedelta e to_pandas.

  • Adicionado suporte para Index.argmax e Index.argmin.

Melhorias

  • Remoção da mensagem de aviso de versão pública ao importar pandas do Snowpark.

  • Consulta de contagem desnecessária removida do método SnowflakeQueryCompiler.is_series_like.

  • Dataframe.columns agora retorna um objeto Index do pandas nativo em vez de um objeto Index do Snowpark.

  • Refatoração e introdução do argumento query_compiler no construtor Index para criar Index a partir do compilador de consulta.

  • pd.to_datetime agora retorna um objeto DatetimeIndex em vez de um objeto Series.

  • pd.date_range agora retorna um objeto DatetimeIndex em vez de um objeto Series.

Correções de bugs

  • Agora, passar uma função de agregação sem suporte para pivot_table gera NotImplementedError em vez de KeyError.

  • Rótulos de eixo e nomes chamáveis ​​removidos de mensagens de erro e telemetria sobre agregações não compatíveis.

  • Correção de AssertionError em Series.drop_duplicates e DataFrame.drop_duplicates quando chamado depois de sort_values.

  • Correção de um bug em Index.to_frame no qual o nome da coluna do quadro de resultados pode estar errado quando o nome não é especificado.

  • Correção de um bug em que algumas docstrings de Index eram ignoradas.

  • Correção de um bug em Series.reset_index(drop=True) no qual o nome do resultado poderia estar errado.

  • Correção de um bug na ordenação de Groupby.first/last pelas colunas corretas na expressão de janela subjacente.

Versão 1.20.0 (17 de julho de 2024)

A versão 1.20.0 da biblioteca Snowpark para Python apresenta alguns novos recursos.

Novos recursos

  • Adição de rastreamento distribuído usando APIs de telemetria aberta para funções de procedimento armazenado em DataFrame:

    • _execute_and_get_query_id

  • Adição de suporte à função arrays_zip.

  • Desempenho aprimorado para expressões de colunas binárias e df._in evitando conversões desnecessárias para valores numérico. Você pode habilitar essa otimização configurando session.eliminate_numeric_sql_value_cast_enabled = True.

  • Mensagens de erro aprimoradas para write_pandas quando a tabela de destino não existe e auto_create_table=False.

  • Adição de rastreamento de telemetria aberto em funções UDxF no Snowpark.

  • Adição de rastreamento de telemetria aberta no registro de procedimento armazenado no Snowpark.

  • Adição de um novo parâmetro opcional chamado format_json à função Session.SessionBuilder.app_name que define o nome do aplicativo em Session.query_tag no formato JSON. Por padrão, este parâmetro é definido como False.

Correções de bugs

  • Correção de um bug onde o SQL gerado para lag(x, 0) estava incorreto e falhava com a mensagem de erro argument 1 to function LAG needs to be constant, found 'SYSTEM$NULL_TO_FIXED(null)'.

Atualizações de testes locais do Snowpark

Novos recursos

  • Adicionado suporte para as seguintes APIs:

    • snowflake.snowpark.functions

      • random

  • Adição de novos parâmetros à função patch ao registrar uma função simulada:

    • distinct permite que uma função alternativa seja especificada para quando uma função SQL deve ser distinta.

    • pass_column_index passa um parâmetro nomeado, column_index, para a função simulada que contém o pandas.Index para os dados de entrada.

    • pass_row_index passa um parâmetro nomeado, row_index, para a função simulada que é o número da linha com índice 0 na qual a função está operando atualmente.

    • pass_input_data passa um parâmetro nomeado, input_data, para a função simulada que contém todo o dataframe de entrada para a expressão atual.

    • Adição de suporte ao parâmetro column_order no método DataFrameWriter.save_as_table.

Correções de bugs

  • Correção de um bug que fazia com que as colunas DecimalType fossem truncadas incorretamente para precisão de inteiros quando usadas em BinaryExpressions.

Atualizações da Snowpark pandas API

Novos recursos

  • Adição de novo suporte de API para o seguinte:

    • DataFrames

      • DataFrame.nlargest e DataFrame.nsmallest

      • DataFrame.assign

      • DataFrame.stack

      • DataFrame.pivot

      • DataFrame.to_csv

      • DataFrame.corr

      • DataFrame.corr

      • DataFrame.equals

      • DataFrame.reindex

      • DataFrame.at e DataFrame.iat

    • Series

      • Series.nlargest e Series.nsmallest

      • Series.at e Series.iat

      • Series.dt.isocalendar

      • Series.equals

      • Series.reindex

      • Series.to_csv

      • Series.case_when exceto quando a condição ou substituição for exigível

      • series.plot() materializou os dados para o cliente local

    • GroupBy

      • DataFrameGroupBy.all e DataFrameGroupBy.any

      • As agregações DataFrameGroupBy e SeriesGroupBy, e first e last.

      • DataFrameGroupBy.get_group

      • SeriesGroupBy.all e SeriesGroupBy.any

    • Geral

      • pd.pivot

      • read_excel (Usa pandas local para processamento)

      • df.plot() materializou os dados para o cliente local

  • APIs de existência estendida, da seguinte forma:

    • Adição de suporte para replace e frac > 1 em DataFrame.sample e Series.sample.

    • Adição de suporte parcial para Series.str.translate onde os valores em table são cadeias de caracteres de ponto de código único.

    • Adição de suporte ao parâmetro limit quando o parâmetro method é usado em fillna.

  • Adição de páginas de documentação para Index e suas APIs.

Correções de bugs

  • Correção de um problema ao usar np.where e df.where quando o other escalar é o literal 0.

  • Correção de um bug relacionado à perda de precisão ao converter para Snowpark pandas DataFrame ou Series com dtype=np.uint64.

  • Correção de um bug onde values é definido como index quando index e columns contêm todas as colunas no DataFrame durante pivot_table.

Melhorias

  • Adição de suporte para Index.copy().

  • Adição de suporte para Index APIs: dtype, values, item(), tolist(), to_series() e to_frame().

  • Expanda o suporte para DataFrames sem linhas em pd.pivot_table e DataFrame.pivot_table.

  • Adição de suporte ao parâmetro inplace em DataFrame.sort_index e Series.sort_index.

Versão 1.19.0 (25 de junho de 2024)

A versão 1.19.0 da biblioteca Snowpark para Python apresenta alguns novos recursos.

Novos recursos

  • Adição de suporte à função to_boolean.

  • Adição das páginas de documentação para Index e suas APIs.

Correções de bugs

  • Correção de um bug em que procedimentos armazenados em Python com tipo de retorno de tabelas falhavam quando executados em uma tarefa.

  • Correção de um bug em que df.dropna falhava devido à profundidade de recursão máxima :codenowrap:`RecursionError: excedida quando tinha mais de 500 colunas.

  • Correção de um bug em que AsyncJob.result("no_result") não esperava a execução da consulta terminar.

Atualizações de testes locais

Novos recursos

  • Adição de suporte ao parâmetro strict ao registrar UDFs e procedimentos armazenados.

Correções de bugs

  • Correção de um bug em convert_timezone que fazia com que a configuração do parâmetro source_timezone retornasse um erro.

  • Correção de um bug onde a criação de um DataFrame com dados vazios do tipo DateType gerava AttributeError.

  • Correção de um bug em que a mesclagem de tabela falhava quando havia uma cláusula de atualização, mas nenhuma atualização ocorria.

  • Correção de um bug na implementação simulada de to_char que gerava IndexError quando uma coluna de entrada tinha um índice de linha não consecutivo.

  • Correção de um bug no tratamento de expressões CaseExpr que gerava IndexError quando uma coluna de entrada tinha um índice de linha não consecutivo.

  • Correção de um bug na implementação de Column.like que gerava IndexError quando uma coluna de entrada tinha um índice de linha não consecutivo.

Melhorias

  • Adição de suporte para coerção de tipo na implementação de DataFrame.replace, DataFrame.dropna e a função simulada iff.

Atualizações da Snowpark pandas API

Novos recursos

  • Adição de suporte parcial para DataFrame.pct_change e Series.pct_change sem os parâmetros freq e limit.

  • Adição de suporte para Series.str.get.

  • Adição de suporte para Series.dt.dayofweek, Series.dt.day_of_week, Series.dt.dayofyear e Series.dt.day_of_year.

  • Adição de suporte para Series.str.__getitem__ (Series.str[…]).

  • Adição de suporte para Series.str.lstrip e Series.str.rstrip.

  • Adição de suporte para DataFrameGroupby.size e SeriesGroupby.size.

  • Adição de suporte para DataFrame.expanding e Series.expanding para as agregações count, sum, min, max, mean, std e var com axis=0.

  • Adição de suporte para DataFrame.rolling e Series.rolling para contagem de agregação com axis=0.

  • Adição de suporte para Series.str.match.

  • Adição de suporte para DataFrame.resample e Series.resample para tamanho da agregação.

Correções de bugs

  • Correção de um bug que fazia com que a saída das colunas GroupBy.aggregate fosse ordenada incorretamente.

  • Correção de um bug onde chamar DataFrame.describe em um quadro com colunas duplicadas de diferentes dtypes podia causar um erro ou resultados incorretos.

  • Correção de um bug em DataFrame.rolling e Series.rolling, para que agora window=0 lance NotImplementedError em vez de ValueError.

Melhorias

  • Adição de suporte para agregações nomeadas em DataFrame.aggregate e Series.aggregate com axis=0.

  • pd.read_csv lê usando o analisador nativo do pandas CSV e depois carrega os dados no Snowflake usando Parquet. Isso habilita a maioria dos parâmetros compatíveis com read_csv, incluindo a análise de data e conversões numéricas. O upload via Parquet é quase duas vezes mais rápido que o upload via CSV.

  • Trabalho inicial para oferecer suporte a um pd.Index diretamente no Snowpark pandas. O suporte para pd.Index como um componente de primeira classe do Snowpark pandas está em desenvolvimento ativo.

  • Adição de um construtor de índice lento e suporte para len, shape, size, empty, to_pandas() e names. Para df.index, o Snowpark pandas cria um objeto de índice preguiçoso.

  • Para df.columns, o Snowpark pandas oferece suporte a uma versão não lenta de um Index pois os dados já estão armazenados localmente.

Versão 1.18.0 (28/05/2024)

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

Novos recursos

  • Adicionados os métodos DataFrame.cache_result e Series.cache_result para os usuários persistirem objetos DataFrame e Series para uma tabela temporária durante a duração de uma sessão para melhorar a latência de operações subsequentes.

Melhorias

  • Adicionado suporte para DataFrame.pivot_table sem o parâmetro index e com o parâmetro margins.

  • Atualizou a assinatura de DataFrame.shift, Series.shift, DataFrameGroupBy.shift e SeriesGroupBy.shift para combinar com pandas 2.2.1. O Snowpark pandas ainda não oferece suporte ao argumento de sufixo recém-adicionado ou aos valores de sequência de períodos.

  • Adição novamente de suporte para Series.str.split.

Correções de bugs

  • Corrigido um problema com colunas mistas para métodos da cadeia de caracteres (Series.str.*).

Atualizações de testes locais

Novos recursos

  • Adicionado suporte para as seguintes opções de leitura DataFrameReader para formatos de arquivo CSV e JSON:

    • PURGE

    • PATTERN

    • INFER_SCHEMA com valor False

    • ENCODING com valor UTF8

  • Adicionado suporte para DataFrame.analytics.moving_agg e DataFrame.analytics.cumulative_agg_agg.

  • Adicionado suporte para o parâmetro if_not_exists durante o registro da UDF e do procedimento armazenado.

Correções de bugs

  • Corrigido um bug com formatos de tempo de processamento em que a parte do segundo fracionário não era manipulada corretamente.

  • Corrigiu um bug que causava falhas nas chamadas de função em *.

  • Corrigido um bug que impedia a criação de objetos do tipo map e struct.

  • Corrigido um bug onde a função date_add não conseguia manipular alguns tipos numéricos.

  • Corrigido um bug onde a conversão TimestampType resultava em dados incorretos.

  • Corrigido um bug que fazia com que os dados DecimalType tivessem precisão incorreta em alguns casos.

  • Corrigido um bug onde referenciar uma tabela ou exibição ausente gerava um IndexError.

  • Corrigido um bug onde a função simulada to_timestamp_ntz não conseguia lidar com dados None.

  • Corrigido um bug em que as UDFs simuladas tratavam os dados de saída de None de forma inadequada.

  • Corrigido um bug onde os atributos ignorados DataFrame.with_column_renamed do pai DataFrames após as operações de junção.

  • Corrigido um bug onde a precisão inteira de valores grandes era perdida quando convertida para um DataFrame pandas.

  • Corrigido um bug onde o esquema de um objeto datetime estava errado ao criar um DataFrame de um DataFrame pandas.

  • Corrigido um bug na implementação de Column.equal_nan onde dados nulos foram manipulados incorretamente.

  • Corrigido um bug onde os atributos ignorados DataFrame.drop do pai DataFrames após as operações de junção.

  • Corrigido um bug na função simulada date_part onde o tipo de coluna foi definido incorretamente.

  • Corrigido um bug onde DataFrameWriter.save_as_table não gerava exceções ao inserir dados nulos em colunas não anuláveis.

  • Corrigido um bug na implementação de DataFrameWriter.save_as_table onde:

    • Falha ao anexar ou truncar quando os dados recebidos tinham um esquema diferente da tabela existente.

    • O truncamento falhou quando os dados recebidos não especificaram colunas que são anuláveis.

Melhorias

  • Foi removida a verificação de dependência para pyarrow porque não é usada.

  • Melhorou a cobertura do tipo de alvo de Column.cast, adicionando suporte para conversão para tipos booleanos e todos os tipos integrais.

  • Alinhou a experiência de erro ao chamar UDFs e procedimentos armazenados.

  • Adicionadas mensagens de erro apropriadas para as opções is_permanent e anonymous em UDFs e registro de procedimentos armazenados para deixar mais claro que esses recursos ainda não são suportados.

  • Operações de leitura de arquivo com opções e valores não suportados agora aumentam NotImplementedError em vez de avisos e informações de erro pouco claras.

Versão 1.17.0 (21/05/2024)

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

Novos recursos

  • Adicionado suporte para adicionar um comentário em tabelas e exibições usando as funções listadas abaixo:

    • DataFrameWriter.save_as_table

    • DataFrame.create_or_replace_view

    • DataFrame.create_or_replace_temp_view

    • DataFrame.create_or_replace_dynamic_table

Melhorias

  • Mensagem de erro aprimorada para lembrar os usuários de definir {"infer_schema": True} ao ler o arquivo CSV sem especificar seu esquema.

Atualizações de testes locais

Novos recursos

  • Adicionado suporte para conversão de dados NumericType e VariantType na função simulada to_timestamp_ltz, to_timestamp_ntz, to_timestamp_tz e to_timestamp.

  • Adicionado suporte para conversão de dados DecimalType, BinaryType, ArrayType, MapType, TimestampType, DateType e TimeType na função simulada to_char.

  • Adicionado suporte para as seguintes APIs:

    • snowflake.snowpark.functions.to_varchar

    • snowflake.snowpark.DataFrame.pivot

    • snowflake.snowpark.Session.cancel_all

  • Introduziu uma nova classe de exceção snowflake.snowpark.mock.exceptions.SnowparkLocalTestingException.

  • Adicionado suporte para conversão para FloatType.

Correções de bugs

  • Corrigido um bug que procedimentos armazenados e UDFs não devem remover as importações já existentes sys.path durante a etapa de limpeza.

  • Corrigido um bug que ao processar o formato datetime, a parte do segundo fracionário não é tratada corretamente.

  • Corrigido um bug em que as operações de arquivo na plataforma Windows não conseguiam manipular corretamente os separadores de arquivo em nomes de diretório.

  • Corrigiu um bug na plataforma Windows que, ao ler um dataframe do pandas, um IntervalType coluna com dados inteiros não pode ser processada.

  • Corrigido um bug que impedia os usuários de selecionar várias colunas com o mesmo alias.

  • Corrigido um bug onde Session.get_current_[schema |database| role |user| account|warehouse] retorna identificadores em maiúsculas quando os identificadores estão entre aspas.

  • Corrigido um bug em que a função substr e substring não pode lidar com uma base zero start_expr.

Melhorias

  • Padronizou a experiência de erro aumentando SnowparkLocalTestingException em casos de erro, o que está no mesmo nível do SnowparkSQLException levantado em execução não local.

  • Experiência de erro melhorada do método Session.write_pandas, de maneira que NotImplementError será acusado ao chamar.

  • A experiência de erro foi alinhada com a reutilização de uma sessão fechada em execução não local.

Versão 1.16.0 (08/05/2024)

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

Novos recursos

  • Adicionado snowflake.snowpark.Session.lineage.trace para explorar a linhagem de dados de objetos Snowflake.

  • Adicionado suporte para registrar procedimentos armazenados com pacotes fornecidos como módulos Python.

  • Adicionado suporte para análise de esquema de tipo estruturado.

Correções de bugs

  • Corrigido um bug em que, ao inferir um esquema, aspas simples eram adicionadas aos arquivos de estágio que já tinham aspas simples.

Atualizações de testes locais

Novos recursos

  • Adicionado suporte para StringType, TimestampType e VariantType conversão de dados na função simulada to_date.

  • Adicionado suporte para as seguintes APIs:

    • snowflake.snowpark.functions:

      • get

      • concat

      • concat_ws

Correções de bugs

  • Corrigido um bug que fazia com que os valores NaT e NaN não fossem reconhecidos.

  • Corrigido um bug em que, ao inferir um esquema, aspas simples eram adicionadas aos arquivos de estágio que já tinham aspas simples.

  • Corrigido um bug onde DataFrameReader.csv não conseguiu manipular valores entre aspas contendo um delimitador.

  • Corrigido um bug que quando há um valor None em um cálculo aritmético, a saída deve permanecer None em vez de math.nan.

  • Corrigido um bug na função sum e covar_pop que quando há um math.nan valor nos dados, a saída também deve ser math.nan.

  • Corrigido um bug em que as operações de estágio não conseguiam manipular diretórios.

  • Corrigiu um bug que DataFrame.to_pandas deve tomar tipos numéricos Snowflake com precisão 38 como int64.

Versão 1.15.0 (24/04/2024)

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

Novos recursos

  • Adicionado o modo de salvar truncate em DataFrameWrite para substituir tabelas existentes truncando a tabela subjacente em vez de removê-la.

  • Telemetria adicionada para calcular a altura do plano de consulta e o número de nós duplicados durante operações de coleta.

  • Adicionadas as funções abaixo para descarregar dados de um DataFrame em um ou mais arquivos em um estágio:

    • DataFrame.write.json

    • DataFrame.write.csv

    • DataFrame.write.parquet

  • Adicionado rastreamento distribuído usando telemetria aberta APIs para funções de ação em DataFrame e DataFrameWriter:

    • snowflake.snowpark.DataFrame:

      • collect

      • collect_nowait

      • to_pandas

      • count

      • show

    • snowflake.snowpark.DataFrameWriter:

      • save_as_table

  • Adicionado suporte para snow:// URLs para snowflake.snowpark.Session.file.get e snowflake.snowpark.Session.file.get_stream

  • Adicionado suporte para registrar procedimentos armazenados e UDFs com um comment.

  • O suporte do cliente da UDAF está pronto para versão preliminar pública. Fique atento ao anúncio do Snowflake sobre a versão preliminar pública da UDAF.

  • Adicionado suporte para pivô dinâmico. Este recurso está atualmente em versão preliminar privada.

Melhorias

  • Melhorado o desempenho da consulta gerada, tanto na compilação quanto na execução, convertendo subconsultas duplicadas em expressões de tabela comum (CTEs). Ainda é um recurso experimental e não é habilitado por padrão. Você pode habilitá-lo configurando session.cte_optimization_enabled como True.

Correções de bugs

  • Corrigido um bug onde statement_params não é passado para execuções de consulta que registram procedimentos armazenados e funções definidas pelo usuário.

  • Corrigido um bug que fazia com que snowflake.snowpark.Session.file.get_stream falhasse nos locais de estágio citados.

  • Corrigido um bug que indicava um tipo interno em utils.py pode aumentar AttributeError quando o módulo subjacente não pode ser encontrado.

Atualizações de testes locais

Novos recursos

  • Adicionado suporte para registro de UDFs e procedimentos armazenados.

  • Adicionado suporte para as seguintes APIs:

    • snowflake.snowpark.Session:

      • file.put

      • file.put_stream

      • file.get

      • file.get_stream

      • read.json

      • add_import

      • remove_import

      • get_imports

      • clear_imports

      • add_packages

      • add_requirements

      • clear_packages

      • remove_package

      • udf.register

      • udf.register_from_file

      • sproc.register

      • sproc.register_from_file

    • snowflake.snowpark.functions

      • current_database

      • current_session

      • date_trunc

      • object_construct

      • object_construct_keep_null

      • pow

      • sqrt

      • udf

      • sproc

  • Adicionado suporte para StringType, TimestampType e VariantType conversão de dados na função simulada to_time.

Correções de bugs

  • Corrigido um bug que preenchia colunas com valores nulos para funções constantes.

  • Corrigidos to_object, to_array e to_binary para lidar melhor com entradas nulas.

  • Corrigido um bug que fazia com que a comparação de dados do carimbo de data/hora não pudesse lidar com anos posteriores a 2262.

  • Corrigido um bug que Session.builder.getOrCreate deve retornar a sessão simulada criada.

Versão 1.14.0 (20/03/2024)

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

Novos recursos

  • Adicionado suporte para criação de UDTFs vetorizadas com o método process.

  • Adicionado suporte para funções de dataframe:

    • to_timestamp_ltz

    • to_timestamp_ntz

    • to_timestamp_tz

    • locate

  • Adicionado suporte para o tipo ASOF JOIN.

  • Adicionado suporte para as seguintes APIs de teste locais:

    • snowflake.snowpark.functions:

      • to_double

      • to_timestamp

      • to_timestamp_ltz

      • to_timestamp_ntz

      • to_timestamp_tz

      • greatest

      • least

      • convert_timezone

      • dateadd

      • date_part

    • snowflake.snowpark.Session:

      • get_current_account

      • get_current_warehouse

      • get_current_role

      • use_schema

      • use_warehouse

      • use_database

      • use_role

Melhorias

  • Telemetria adicionada aos testes locais.

  • Melhorada a mensagem de erro de DataFrameReader para acusar o erro FileNotFound ao ler um caminho que não existe ou quando não há arquivos no caminho.

Correções de bugs

  • Corrigido um bug em SnowflakePlanBuilder onde save_as_table não filtra corretamente as colunas cujos nomes começam com $ e é seguido por um número.

  • Corrigido um bug em que os parâmetros de instrução podem não ter efeito ao resolver importações e pacotes.

  • Erros corrigidos em testes locais:

    • Junções LEFT ANTI e LEFT SEMI descartam linhas com valores nulos.

    • DataFrameReader.csv analisa incorretamente os dados quando o parâmetro opcional field_optionally_enclosed_by é especificado.

    • Column.regexp considera apenas a primeira entrada quando pattern é um Column.

    • Table.update gera KeyError ao atualizar valores nulos nas linhas.

    • As colunas VARIANT acusaram erros em DataFrame.collect.

    • count_distinct não funciona corretamente ao contar.

    • Valores nulos em colunas inteiras geram TypeError.

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.