Mudanças na API de Python do Snowpark

Este tópico fornece informações sobre versões de lançamento.

Neste tópico:

Versão 1.3.0 (28/03/2023)

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

Novos recursos

  • Suporte adicionado para o parâmetro delimiters 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

A versão 1.2.0 da biblioteca do Snowpark introduz alguns novos recursos.

Novos recursos

  • 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

A versão 1.1.0 da biblioteca do Snowpark introduz alguns novos recursos.

Novos recursos

  • 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() para functions.sql_expr().

    • functions.date_format() para functions.to_date().

    • functions.monotonically_increasing_id() para functions.seq8().

    • functions.from_unixtime() para 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, significando 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.

Versão 1.0.0

A versão 1.0.0 da biblioteca do Snowpark introduz alguns novos recursos.

Novos recursos

  • Session.generator() foi adicionado para criar um novo DataFrame usando a função de tabela GENERATOR.

  • O parâmetro SECURE foi adicionado às funções que criam um UDF ou UDTF seguro.

Versão 0.12.0

A versão 0.12.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Adicionados novos APIs para trabalho assíncrono:

    • Session.create_async_job() para criar uma instância AsyncJob a partir de uma ID de consulta.

    • AsyncJob.result() agora aceita o argumento result_type para retornar os resultados em diferentes formatos.

    • AsyncJob.to_df() retorna um DataFrame construído a partir do resultado deste trabalho assíncrono.

    • AsyncJob.query() retorna o texto SQL da consulta executada.

  • DataFrame.agg() e RelationalGroupedDataFrame.agg() agora aceitam argumentos de comprimento variável.

  • Adicionados os parâmetros lsuffix e rsuffix a DataFrame.join() e DataFrame.cross_join() para renomear convenientemente as colunas sobrepostas.

  • Adicionado Table.drop_table() para que você possa descartar a tabela de temporária depois de chamar DataFrame.cache_result(). Table é também um gerenciador de contexto, assim você pode usar a instrução with para descartar a tabela temporária do cache após o uso.

  • Session.use_secondary_roles() adicionado.

  • Funções adicionadas first_value() e last_value(). (contribuição de @chasleslr)

  • Adicionado on como um alias para using_columns e how como um alias para join_type em DataFrame.join().

Correções de bugs

  • Corrigido um bug em Session.create_dataframe() que gerava um erro quando nomes de schema tinham caracteres especiais.

  • Corrigido um bug no qual as opções definidas em Session.read.option() não eram passadas para DataFrame.copy_into_table() como valores padrão.

  • Corrigido um bug no qual DataFrame.copy_into_table() gerava um erro quando uma opção de cópia tinha aspas simples no valor.

Versão 0.11.0

A versão 0.11.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Mudanças de comportamento

  • Session.add_packages() agora gera um ValueError quando a versão de um pacote não pode ser encontrada no canal Snowflake Anaconda. Anteriormente, Session.add_packages() teve sucesso e uma exceção SnowparkSQLException foi gerada mais tarde na etapa de registro de UDF ou do procedimento armazenado.

Novos recursos

  • Adicionado o método FileOperation.get_stream() para oferecer suporte ao download de arquivos de estágio como um fluxo.

  • Adicionado suporte em functions.ntiles() para aceitar um argumento int.

  • Os seguintes aliases foram adicionados:

    • functions.call_function() para functions.call_builtin().

    • functions.function() para functions.builtin().

    • DataFrame.order_by() para DataFrame.sort()

    • DataFrame.orderBy() para DataFrame.sort()

  • DataFrame.cache_result() aprimorado para devolver uma classe Table mais precisa em vez de uma classe DataFrame.

  • Adicionado suporte para permitir session como o primeiro argumento ao chamar StoredProcedure.

Melhorias

  • Melhoria da geração de consultas aninhadas por meio do nivelamento de consultas, quando aplicável. Esta melhoria pode ser ativada com a configuração Session.sql_simplifier_enabled = True. DataFrame.select(), DataFrame.with_column(), DataFrame.drop() e outros APIs relacionados a seleções têm SQL mais nivelado agora. DataFrame.union(), DataFrame.union_all(), DataFrame.except_(), DataFrame.intersect(), DataFrame.union_by_name() nivelaram o SQL gerado quando vários operadores do conjunto forem encadeados.

  • Anotações de tipo melhoradas para APIs de trabalho assimétrico.

