ALTER VIEW¶
Modifica as propriedades para uma exibição existente. Atualmente, as únicas operações com suporte são:
Renomeação de uma exibição.
Conversão para (ou revertendo de) uma exibição segura.
Adição, substituição, remoção de comentário para uma exibição.
Note que você não pode usar este comando para mudar a definição de uma exibição. Para mudar a definição da exibição, você deve descartar a visualização e depois recriá-la.
- Consulte também:
Sintaxe¶
ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER VIEW [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT
ALTER VIEW [ IF EXISTS ] <name> SET SECURE
ALTER VIEW [ IF EXISTS ] <name> SET CHANGE_TRACKING = { TRUE | FALSE }
ALTER VIEW [ IF EXISTS ] <name> UNSET SECURE
ALTER VIEW [ IF EXISTS ] <name> dataGovnPolicyTagAction
Onde:
dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ FORCE ] | UNSET AGGREGATION POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
Parâmetros¶
name
Especifica o identificador da visualização a ser alterada. Se o identificador contiver espaços ou caracteres especiais, toda a cadeia de caracteres deverá ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.
RENAME TO new_name
Especifica o novo identificador da visualização; deve ser único para o esquema.
Para obter mais detalhes, consulte Requisitos para identificadores.
Você pode mover o objeto para um banco de dados e/ou esquema diferente enquanto opcionalmente renomeia o objeto. Para isso, especifique um valor qualificado
new_name
que inclua o novo banco de dados e/ou nome do esquema no formuláriodb_name.schema_name.object_name
ouschema_name.object_name
, respectivamente.Nota
O banco de dados e/ou esquema de destino já deve existir. Além disso, um objeto com o mesmo nome não pode já existir no banco de dados de destino; caso contrário, a instrução retorna um erro.
É proibido mover um objeto para um esquema de acesso gerenciado a menos que o proprietário do objeto (ou seja, a função que tem o privilégio OWNERSHIP sobre o objeto) também possua o esquema de destino.
Quando um objeto é renomeado, outros objetos que fazem referência a ele devem ser atualizados com o novo nome.
SET ...
Especifica a propriedade a ser definida para a exibição:
SECURE
Especifica uma visualização como segura.
CHANGE_TRACKING = TRUE | FALSE
Especifica a habilitação ou desabilitação do rastreamento de alterações na tabela.
TRUE
habilita o rastreamento de alterações na exibição, e faz o ajuste em cascata em todas as tabelas subjacentes.FALSE
desabilita o rastreamento de alterações na exibição, e faz o ajuste em cascata em todas as tabelas subjacentes.
COMMENT = 'string_literal'
Adiciona um comentário ou substitui um comentário existente para a exibição.
Nota
Você deve definir cada propriedade da visualização individualmente.
UNSET ...
Especifica a propriedade a ser removida para a exibição, o que a restaura para os padrões.
SECURE
COMMENT
Ao redefinir uma propriedade/parâmetro, especificar somente o nome; especificar um valor para a propriedade retornará um erro.
Nota
Você deve reinicializar cada propriedade de visualização individualmente.
Política de governança de dados e ações de tag (dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
Especifica o nome da tag e o valor da cadeia de caracteres dela.
O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.
Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags para objetos e colunas.
policy_name
Identificador da política; deve ser único para seu esquema.
As cláusulas a seguir se aplicam a todos os tipos de tabelas que suportam políticas de acesso a linhas, como, entre outras, tabelas, exibições e tabelas de eventos. Para simplificar, as cláusulas referem-se apenas a “tabela”.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
Adiciona um política de acesso a linhas à tabela.
Pelo menos um nome de coluna deve ser especificado. Colunas adicionais podem ser especificadas com uma vírgula que separa cada nome de coluna. Use esta expressão para adicionar uma política de acesso a linhas tanto a uma tabela de eventos como a uma tabela externa.
DROP ROW ACCESS POLICY policy_name
Descarta uma política de acesso a linhas da tabela.
Use esta cláusula para descartar a política da tabela.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
Descarta a política de acesso a linhas definida na tabela e adiciona uma política de acesso a linhas à mesma tabela em uma única instrução SQL.
DROP ALL ROW ACCESS POLICIES
Descarta todas as associações de política de acesso a linhas de uma tabela.
Esta expressão é útil quando uma política de acesso a linhas é descartada de um esquema antes de descartar a política de uma tabela de eventos. Use esta expressão para descartar as associações de política de acesso a linhas da tabela.
SET AGGREGATION POLICY policy_name [ FORCE ]
Atribui uma política de agregação à tabela. Use o parâmetro opcional FORCE para substituir atomicamente uma política de agregação existente pela nova política de agregação.
UNSET AGGREGATION POLICY
Desanexa uma política de agregação da tabela.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
Especifica os argumentos para passar para a expressão SQL da política de mascaramento condicional.
A primeira coluna da lista especifica a coluna das condições da política para mascarar ou tokenizar os dados e deve corresponder à coluna para a qual a política de mascaramento é definida.
As colunas adicionais especificam as colunas a serem avaliadas para determinar se os dados em cada linha do resultado da consulta devem ser mascarados ou tokenizados quando uma consulta é feita na primeira coluna.
Se a cláusula USING for omitida, o Snowflake tratará a política de mascaramento condicional como uma política de mascaramento normal.
FORCE
Substitui uma política de mascaramento ou projeção que está atualmente definida em uma coluna por uma política diferente em uma única instrução.
Observe que a utilização da palavra-chave
FORCE
com uma política de mascaramento exige o tipo de dados da política na instrução ALTER TABLE (isto é, STRING) para corresponder ao tipo de dados da política de mascaramento atualmente definida na coluna (isto é, STRING).Se uma política de mascaramento não estiver definida atualmente na coluna, a especificação dessa palavra-chave não tem efeito.
Para obter mais detalhes, consulte: Substituição de uma política de mascaramento em uma coluna ou Substituir uma política de projeção.
Notas de uso¶
É proibido mover uma exibição para um esquema de acesso gerenciado (usando a sintaxe ALTER VIEW … RENAME TO), a menos que o proprietário da exibição (ou seja, a função que tem o privilégio OWNERSHIP na exibição) também seja o proprietário do esquema de destino.
Para políticas de mascaramento:
A cláusula
USING
e a palavra-chaveFORCE
são ambas opcionais; nenhuma delas é necessária para definir uma política de mascaramento em uma coluna. A cláusulaUSING
e a palavra-chaveFORCE
podem ser usadas separadamente ou em conjunto. Para obter mais detalhes, consulte:Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias tabelas, desde que a estrutura de colunas da tabela corresponda às colunas especificadas na política.
Ao modificar uma ou mais colunas da tabela com uma política de mascaramento ou a própria tabela com uma política de acesso a linhas, use a função POLICY_CONTEXT para simular uma consulta na(s) coluna(s) protegida(s) por uma política de mascaramento e na tabela protegida por uma política de acesso a linhas.
Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias exibições, desde que a estrutura de colunas da exibição corresponda às colunas especificadas na política.
Para políticas de acesso a linhas:
O Snowflake oferece suporte à adição e ao descarte de políticas de acesso a linhas em uma única instrução SQL.
Por exemplo, para substituir uma política de acesso a linhas que já esteja definida em uma tabela por uma política diferente, primeiro descarte a política de acesso a linhas e depois adicione a nova política.
Para determinado recurso (ou seja, tabela ou exibição), para
ADD
ouDROP
uma política de acesso a linhas, você deve ter o privilégio APPLY ROW ACCESS POLICY no esquema, ou o privilégio OWNERSHIP no recurso e o privilégio APPLY no recurso da política de acesso a linhas.Uma tabela ou exibição só pode ser protegida por uma política de acesso a linhas de cada vez. A adição de uma política falhará se o corpo da política se referir a uma coluna de exibição ou tabela protegida por uma política de acesso a linhas ou à coluna protegida por uma política de mascaramento.
Da mesma forma, a adição de uma política de mascaramento a uma coluna da tabela falhará se o corpo da política de mascaramento se referir a uma tabela protegida por uma política de acesso a linhas ou outra política de mascaramento.
As políticas de acesso a linhas não podem ser aplicadas a exibições do sistema ou funções de tabela.
Semelhante a outras operações DROP <objeto>, o Snowflake retornará um erro se tentar descartar uma política de acesso a linhas de um recurso que não tenha uma política de acesso a linhas adicionada a ele.
Se um objeto tiver uma política de acesso a linhas e uma ou mais políticas de mascaramento, a política de acesso a linhas será avaliada primeiro.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Exemplos¶
Renomear a exibição view1
como view2
:
ALTER VIEW view1 RENAME TO view2;
Converter uma exibição em uma exibição segura:
ALTER VIEW view1 SET SECURE;
Reverter uma exibição segura para uma exibição regular:
ALTER VIEW view1 UNSET SECURE;
Aplicar uma política de mascaramento de segurança em nível de coluna a uma coluna de exibição:
-- single column ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v; -- multiple columns ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v , COLUMN dob SET MASKING POLICY dob_mask_v ;
Remover uma política de mascaramento de segurança em nível de coluna de uma coluna da exibição:
-- single column ALTER VIEW user_info_v modify column ssn_number unset masking policy; -- multiple columns ALTER VIEW user_info_v modify column ssn_number unset masking policy , column dob unset masking policy ;
O exemplo seguinte adiciona uma política de acesso a linhas a uma exibição. Após definir as políticas, você pode verificar checando o esquema de informação.
alter view v1 add row access policy rap_v1 on (empl_id);
O exemplo a seguir descarta uma política de acesso a linhas de uma visualização. Verifique se as políticas foram descartadas consultando o esquema de informação.
alter view v1 drop row access policy rap_v1;
O exemplo a seguir mostra como combinar a adição e a eliminação de políticas de acesso a linhas em uma única instrução SQL para uma exibição. Verifique os resultados conferindo o esquema de informação.
alter view v1 drop row access policy rap_v1_version_1, add row access policy rap_v1_version_2 on (empl_id);