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 sesort_ascending
for FALSE.NULLs são classificados por último se
sort_ascending
for TRUE ou primeiro sesort_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 sesort_ascending
for FALSE.NULLs são classificados primeiro se
nulls_first
for TRUE ou por último senulls_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(...);
Ref: 1135