Correções de bugs

  • Corrigido um bug no qual Table.update(), Table.delete(), Table.merge() tentava fazer referência a uma tabela temporária que não existia.

Versão 0.10.0

A versão 0.10.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Adicionados APIs experimentais para avaliar os dataframes do Snowpark com consultas assíncronas:

    • Adicionado o argumento da palavra-chave block às seguintes APIs de ação nos dataframes do Snowpark (que executam consultas) para permitir avaliações assíncronas:

      • DataFrame.collect(), DataFrame.to_local_iterator(), DataFrame.to_pandas(), DataFrame.to_pandas_batches(), DataFrame.count(), DataFrame.first(), DataFrameWriter.save_as_table(), DataFrameWriter.copy_into_location(), Table.delete(), Table.update(), Table.merge().

    • Método adicionado DataFrame.collect_nowait() para permitir avaliações assíncronas.

    • Adicionada a classe AsyncJob para recuperar resultados de consultas executadas de forma assíncrona e verificar seu status.

  • Adição de suporte para table_type em Session.write_pandas(). Agora você pode escolher entre estas opções de table_type: temporary, temp e transient.

  • Adicionado suporte ao uso de dados estruturados Python (list, tuple e dict) como valores literais no Snowpark.

  • Adicionado argumento da palavra-chave execute_as a functions.sproc() e session.sproc.register() para permitir o registro de um procedimento armazenado como chamador ou proprietário.

  • Adicionado suporte para especificar um formato de arquivo pré-configurado ao ler arquivos de um estágio no Snowflake.

Melhorias

  • Adicionado suporte para exibição de detalhes de uma sessão do Snowpark.

Correções de bugs

  • Foi corrigido um bug no qual DataFrame.copy_into_table() e DataFrameWriter.save_as_table() criavam erroneamente uma nova tabela se o nome da tabela fosse totalmente qualificado, e a tabela já existisse.

Preterições

  • Argumento de palavra-chave obsoleto create_temp_table em Session.write_pandas().

  • Invocação de UDFs usando argumentos em uma lista Python ou tupla obsoleta. Você pode usar argumentos de comprimento variável sem uma lista ou uma tupla.

Atualizações de dependências

  • snowflake-connector-python atualizado para 2.7.12.

Versão 0.9.0

A versão 0.9.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Adicionado suporte para exibição do código fonte como comentários nos scripts gerados ao registrar UDFs. Este recurso é ativado por padrão. Para desativá-lo, passe o novo argumento da palavra-chave source_code_display como False ao chamar register() ou @udf().

  • Adicionado suporte para chamar funções de tabela de DataFrame.select(), DataFrame.with_column() e DataFrame.with_columns() que agora assumem parâmetros do tipo table_function.TableFunctionCall para colunas.

  • Adicionado o argumento da palavra-chave overwrite ao session.write_pandas() para permitir que você substitua o conteúdo de uma tabela do Snowflake por um de Pandas DataFrame.

  • Adicionado o argumento da palavra-chave column_order ao df.write.save_as_table() para especificar as regras de correspondência ao inserir dados em uma tabela no modo de anexo.

  • Adicionado o método FileOperation.put_stream() para carregar arquivos locais em um estágio por meio de um fluxo de arquivos.

  • Adicionados os métodos TableFunctionCall.alias() e TableFunctionCall.as_() para permitir o aliasing dos nomes das colunas que vêm da saída das junções de funções de tabela.

  • Função adicionada get_active_session() no módulo snowflake.snowpark.context para obter a atual sessão ativa do Snowpark.

Melhorias

  • Melhorada a função function.uniform() para inferir os tipos de entradas max_ e min_ e converter os limites em IntegerType ou FloatType, respectivamente.

Correções de bugs

  • Corrigido um bug no qual a inserção de lote não deveria gerar um erro quando statement_params não é passado para a função.

  • Corrigido um bug no qual os nomes das colunas devem ficar entre aspas quando session.create_dataframe() é chamado com dicts e um determinado esquema.

  • Corrigido um bug no qual a criação de uma tabela deve ser pulada se a tabela já existir e estiver em modo de anexo ao chamar df.write.save_as_table().

  • Corrigido um bug no qual pacotes de terceiros com sublinhados não podem ser adicionados ao registrar UDFs.

Versão 0.8.0

