Pacote 2022_06¶
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 Setembro de 2022.
Importante
Salvo indicação em contrário, estas mudanças estão no pacote 2022_06, que foi habilitado por padrão na versão 6.32.
Neste tópico:
Mudanças de SQL — Geral¶
Armazenamento Fail-safe: correção de erros para casos de cantos que resultam em faturamento insuficiente¶
Devido a um erro interno do sistema, algumas tabelas permanentes não foram faturadas para armazenamento por bytes de Fail-safe. Especificamente, se uma mesa transitória foi criada como um clone de uma tabela permanente, e a tabela permanente foi posteriormente descartada, Snowflake não cobrou pelo armazenamento Fail-safe da tabela permanente.
O faturamento para Fail-safe mudou da seguinte forma:
- Anteriormente:
Algumas tabelas permanentes não foram faturadas para o armazenamento do Fail-safe.
- Atualmente:
Os clientes são cobrados pelo armazenamento Fail-safe para todas as tabelas permanentes.
Mudanças de SQL — Comandos e funções¶
Comandos CREATE DATABASE e CREATE SCHEMA: cláusula OR REPLACE resulta em referências pendentes para políticas¶
O comportamento dos comandos CREATE DATABASE e CREATE SCHEMA mudou da seguinte forma:
- Anteriormente:
Snowflake permitiu que os comandos CREATE OR REPLACE DATABASE e CREATE OR REPLACE SCHEMA fossem executados no banco de dados ou esquema contendo uma política de mascaramento ou política de acesso a linhas que protegem um objeto em um banco de dados ou esquema diferente. Por exemplo:
Uma política de mascaramento chamada
db1.s1.p1
protege uma coluna chamadadb2.s1.t1.c1
.Uma política de acesso a linhas chamada
db1.s1.p2
protege uma tabela chamadadb2.s1.t1
.
O resultado foi uma referência pendente que fez com que todas as consultas na coluna ou objeto falhassem.
Observe que este comportamento também se aplicava a instruções CLONE como
CREATE OR REPLACE SCHEMA S1 CLONE S2;
.- Atualmente:
O comando CREATE OR REPLACE DATABASE ou CREATE OR REPLACE SCHEMA falha se o resultado for uma referência pendente em um objeto protegido por política. O Snowflake retorna uma das seguintes mensagens de erro:
Para CREATE OR REPLACE DATABASE:
Cannot drop database because: Policy '<db.schema.policy>' used by schema '<db.schema>' in another database
Para CREATE OR REPLACE SCHEMA:
Cannot drop schema because: Policy '<db.schema.policy>' used by another schema '<db.schema>'
Se uma das duas mensagens de erro ocorrer, consulte a exibição POLICY_REFERENCES do Account Usage, use uma função para desativar a política de mascaramento ou de acesso a linhas e, em seguida, tente novamente a instrução CREATE OR REPLACE.
Por exemplo:
Consultar a exibição:
Referências de política de esquema cruzado que precisam ser removidas antes da substituição:
select * from snowflake.account_usage.policy_references where policy_db=<policy_db> and policy_schema=<policy_schema_to_replace> and ref_schema_name != <policy_schema>;
Referências de política de banco de dados cruzado que precisam ser removidas antes da substituição:
select * from snowflake.account_usage.policy_references where policy_db=<policy_db_to_replace>’ and ref_database_name != <policy_db>;
Remover as políticas:
Para políticas de mascaramento:
alter table <table_name> modify column <col_name> unset masking policy;
Para políticas de acesso a linhas:
alter table <table_name> drop all row access policies;
Execute o comando CREATE OR REPLACE novamente.
Observe que, com operações CLONE, você deve armazenar os objetos da política em um banco de dados ou esquema separado antes de executar as instruções CLONE.
Funções INFER_SCHEMA: nova coluna ORDER_ID na saída¶
A saída da função INFER_SCHEMA agora inclui uma nova coluna ORDER_ID que indica a ordem das colunas nos arquivos preparados.
Atualmente, quando você cria uma tabela com as definições das colunas derivadas de um conjunto de arquivos preparados (usando CREATE TABLE … USING TEMPLATE), a ordem das colunas na tabela é aleatória. Embora a ordem de colunas da tabela não seja importante para o Snowflake, isto pode causar confusão quando você compara a ordem da coluna de arquivo com a ordem da coluna da tabela. A nova coluna ORDER_ID na saída INFER_SCHEMA pode ajudar você a garantir que as tabelas criadas com o esquema detectado tenham a mesma ordem de coluna.
Você pode recuperar o esquema de qualquer arquivo usando INFER_SCHEMA, como o exemplo a seguir demonstra. A saída inclui uma nova coluna ORDER_ID e é ordenada automaticamente por ORDER_ID para o cenário de esquema único:
SELECT * FROM TABLE( INFER_SCHEMA( LOCATION=>'@***_****_STAGE/' , FILE_FORMAT=>'FFPARQUET' ) );
Além disso, você pode criar uma tabela usando o esquema detectado a partir de arquivos preparados e ordenar as colunas por ORDER_ID, como o exemplo a seguir demonstra:
CREATE OR REPLACE TABLE BIG_TABLE USING TEMPLATE ( SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) WITHIN GROUP (ORDER BY ORDER_ID) // NEW FROM TABLE( INFER_SCHEMA(LOCATION=>'@***_****_STAGE/', FILE_FORMAT=>'FFPARQUET') ) ); DESC TABLE BIG_TABLE;
Observe que a ordenação das colunas por ORDER_ID só se aplica se todos os arquivos preparados compartilharem um único esquema. Se o conjunto de arquivos de dados preparados incluir vários esquemas com nomes de colunas compartilhadas, a ordem representada na coluna ORDER_ID pode não corresponder a nenhum arquivo único.
Mudanças de SQL — Exibições de uso e exibições Information Schema/funções de tabela¶
Exibição FUNCTIONS (Account Usage): novas colunas na exibição¶
A saída da exibição FUNCTIONS no Account Usage agora inclui as seguintes colunas novas:
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
PACKAGES |
STRING |
Especifica os pacotes solicitados pela função. |
RUNTIME_VERSION |
STRING |
Especifica a versão do runtime da função. NULL se a função for SQL ou Javascript. |
INSTALLED_PACKAGES |
STRING |
Lista todos os pacotes instalados pela função. Saída apenas para as funções Python. |