Novas funções: ARRAY_SORT, ARRAY_MIN e ARRAY_MAX podem entrar em conflito com UDFs com nomes semelhantes

Atenção

Essa mudança de comportamento está no pacote 2023_05.

Para saber o status atual do pacote, consulte Histórico do pacote.

Na versão atual, Snowflake apresenta novas funções internas com os seguintes nomes e assinaturas:

  • ARRAY_SORT retorna os elementos da ARRAY de entrada em ordem de classificação. Esta função possui as seguintes assinaturas:

    • ARRAY_SORT(input_array)

      Classifica os elementos em ordem crescente com NULLs colocados no fim da matriz.

    • ARRAY_SORT(input_array, sort_ascending)

      Classifica os elementos em ordem crescente se sort_ascending for TRUE ou em ordem decrescente se sort_ascending for FALSE.

      NULLs são classificados por último se sort_ascending for TRUE ou primeiro se sort_ascending for FALSE.

    • ARRAY_SORT(input_array, sort_ascending, nulls_first)

      Classifica os elementos em ordem crescente se sort_ascending for TRUE ou em ordem decrescente se sort_ascending for FALSE.

      NULLs são classificados primeiro se nulls_first for TRUE ou por último se nulls_first for FALSE.

    Não há garantia de que esta função forneça uma classificação estável ao comparar valores de dois tipos numéricos ou de carimbo de data/hora diferentes (ou objetos contendo esses tipos).

  • ARRAY_MIN retorna o elemento mínimo definido na matriz de entrada

  • ARRAY_MAX retorna o elemento máximo definido na matriz de entrada

Se você tiver UDFs nomeadas ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX com as mesmas assinaturas, essa mudança de comportamento terá o seguinte efeito:

Anteriormente:

Chamadas para ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX são resolvidas para suas UDFs.

Atualmente:

Chamadas para ARRAY_SORT, ARRAY_MIN ou ARRAY_MAX serão resolvidas para as novas funções internas.

As funções internas podem funcionar de maneira diferente das UDFs.

Se a semântica documentada das novas funções internas não corresponder à semântica de suas UDFs, você poderá:

  • Renomear suas UDFs (usando ALTER FUNCTION … RENAME TO …) e substituir todas as referências ao nome da UDF original pelo novo nome.

  • Qualificar totalmente todas as referências às suas UDFs especificando os nomes do banco de dados e do esquema que contém as UDFs. Por exemplo:

    SELECT my_database.my_schema.array_sort(...);
    
    Copy

Ref: 1135