A versão 0.8.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Adicionado argumento somente palavra-chave statement_params aos seguintes métodos para permitir a especificação de parâmetros de nível de instrução:

    • collect, to_local_iterator, to_pandas, to_pandas_batches, count, copy_into_table, show, create_or_replace_view, create_or_replace_temp_view, first, cache_result e random_split na classe snowflake.snowpark.Dateframe.

    • update, delete e merge na classe snowflake.snowpark.Table.

    • save_as_table e copy_into_location na classe snowflake.snowpark.DataFrameWriter.

    • approx_quantile, statement_params, cov e crosstab na classe snowflake.snowpark.DataFrameStatFunctions.

    • register e register_from_file na classe snowflake.snowpark.udf.UDFRegistration.

    • register e register_from_file na classe snowflake.snowpark.udtf.UDTFRegistration.

    • register e register_from_file na classe snowflake.snowpark.stored_procedure.StoredProcedureRegistration.

    • udf, udtf e sproc em snowflake.snowpark.functions.

  • Adicionado suporte para Column como um argumento de entrada para session.call().

  • Adição de suporte para table_type em df.write.save_as_table(). Agora você pode escolher entre estas opções de table_type: temporary, temp e transient.

Melhorias

  • Adicionada validação do nome do objeto nos métodos session.use_*.

  • Atualizada a tag de consulta em SQL para escapar dela quando ela contém caracteres especiais.

  • Adicionada uma verificação para ver se os termos do Anaconda são confirmados ao adicionar pacotes em falta.

Correções de bugs

  • Corrigido o comprimento limitado da coluna da cadeia de caracteres em session.create_dataframe().

  • Corrigido um erro no qual session.create_dataframe() convertia erroneamente 0 e False em None quando os dados de entrada eram apenas uma lista.

  • Corrigido um bug no qual a chamada session.create_dataframe() utilizando um grande conjunto de dados local às vezes criava uma tabela temporária duas vezes.

  • Alinhada a definição de function.trim() com a definição da função SQL.

  • Corrigido um problema onde o snowpark-python ficava suspenso ao usar o sum (função interna) definido pelo sistema Python vs. function.sum() do Snowpark.

Versão 0.7.0

A versão 0.7.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Suporte adicionado para funções de tabela definidas pelo usuário (UDTFs).

    • Use a função snowflake.snowpark.functions.udtf() para registrar uma UDTF, ou use-a como decorador para registrar a UDTF.

    • Você também pode usar Session.udtf.register() para registrar uma UDTF.

    • Use Session.udtf.register_from_file() para registrar uma UDTF de um arquivo Python.

  • APIs atualizadas para consultar uma função de tabela, incluindo tanto funções de tabela incluídas com o Snowflake e UDTFs.

    • Use a função snowflake.snowpark.functions.table_function() para criar um objeto que pode ser chamado representando uma função de tabela e use-o para chamar a função de tabela em uma consulta.

    • Alternativamente, use a função snowflake.snowpark.functions.call_table_function() para chamar uma função de tabela.

    • Suporte adicionado para a cláusula over, que especifica partition by e order by ao unir lateralmente uma função de tabela.

    • Session.table_function() e DataFrame.join_table_function() atualizados para aceitar instâncias TableFunctionCall.

Alterações interruptivas

  • Ao criar uma função com functions.udf() e functions.sproc(), agora você pode especificar uma lista vazia para o argumento imports ou packages para indicar que nenhuma importação ou pacote é usado para essa UDF ou procedimento armazenado. Anteriormente, a especificação de uma lista vazia significava que a função utilizaria importações ou pacotes em nível de sessão.

  • Implementação melhorada do __repr__ de tipos de dados em types.py. A propriedade não utilizada type_name foi removida.

  • Classe de exceção específica do Snowpark adicionada para erros de SQL. Isso substitui o anterior ProgrammingError do conector de Python.

Melhorias

  • Bloqueio adicionado a uma UDF ou UDTF quando ela é chamado pela primeira vez por thread.

  • Mensagem de erro melhorada para erros de pickling que ocorreram durante a criação da UDF.

  • Consulta de ID incluída ao registrar a consulta falhada.

Correções de bugs

  • Corrigido um bug no qual dados não integrais (como carimbos de data/hora) eram ocasionalmente convertidos a integers ao chamar DataFrame.to_pandas().

  • Corrigido um bug no qual DataFrameReader.parquet() não conseguia ler um arquivo de parquet quando sua coluna continha espaços.

  • Corrigido um bug no qual DataFrame.copy_into_table() falhava quando o dataframe era criado lendo um arquivo com esquemas inferidos.

