Pacote 2022_01

Este tópico descreve as seguintes mudanças de comportamento (se houver) do mês:

  • Recursos que foram descontinuados.

  • Pacote de mudanças que foram ativadas.

  • Outras mudanças não inclusas no pacote que foram implementadas.

Se tiver alguma dúvida sobre estas mudanças, entre em contato com o suporte Snowflake.

Para obter mais detalhes sobre os novos recursos, melhorias e correções introduzidos neste mês, consulte Março de 2022.

Importante

Salvo indicação em contrário, estas mudanças estão no pacote 2022_01, que foi habilitado por padrão no lançamento da mudança de comportamento 6.7.

Neste tópico:

Mudanças de SQL — Geral

Transações: a confirmação de uma transação anulada retorna uma mensagem de erro

Com essa mudança, a tentativa de confirmar uma transação que já foi anulada retorna uma mensagem de erro:

Anteriormente:

Se você executava uma instrução COMMIT em uma transação que havia sido anulada (por exemplo, através de uma chamada SYSTEM$ABORT_TRANSACTION separada ou porque a sessão estava ociosa), a instrução parecia ser bem-sucedida com a seguinte mensagem:

Statement executed successfully.

Entretanto, a transação em si já havia sido anulada.

A mensagem de saída da instrução COMMIT implicava incorretamente que a transação havia sido bem-sucedida.

Atualmente:

Se você executar uma instrução COMMIT em uma transação que tenha sido anulada (por exemplo, através de uma chamada SYSTEM$ABORT_TRANSACTION separada ou porque a sessão está ociosa), a instrução falha com o código de erro 000670 e a seguinte mensagem:

000670 (57014): COMMIT failed. Your transaction '<nome>', id '<id>', was already aborted.

Mudanças de SQL — Comandos e funções

SHOW TAGS: nova coluna na saída

A seguinte coluna foi adicionada à saída do comando SHOW TAGS:

  • allowed_values: essa nova coluna especifica os valores de cadeia de caracteres que podem ser definidos quando uma tag é atribuída a um objeto. Se uma tag não tiver allowed_values especificados, o valor da coluna é NULL.

Para ajudar a limitar o impacto dessa mudança, a nova coluna foi adicionada como a última coluna na saída.

SHOW USERS: suporte adicionado para resultados paginados, resultados limitados e resultados concisos

O comportamento do comando SHOW USERS mudou da seguinte forma:

Anteriormente:

O comando SHOW USERS limitava a saída de SQL a 10.000 linhas e oferecia suporte apenas à seguinte sintaxe:

SHOW USERS [ LIKE '<pattern>' ]
Copy
Atualmente:

O comando SHOW USERS pode ser usado para retornar mais de 10.000 linhas e oferece suporte à seguinte sintaxe:

SHOW [ TERSE ] USERS [ LIKE '<pattern>' ] [ STARTS WITH '<name_string>' ] [ LIMIT <rows> [ FROM '<name_string>' ] ]
Copy

Onde:

  • TERSE opcionalmente retorna apenas o seguinte subconjunto das colunas de saída:

    name, created_on, display_name, first_name, last_name, email, org_identity, comment, has_password, has_rsa_public_key.

    Padrão: sem valor (todas as colunas são incluídas na saída).

  • STARTS WITH 'name_string' opcionalmente filtra a saída do comando com base nos caracteres que aparecem no início do nome de objeto. A cadeia de caracteres deve ser delimitada entre aspas simples e há distinção entre maiúsculas e minúsculas. Por exemplo, as seguintes cláusulas retornam resultados diferentes:

    ... STARTS WITH 'B' ...

    ... STARTS WITH 'b' ...

    Padrão: sem valor (nenhuma filtragem é aplicada à saída).

  • LIMIT rows [ FROM 'name_string' ] opcionalmente limita o número máximo de linhas retornadas, ao mesmo tempo em que permite a “paginação” dos resultados. Observe que o número real de linhas retornadas pode ser inferior ao limite especificado (por exemplo, o número de objetos existentes é menor que o limite especificado).

    A subcláusula opcional FROM 'name_string' serve efetivamente como um “cursor” para os resultados. Isso permite obter o número especificado de linhas seguindo a primeira linha cujo nome do objeto corresponde à cadeia de caracteres especificada:

    A cadeia de caracteres deve ser delimitada entre aspas simples e há distinção entre maiúsculas e minúsculas. Além disso, a cadeia de caracteres não tem que incluir o nome completo do objeto; nomes parciais têm suporte.

    Padrão: sem valor (nenhum limite é aplicado à saída).

