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:

CREATE VIEW , DROP VIEW , SHOW VIEWS , DESCRIBE VIEW

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
Copy

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> ... ]
Copy

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ário db_name.schema_name.object_name ou schema_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-chave FORCE são ambas opcionais; nenhuma delas é necessária para definir uma política de mascaramento em uma coluna. A cláusula USING e a palavra-chave FORCE 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 ou DROP 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;
Copy

Converter uma exibição em uma exibição segura:

ALTER VIEW view1 SET SECURE;
Copy

Reverter uma exibição segura para uma exibição regular:

ALTER VIEW view1 UNSET SECURE;
Copy

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
;
Copy

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
;
Copy

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);
Copy

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;
Copy

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);
Copy