Preterições

  • Session.flatten() e DataFrame.flatten().

Atualizações de dependências

  • Versão do cloudpickle <= 2.0.0 restringida.

Versão 0.6.0

A versão 0.6.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Suporte adicionado para as UDFs vetorizadas via API de lote de UDF de Python. A API de lote de UDF de Python permite definir funções de Python que recebem lotes de linhas de entrada como DataFrames do Pandas e retornam lotes de resultados como Arrays ou Series do Pandas. Isso pode melhorar o desempenho de UDFs no Snowpark.

  • Suporte adicionado para inferir o esquema de um DataFrame por padrão quando ele é criado lendo um arquivo Parquet, Avro ou ORC no estágio.

  • Funções current_session(), current_statement(), current_user(), current_version(), current_warehouse(), date_from_parts(), date_trunc(), dayname(), dayofmonth(), dayofweek(), dayofyear(), grouping(), grouping_id(), hour(), last_day(), minute(), next_day(), previous_day(), second(), month(), monthname(), quarter(), year(), current_database(), current_role(), current_schema(), current_schemas(), current_region(), current_avaliable_roles(), add_months(), any_value(), bitnot(), bitshiftleft(), bitshiftright(), convert_timezone(), uniform(), strtok_to_array(), sysdate(), time_from_parts(), timestamp_from_parts(), timestamp_ltz_from_parts(), timestamp_ntz_from_parts(), timestamp_tz_from_parts(), weekofyear(), percentile_cont() adicionadas a snowflake.snowflake.functions.

Melhorias

  • Suporte adicionado para a criação de um DataFrame vazio com um esquema específico usando o método Session.create_dataframe().

  • Nível de registro em log alterado de INFO para DEBUG para vários registros (por exemplo, a consulta executada) ao avaliar um dataframe.

  • Mensagem de erro melhorada quando uma UDF não é criada devido a erros de pickling.

  • Removidas as seguintes APIs que foram preteridas em 0.4.0: DataFrame.groupByGroupingSets(), DataFrame.naturalJoin(), DataFrame.joinTableFunction, DataFrame.withColumns(), Session.getImports(), Session.addImport(), Session.removeImport(), Session.clearImports(), Session.getSessionStage(), Session.getDefaultDatabase(), Session.getDefaultSchema(), Session.getCurrentDatabase(), Session.getCurrentSchema(), Session.getFullyQualifiedCurrentSchema().

  • typing-extension adicionada como uma nova dependência com a versão >= 4.1.0.

Correções de bugs

  • Dependências rígidas do Pandas removidas no método Session.create_dataframe().

Versão 0.5.0

A versão 0.5.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Adicionada API de procedimentos armazenados.

  • Propriedade Session.sproc e sproc() adicionada a snowflake.snowpark.functions, de forma que você pode registrar procedimentos armazenados.

  • Session.call adicionado para chamar procedimentos armazenados pelo nome.

  • UDFRegistration.register_from_file() adicionado para permitir o registro de UDFs diretamente de arquivos fonte de Python ou arquivos zip.

  • UDFRegistration.describe() adicionado para descrever uma UDF.

  • DataFrame.random_split() adicionado para fornecer uma forma de dividir aleatoriamente um dataframe.

  • Funções md5(), sha1(), sha2(), ascii(), initcap(), length(), lower(), lpad(), ltrim(), rpad(), rtrim(), repeat(), soundex(), regexp_count(), replace(), charindex(), collate(), collation(), insert(), left(), right(), endswith() adicionadas a snowflake.snowpark.functions.

  • A função call_udf() agora também aceita valores literais.

  • Palavra-chave distinct fornecida em array_agg().

Correções de bugs

  • Correção de um problema que fazia com que DataFrame.to_pandas() tivesse uma coluna de cadeia de caracteres se Column.cast(IntegerType()) fosse usado.

  • Correção de um bug em DataFrame.describe() quando há mais de uma coluna de cadeia de caracteres.

Versão 0.4.0