Por padrão, SHOW USERS ainda retorna 10.000 linhas como antes. Se sua conta tem mais de 10.000 usuários, é possível executar o comando duas vezes para retornar usuários acima do limite 10.000:

SHOW USERS;

SHOW USERS LIMIT 10000 FROM 'JOE';
Copy
  • A primeira instrução retorna os primeiros 10.000 usuários. A última linha retornada é um usuário com o nome de usuário JOE.

  • A segunda instrução retorna os próximos 10.000 usuários após JOE.

Funções SYSTEM$EXTERNAL_TABLE_PIPE_STATUS e SYSTEM$PIPE_STATUS: detalhes adicionais na saída JSON

A saída JSON das funções SYSTEM$EXTERNAL_TABLE_PIPE_STATUS e SYSTEM$PIPE_STATUS agora inclui os seguintes pares adicionais de nomes/valores de cadeias de caracteres para melhorar a compreensão de carregamentos de dados específicos, incluindo erros encontrados durante os carregamentos:

Nome

Descrição

Notas

oldestPendingFilePath

Caminho do arquivo de dados mais antigo atualmente enfileirado para processamento. Carimbo de data/hora em que o arquivo foi adicionado à fila é retornado na propriedade oldestFileTimestamp existente.

lastIngestedTimestamp

Carimbo de data/hora em que o arquivo mais recente foi carregado com sucesso por Snowpipe na tabela de destino.

Apenas SYSTEM$PIPE_STATUS.

lastIngestedFilePath

Caminho do arquivo carregado no carimbo de data/hora especificado em lastIngestedTimestamp.

Apenas SYSTEM$PIPE_STATUS.

lastPipeErrorTimestamp

Carimbo de data/hora em que a compilação da instrução COPY INTO na definição do canal para a execução produziu um erro pela última vez.

Apenas SYSTEM$PIPE_STATUS.

lastPipeFaultTimestamp

Carimbo de data/hora em que um erro interno no processo Snowflake foi detectado pela última vez.

lastPulledFromChannelTimestamp

Carimbo de data/hora em que Snowpipe efetuou pull pela última vez das notificações de eventos “criar objeto” do canal da fila de Amazon Simple Queue Service (SQS), da fila de Google Pub/Sub ou da fila de armazenamento de Microsoft Azure.

lastForwardedFilePath

Caminho do arquivo de dados identificado na última mensagem de evento “criar objeto” encaminhada para o canal.