A versão 0.4.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Agora você pode especificar quais pacotes do Anaconda usar ao definir UDFs.

  • add_packages(), get_packages(), clear_packages() e remove_package() adicionados à classe Session.

  • add_requirements() adicionado a Session para que você possa usar um arquivo de requisitos para especificar quais pacotes essa sessão irá usar.

  • Parâmetro packages adicionado à função snowflake.snowpark.functions.udf() e ao método UserDefinedFunction.register() para indicar dependências no nível da UDF no pacote do Anaconda ao criar uma UDF.

  • Parâmetro imports adicionado a snowflake.snowpark.functions.udf() e UserDefinedFunction.register() para especificar importações de código no nível da UDF.

  • Parâmetro session adicionado à função udf() e UserDefinedFunction.register() para que você possa especificar qual sessão usar para criar uma UDF se você tiver várias sessões.

  • Tipos Geography e Variant adicionados a snowflake.snowpark.types para serem usados como dicas de tipo para dados de Geografia e Variantes ao definir uma UDF.

  • Suporte adicionado para dados de Geografia geoJSON.

  • Adição de Table, uma subclasse do DataFrame para operações de tabela.

  • Métodos update e delete atualizam e excluem linhas de uma tabela no Snowflake.

  • O método merge funde dados de um DataFrame a uma Table.

  • Método DataFrame.sample() substituído com um parâmetro adicional seed que funciona em tabelas, mas não em exibições e subconsultas.

  • DataFrame.to_local_iterator() e DataFrame.to_pandas_batches() adicionados para permitir obter resultados de um iterador quando o conjunto de resultados retornado do banco de dados do Snowflake for muito grande.

  • DataFrame.cache_result() adicionado para caching das operações realizadas em um DataFrame em uma tabela temporária. As operações subsequentes no DataFrame original não têm efeito sobre o resultado no DataFrame de resultado em cache.

  • Propriedade DataFrame.queries adicionada para obter consultas SQL que serão executadas para avaliar o DataFrame.

  • Session.query_history() adicionado como gestor de contexto para monitorar consultas SQL executadas em uma sessão, incluindo todas as consultas SQL para avaliar DataFrames criados de uma sessão. Tanto a ID de consulta como o texto da consulta são registrados.

  • Agora você pode criar uma instância de Session a partir de uma instância de snowflake.connector.SnowflakeConnection já estabelecida. Use o parâmetro connection em Session.builder.configs().

  • use_database(), use_schema(), use_warehouse(), e use_role() adicionados à classe Session para trocar o banco de dados/esquema/warehouse/função após uma sessão ser criada.

  • DataFrameWriter.copy_into_table() adicionado para descarregar um DataFrame para arquivos em estágio.

  • DataFrame.unpivot() adicionado.

  • Column.within_group() adicionado para ordenar as linhas por colunas com algumas funções de agregação.

  • Funções listagg(), mode(), div0(), acos(), asin(), atan(), atan2(), cos(), cosh(), sin(), sinh(), tan(), tanh(), degrees(), radians(), round(), trunc(), e factorial() adicionadas a snowflake.snowpark.functions.

  • Argumento opcional ignore_nulls adicionado na função lead() e lag().

  • O parâmetro condition da função when() e iff() agora aceita expressões SQL.

Melhorias

  • Todos os nomes de funções e métodos foram renomeados para usar a nomenclatura snake case, que é mais comum em Python. Por conveniência, alguns nomes em camel case são mantidos como alias para APIs em snake case. Recomenda-se usar as APIs em snake case.

  • Esses métodos foram preteridos na classe Session e substituídos por seus equivalentes em snake case: getImports(), addImports(), removeImport(), clearImports(), getSessionStage(), getDefaultSchema(), getDefaultSchema(), getCurrentDatabase() e getFullyQualifiedCurrentSchema().

  • Esses métodos foram preteridos na classe DataFrame e substituídos por seus equivalentes em snake case: groupingByGroupingSets(), naturalJoin(), withColumns() e joinTableFunction().

  • A propriedade DataFrame.columns agora é consistente com DataFrame.schema.names e com os requisitos de identificadores de bancos de dados do Snowflake.

  • Column.__bool__() agora gera um TypeError. Isso proibirá o uso de operadores lógicos and, or, not no objeto Column. Por exemplo, col("a") > 1 and col("b") > 2 irá gerar um TypeError. Use (col("a") > 1) & (col("b") > 2) em vez disso.

  • PutResult e GetResult alterados para a subclasse NamedTuple.

  • Correção de um bug quando o caminho local ou o local do estágio tem um espaço ou outros caracteres especiais.

  • DataFrame.describe() alterados para que colunas que não sejam numéricas e não sejam cadeias de caracteres sejam ignoradas em vez de gerar uma exceção.

Atualizações de dependências

  • snowflake-connector-python atualizado para 2.7.4.

Versão 0.3.0

A versão 0.3.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • Column.isin() adicionado com um alias Column.in_().

  • Adição de Column.try_cast(), que é uma versão especial de cast(). Ele tenta converter uma expressão de cadeia de caracteres para outros tipos e retorna null se a conversão não for possível.

  • Column.startswith() e Column.substr() adicionados para processar colunas de cadeias de caracteres.

  • Column.cast() agora também aceita um valor str para indicar o tipo de conversão, além de uma instância DataType.

  • DataFrame.describe() adicionado para resumir as estatísticas de um DataFrame.

  • DataFrame.explain() adicionado para imprimir o plano de consulta de um DataFrame.

  • DataFrame.filter() e DataFrame.select_expr() agora aceitam uma expressão SQL.

  • Adição de um novo parâmetro bool chamado create_temp_table aos métodos DataFrame.saveAsTable() e Session.write_pandas() para criar opcionalmente uma tabela temporária.

  • DataFrame.minus() e DataFrame.subtract() adicionados como alias para DataFrame.except_().

  • regexp_replace(), concat(), concat_ws(), to_char(), current_timestamp(), current_date(), current_time(), months_between(), cast(), try_cast(), greatest(), least() e hash() adicionados ao módulo snowflake.snowpark.functions.

Correções de bugs

  • Correção de um problema no qual Session.createDataFrame(pandas_df) e Session.write_pandas(pandas_df) geravam uma exceção quando DataFrame do Pandas tinham espaços no nome da coluna.

  • Correção de um problema no qual DataFrame.copy_into_table() às vezes imprimia erroneamente uma entrada de registro no nível de um erro.

  • Correção de um problema de documentação de API no qual algumas APIs de DataFrame estavam faltando na documentação.

Atualizações de dependências

Versão 0.2.0

A versão 0.2.0 da biblioteca do Snowpark introduz alguns novos recursos e melhorias.

Novos recursos

  • O método createDataFrame() foi adicionado para criar um DataFrame a partir de um DataFrame do Pandas.

  • O método write_pandas() foi adicionado para escrever um DataFrame do Pandas em uma tabela no Snowflake e obter um objeto DataFrame do Snowpark de volta.

  • Novas classes e métodos adicionados para chamar funções de janela.

  • Adição das novas funções cume_dist() para encontrar a distribuição cumulativa de um valor em relação a outros valores dentro de uma partição de janela, e row_number(), que retorna um número de linha único para cada linha dentro de uma partição de janela.

  • Adição de funções para computar estatísticas para DataFrames na classe DataFrameStatFunctions.

  • Adição de funções para lidar com valores em falta em um DataFrame na classe DataFrameNaFunctions.

  • Adição de novos métodos: rollup(), cube() e pivot() à classe DataFrame.

  • Adição da classe GroupingSets, que você pode usar com o método DataFrame groupByGroupingSets para executar um SQL GROUP BY GROUPING SETS.

  • Adição da nova classe FileOperation(session), que você pode usar para carregar e baixar arquivos de e para um estágio.

  • Adição do método copy_into_table() para carregar dados de arquivos em um estágio para uma tabela.

  • Em expressões CASE, as funções when e otherwise agora aceitam tipos de Python além de objetos Column.

  • Quando você registrar uma UDF, agora você pode opcionalmente definir o parâmetro replace como True para substituir uma UDF existente com o mesmo nome.

Melhorias

  • UDFs são agora compactadas antes de serem carregadas no servidor. Isso as torna cerca de 10 vezes menores, o que pode ajudar quando você estiver usando grandes arquivos de modelos de ML.

  • Quando o tamanho de uma UDF for menor que 8196 bytes, ela será carregada como código inline em vez de ser carregada para um estágio.

Correções de bugs

  • Correção de um problema no qual a instrução df.select(when(col("a") == 1, 4).otherwise(col("a"))), [Row(4), Row(2), Row(3)] gerava uma exceção.

  • Correção um problema no qual df.toPandas() gerava uma exceção quando um DataFrame era criado a partir de grandes quantidades de dados locais.