Os exemplos a seguir mostram exemplos da saída de problemas comuns encontrados por Snowpipe. Os detalhes adicionais na saída da função podem ajudá-lo a diagnosticar esses e outros problemas com seus carregamentos de dados:

  • Fila de notificação configurada incorretamente:

    {"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":0,"lastPulledFromChannelTimestamp:"2022-01-20T06:24:44.771Z"}
    
    Copy

    Snowpipe tenta periodicamente efetuar pull de notificações de eventos “criar objeto” para o canal da fila de Amazon Simple Queue Service (SQS), da fila de Google Pub/Sub ou da fila de armazenamento de Microsoft Azure. Um valor ausente ou desatualizado lastPulledFromChannelTimestamp indica que Snowpipe não foi capaz de se conectar à fila de armazenamento.

    Se o carimbo de data/hora lastPulledFromChannelTimestamp é recente, mas numOutstandingMessagesOnChannel é 0, então Snowpipe pode receber notificações de eventos da fila, mas nenhuma notificação foi enfileirada. Esse último problema pode ocorrer quando nenhum arquivo de dados foi criado no local de armazenamento ou quando a assinatura da fila está mal configurada.

  • Problema de permissão da fila de notificação:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:44:08.461Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    O valor channelErrorMessage indica que Snowflake não recebeu permissões suficientes para acessar a fila de armazenamento e efetuar pull das notificações de eventos.

  • Incoerência nos caminhos especificados na definição do canal e na configuração da notificação de eventos:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T06:00:01.669Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T06:04:01.089Z","lastForwardedMessageTimestamp":"2022-01-20T06:00:02.741Z","lastPulledFromChannelTimestamp":"2022-01-20T06:05:28.49Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    O carimbo de data/hora lastForwardedMessageTimestamp é anterior a lastReceivedMessageTimestamp. Isso indica que Snowpipe efetuou pull de pelo menos uma mensagem de evento “criar objeto” da fila de armazenamento, mas a mensagem não correspondeu ao caminho definido no canal e, portanto, não foi encaminhada ao canal para processamento.

  • Problema de permissão do local de armazenamento externo:

    {"executionState":"STALLED_STAGE_PERMISSION_ERROR","pendingFileCount":0,"error":"Failed to access the stage, please check storage permission.", "lastPipeErrorTimestamp":"2022-01-20T04:40:01.747Z", "lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:39:58.494Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    O valor executionState e a mensagem de erro indicam que não foram concedidas ao Snowflake as permissões mínimas no local de armazenamento (ou seja, um bucket Amazon S3 ou Google Cloud Storage ou um contêiner Microsoft Azure) para acessar os arquivos de dados no local de armazenamento.

  • Erro na compilação da instrução COPY INTO <tabela> na definição do canal:

    {"executionState":"STALLED_COMPILATION_ERROR","pendingFileCount":0,"error":"SQL compilation error: error line 1 at position 29\ninvalid identifier 'LAST_NAME'",", "lastPipeErrorTimestamp":"2022-01-20T17:54:30.4Z", "lastIngestedTimestamp":"2022-01-20T17:51:04.73Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T17:51:03.336Z","lastForwardedMessageTimestamp":"2022-01-20T17:51:05.081Z","lastPulledFromChannelTimestamp":"2022-01-20T18:03:00.637Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    O valor executionState e a mensagem de erro indicam que Snowpipe não pôde executar a instrução COPY INTO <tabela> na definição do canal para carregar os arquivos de dados recuperados do local de armazenamento.

Mudanças de SQL — Usage View e Information Schema

Exibição FUNCTIONS: novas colunas

As seguintes colunas foram adicionadas à exibição ACCOUNT_USAGE.FUNCTIONS para torná-la consistente com a exibição INFORMATION_SCHEMA.FUNCTIONS:

  • handler

  • imports

  • target_path

Para ajudar a limitar o impacto dessa mudança, as novas colunas foram adicionadas como as últimas colunas na exibição.

Exibição FUNCTIONS, DESCRIBE FUNCTION e função GET_DDL: novas colunas

As seguintes colunas foram adicionadas à exibição INFORMATION_SCHEMA.FUNCTIONS, assim como a saída do comando DESCRIBE FUNCTION e da função GET_DDL:

  • request_translator: o nome da função definida pelo usuário JavaScript do tradutor de solicitações, se existir.

  • response_translator: o nome da função definida pelo usuário JavaScript do tradutor de respostas, se existir.

​​​​​Tradutores de solicitações e tradutores de respostas permitem alterar o formato dos dados enviados e recebidos de serviços remotos utilizados por funções externas. Para obter mais informações, consulte Uso de tradutores de solicitação e resposta com dados para um serviço remoto.

Função POLICY_REFERENCES: novas colunas

A coluna created_on foi removida da saída da função de tabela INFORMATION_SCHEMA.POLICY_REFERENCES.

As seguintes colunas foram adicionadas à saída da função de tabela INFORMATION_SCHEMA.POLICY_REFERENCES:

  • tag_name

  • tag_database

  • tag_schema

  • policy_status

Essas novas colunas podem ser usadas para descobrir associações de políticas em uma coluna pelo nome da tag.

Para ajudar a limitar o impacto desta mudança, essas novas colunas foram adicionadas como as últimas colunas na saída.

Exibição TAGS: nova coluna

A seguinte coluna foi adicionada à exibição ACCOUNT_USAGE.TAGS:

  • allowed_values: especifica os valores de cadeia de caracteres que podem ser definidos quando uma tag é atribuída a um objeto. Se uma tag não tiver allowed_values especificados, o valor da coluna é NULL.

Para ajudar a limitar o impacto desta mudança, a nova coluna foi adicionada como a última coluna na exibição.

Função TASK_HISTORY: histórico de uso de tarefa retornado para os sete dias anteriores por padrão

O comportamento da função de tabela INFORMATION_SCHEMA.TASK_HISTORY mudou da seguinte forma:

Anteriormente:

Por padrão, a função retornava registros de execuções de tarefas históricas dentro de um intervalo de tempo sem data ou hora de início determinada. Devido à atividade interna de limpeza de dados, o intervalo de tempo era geralmente limitado aos 14 dias anteriores; entretanto, em raras circunstâncias, o período poderia se estender ainda mais no passado.

Se o argumento SCHEDULED_TIME_RANGE_START havia sido especificado em uma consulta, o intervalo de tempo era limitado aos registros históricos dos últimos 7 dias ou menos.

Atualmente:

A função retorna registros de execuções de tarefas históricas que começaram dentro dos últimos 7 dias.

Observe que, como no comportamento anterior, se o argumento SCHEDULED_TIME_RANGE_START foi especificado em uma consulta, o intervalo de tempo continua limitado aos registros históricos dos últimos 7 dias ou menos.

Exibição/função TASK_HISTORY: nova coluna

A seguinte coluna foi adicionada à saída da exibição ACCOUNT_USAGE.TASK_HISTORY e da função de tabela INFORMATION_SCHEMA.TASK_HISTORY:

  • scheduled_from: especifica o mecanismo que causou a execução da tarefa. O único valor retornado na coluna é SCHEDULE. Esse valor indica que a execução da tarefa foi iniciada pelo agendamento na definição da tarefa. Para execuções de tarefas filho em uma árvore de tarefas, a coluna também retorna SCHEDULE.

A coluna foi introduzida para oferecer suporte à funcionalidade futura.

Exibições de warehouse: saída consistente do nome de warehouse

O proprietário de um warehouse (ou seja, a função com o privilégio OWNERSHIP sobre o warehouse), ou uma função superior, pode renomear o warehouse usando a nova interface da Web ou o comando ALTER WAREHOUSE … RENAME.

O comportamento quando um warehouse é renomeado mudou da seguinte forma:

Anteriormente:

O nome do warehouse era exibido de forma inconsistente nas colunas de exibição a seguir:

  • ACCOUNT_USAGE, READER_ACCOUNT_USAGE e ORGANIZATION_USAGE

    • WAREHOUSE_METERING_HISTORY.WAREHOUSE_HAME

  • ACCOUNT_USAGE

    • METERING_HISTORY.NAME

Registros recentes nas exibições (2 a 3 horas antes da mudança de nome do warehouse) mostravam o novo nome; no entanto, registros mais antigos exibiam o nome antigo.

Atualmente:

As colunas WAREHOUSE_NAME e NAME nessas exibições mostram o novo nome do warehouse de todos os registros.

Nota

Essa mudança de comportamento não afeta as seguintes exibições e funções de tabela, que já mostram o novo nome de warehouse de todos os registros na coluna WAREHOUSE_NAME:

  • ACCOUNT_USAGE

    • Exibição WAREHOUSE_EVENTS_HISTORY

    • Exibição WAREHOUSE_LOAD_HISTORY

  • INFORMATION_SCHEMA

    • Função de tabela WAREHOUSE_LOAD_HISTORY

    • Função de tabela WAREHOUSE_METERING_HISTORY

Mudanças de extensibilidade

Procedimentos armazenados JavaScript: mudanças no tratamento de erros

O tratamento de erros de procedimentos armazenados escritos em JavaScript mudou da seguinte forma:

Anteriormente:

Todos os erros gerados por procedimentos armazenados JavaScript tinham o mesmo código de erro e SQLSTATE (100183 e P0000, respectivamente) e a mesma mensagem de erro genérica ("Execution error in stored procedure SP_NAME...").

O nome da propriedade para acessar o rastreamento da pilha era stackTraceTxt.

Por exemplo, se um objeto de banco de dados não existia, o objeto de exceção continha o seguinte:

{
  "stackTraceTxt":"At Statement.execute, line 12 position 19",
  "state":"P0000",
  "code":100183,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

Se seu procedimento armazenado não capturasse a exceção, chamar o procedimento armazenado produzia o seguinte resultado:

100183 (P0000): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy
Atualmente:

Se o procedimento armazenado executar qualquer consulta (como a maioria dos procedimentos armazenados), e se o erro ocorrer durante a execução da consulta filho, o código de erro e SQLSTATE da consulta filho é usado.

Além disso, o nome da propriedade para acesso ao rastreamento da pilha foi alterado para stack. Embora a propriedade stackTraceTxt ainda esteja presente com a mudança de comportamento ativada, stackTraceTxt será removida em um lançamento futuro.

Por exemplo, se um objeto de banco de dados não existe, o objeto de exceção contém o seguinte:

{
  "stack":"Statement.execute, line 12 position 19",
  "stackTraceTxt":"Statement.execute, line 12 position 19", // To be removed in a future release
  "state":"42S02",
  "code":2003,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

Se seu procedimento armazenado não capturar a exceção, chamar o procedimento armazenado produz o seguinte resultado:

002003 (42S02): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy