ALTER DYNAMIC TABLE

Modifica as propriedades de uma tabela dinâmica.

Consulte também:

CREATE DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE, SHOW DYNAMIC TABLES

Neste tópico:

Sintaxe

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { tableColumnCommentAction }

ALTER DYNAMIC TABLE <name> { SET | UNSET } COMMENT = '<string_literal>'

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> searchOptimizationAction

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
  [ TARGET_LAG = { '<num> { seconds | minutes | hours | days }'  | DOWNSTREAM } ]
  [ WAREHOUSE = <warehouse_name> ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]

ALTER DYNAMIC TABLE [ IF EXISTS ] <name> UNSET
  [ DATA_RETENTION_TIME_IN_DAYS ],
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS ],
  [ DEFAULT_DDL_COLLATION ]
Copy

Onde:

clusteringAction ::=
  {
    CLUSTER BY ( <expr> [ , <expr> , ... ] )
    | { SUSPEND | RESUME } RECLUSTER
    | DROP CLUSTERING KEY
  }
Copy

Para obter mais informações, consulte Chaves de clustering e tabelas clusterizadas.

tableCommentAction ::=
  {
    ALTER | MODIFY [ ( ]
                           [ COLUMN ] <col1_name> COMMENT '<string>'
                         , [ COLUMN ] <col1_name> UNSET COMMENT
                       [ , ... ]
                   [ ) ]
  }
Copy
dataGovnPolicyTagAction ::=
  {
      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
  }
  |
  {
    { 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 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> ... ]
  }
  |
  {
      SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
    | UNSET TAG <tag_name> [ , <tag_name> ... ]
  }
Copy
searchOptimizationAction ::=
  {
    ADD SEARCH OPTIMIZATION [
      ON <search_method_with_target> [ , <search_method_with_target> ... ]
        [ EQUALITY ]
      ]

    | DROP SEARCH OPTIMIZATION [
      ON { <search_method_with_target> | <column_name> | <expression_id> }
        [ EQUALITY ]
        [ , ... ]
      ]

    | SUSPEND SEARCH OPTIMIZATION [
       ON { <search_method_with_target> | <column_name> | <expression_id> }
          [ , ... ]
     ]

    | RESUME SEARCH OPTIMIZATION [
       ON { <search_method_with_target> | <column_name> | <expression_id> }
          [ , ... ]
     ]
  }
Copy

Para obter mais detalhes, consulte Ações de otimização de pesquisa (searchOptimizationAction).

Parâmetros

name

Identificador da tabela dinâmica 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.

Para obter mais informações, consulte Requisitos para identificadores.

SUSPEND | RESUME

Especifica a ação a ser executada na tabela dinâmica:

  • SUSPEND suspende as atualizações na tabela dinâmica. Se a tabela dinâmica for usada por outras tabelas dinâmicas, elas também serão suspensas.

  • RESUME retoma as atualizações na tabela dinâmica. Retomar as operações em cascata a justante para todas as tabelas dinâmicas a jusante não suspensas manualmente.

RENAME TO new_name

Renomeia a tabela dinâmica especificada com um novo identificador que não está sendo usado atualmente por nenhuma outra tabela dinâmica no esquema.

A renomeação de uma tabela dinâmica exige o privilégio CREATE DYNAMIC TABLE no esquema da tabela dinâmica.

Você também pode mover a tabela dinâmica para um banco de dados e/ou esquema diferente e, opcionalmente, renomear a tabela dinâmica. 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.new_name ou schema_name.new_name, respectivamente.

Aplicam-se as seguintes restrições:

  • 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.

  • Você não pode 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 (tabela, coluna etc.) é renomeado, outros objetos que fazem referência a ele devem ser atualizados com o novo nome.

SWAP WITH target_dynamic_table_name

Troca duas tabelas dinâmicas em uma única transação. A função usada para executar esta operação deve ter privilégios OWNERSHIP em ambas as tabelas dinâmicas.

Aplicam-se as seguintes restrições:

  • Você só pode trocar uma tabela dinâmica por outra tabela dinâmica.

REFRESH

Especifica que a tabela dinâmica deve ser atualizada manualmente.

Tanto as tabelas dinâmicas suspensas pelo usuário quanto as suspensas automaticamente podem ser atualizadas manualmente. As tabelas dinâmicas atualizadas manualmente retornam MANUAL como a saída para refresh_trigger na função DYNAMIC_TABLE_REFRESH_HISTORY.

Observe que atualizar uma tabela dinâmica também atualiza todas as tabelas dinâmicas upstream com o mesmo carimbo de data/hora de dados. Para obter mais informações, consulte Alteração do warehouse ou meta de atraso para uma tabela dinâmica.

Para obter informações sobre o status de atualização da tabela dinâmica, consulte DYNAMIC_TABLE_REFRESH_HISTORY.

SET ...

Especifica uma ou mais propriedades/parâmetros a serem definidos para a tabela (separados por espaços em branco, vírgulas ou novas linhas):

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

Especifica a meta de atraso para a tabela dinâmica:

'num seconds | minutes | hours | days'

Especifica a quantidade máxima de tempo que o conteúdo da tabela dinâmica deve atrasar as atualizações nas tabelas de base.

Por exemplo:

  • Se os dados na tabela dinâmica não demorarem mais de 5 minutos, especifique 5 minutes.

  • Se os dados na tabela dinâmica não demorarem mais de 5 horas, especifique 5 hours.

O valor mínimo é de 1 minuto. Se uma tabela dinâmica A depender de outra tabela dinâmica B, o atraso mínimo de A deverá ser maior ou igual ao atraso de B.

DOWNSTREAM

Especifica que a tabela dinâmica deve ser atualizada se qualquer tabela dinâmica posterior a ela for atualizada.

WAREHOUSE = warehouse_name

Especifica o nome do warehouse que fornece os recursos de computação para atualizar a tabela dinâmica.

A função de proprietário da tabela dinâmica deve ter o privilégio USAGE neste warehouse.

DATA_RETENTION_TIME_IN_DAYS = integer

O parâmetro ao nível de objeto que modifica o período de retenção da tabela dinâmica para Time Travel. Para obter mais detalhes, consulte Compreensão e uso do Time Travel e Como trabalhar com tabelas temporárias e transitórias.

Para uma descrição detalhada deste parâmetro e mais informações sobre parâmetros de objeto, consulte Parâmetros.

Valores:

  • Standard Edition: 0 ou 1

  • Enterprise Edition:

    • 0 a 90 para tabelas dinâmicas permanentes

    • 0 ou 1 para tabelas dinâmicas transitórias

Nota

Um valor de 0 desabilita efetivamente um Time Travel para a tabela dinâmica.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

O parâmetro de objeto que especifica o número máximo de dias que o Snowflake pode estender o período de retenção de dados para evitar que os fluxos na tabela dinâmica fiquem desatualizados.

Para uma descrição detalhada deste parâmetro, consulte MAX_DATA_EXTENSION_TIME_IN_DAYS.

DEFAULT_DDL_COLLATION = 'collation_specification'

Define uma especificação de agrupamento padrão para quaisquer novas colunas adicionadas à tabela dinâmica.

Definir este parâmetro não altera a especificação de agrupamento de nenhuma coluna existente.

Para obter mais informações, consulte DEFAULT_DDL_COLLATION.

UNSET ...

Especifica uma ou mais propriedades/parâmetros para remover a definição para a tabela dinâmica, o que os redefine de volta aos seus padrões:

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • DEFAULT_DDL_COLLATION

Ações de clustering (clusteringAction)

CLUSTER BY ( expr [ , expr , ... ] )

Especifica (ou modifica) uma ou mais colunas de tabela ou expressões de coluna como a chave de clustering da tabela dinâmica. No caso dessas colunas/expressões, o Clustering automático mantém o clustering. Antes de especificar uma chave de clustering para uma tabela dinâmica, você deve entender as micropartições. Para obter mais informações, consulte Explicação das estruturas de tabela do Snowflake.

Observe o seguinte ao usar chaves de clustering com tabelas dinâmicas:

  • As definições das colunas são necessárias e devem ser explicitamente especificadas na instrução.

  • As chaves de clustering não são destinadas ou recomendadas para todas as tabelas; elas normalmente são vantajosas para tabelas muito grandes (por exemplo, com vários terabytes).

SUSPEND | RESUME RECLUSTER

Habilita ou desabilita Clustering automático para a tabela dinâmica.

DROP CLUSTERING KEY

Descarta a chave de clustering para a tabela dinâmica.

Para obter mais informações sobre chaves de clustering e reclustering, consulte Explicação das estruturas de tabela do Snowflake.

Ações de comentário de tabela (tableCommentAction)

ALTER | MODIFY [ ( ] ` . [ COLUMN ] <col1_name> COMMENT '<string>' . , [ COLUMN ] <col1_name> UNSET COMMENT . [ , ... ] . [ ) ]

Altera um comentário ou substitui o comentário existente para uma coluna na tabela dinâmica.

SET | UNSET COMMENT = '<string_literal>'

Adiciona um comentário ou substitui o comentário existente para a tabela dinâmica.

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.

ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])

Adiciona uma política de acesso a linhas à tabela dinâmica.

Pelo menos um nome de coluna deve ser especificado. Colunas adicionais podem ser especificadas com uma vírgula que separa cada nome de coluna.

DROP ROW ACCESS POLICY policy_name

Remove uma política de acesso a linhas da tabela dinâmica.

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 dinâmica e adiciona uma política de acesso a linhas à mesma tabela dinâmica em uma única instrução SQL.

DROP ALL ROW ACCESS POLICIES

Remove todas as associações de política de acesso a linhas da tabela dinâmica.

{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )

Especifica os argumentos a serem passados para a política de mascaramento condicional.

A primeira coluna na lista especifica os dados a serem mascarados ou tokenizados com base nas condições da política e deve corresponder à coluna à qual a política de mascaramento é aplicada.

As colunas adicionais especificam quais dados avaliar para mascaramento ou tokenização em cada linha do resultado de consulta ao selecionar 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 DYNAMIC 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.

Ações de otimização de pesquisa (searchOptimizationAction)

ADD SEARCH OPTIMIZATION

Adiciona otimização de pesquisa para toda a tabela dinâmica ou, se você especificar a cláusula opcional ON, para colunas específicas.

A otimização de pesquisa pode ser de cara manutenção, especialmente se os dados na tabela mudam com frequência. Para obter mais informações, consulte Estimativa e gerenciamento de custos de otimização de pesquisa.

ON search_method_with_target [, search_method_with_target ... ]

Especifica que você deseja configurar a otimização de pesquisa para colunas ou campos VARIANT específicos (em vez de toda a tabela dinâmica).

Para search_method_with_target, use uma expressão com a seguinte sintaxe:

<search_method>(<target> [, ...])
Copy

Onde:

  • search_method especifica um dos seguintes métodos que otimiza as consultas para um determinado tipo de predicado:

  • target especifica a coluna, campo VARIANT ou um asterisco (*).

    Dependendo do valor de search_method, você pode especificar uma coluna ou campo VARIANT de um dos seguintes tipos:

    • GEO: Colunas de tipo de dados GEOGRAPHY.

    • SUBSTRING: Colunas de tipo de dados de cadeia de caracteres ou VARIANT, incluindo caminhos para campos em VARIANTs. Especifique caminhos para campos conforme descrito em EQUALITY; pesquisas em campos aninhados são melhoradas da mesma maneira.

    • EQUALITY: Colunas de tipos de dados numéricos, de cadeia de caracteres, binários e VARIANT, incluindo caminhos para campos em colunas VARIANT.

      Para especificar um campo VARIANT, use a notação de ponto ou colchete. Por exemplo:

      • my_column:my_field_name.my_nested_field_name

      • my_column['my_field_name']['my_nested_field_name']

      Você também pode usar um caminho delimitado por dois pontos para o campo. Por exemplo:

      • my_column:my_field_name:my_nested_field_name

      Quando você especifica um campo VARIANT, a configuração se aplica a todos os campos aninhados sob esse campo.

      Por exemplo, se você especificar ON EQUALITY(src:a.b):

      • Esta configuração pode melhorar consultas on src:a.b e em quaisquer campos aninhados (por exemplo, src:a.b.c, src:a.b.c.d etc.).

      • Esta configuração afeta apenas consultas que usam o prefixo src:a.b (por exemplo, src:a, src:z etc.).

Para especificar todas as colunas aplicáveis na tabela como alvos, use um asterisco (*).

Observe que você não pode especificar um asterisco e nomes de colunas específicos para um determinado método de pesquisa. Entretanto, você pode especificar um asterisco em diferentes métodos de busca.

Por exemplo, você pode especificar as seguintes expressões:

ON SUBSTRING(*)
ON EQUALITY(*), SUBSTRING(*), GEO(*)
Copy

Não é possível especificar as seguintes expressões:

ON EQUALITY(*, c1)
ON EQUALITY(c1, *)
ON EQUALITY(v1:path, *)
ON EQUALITY(c1), EQUALITY(*)
Copy

Para especificar mais de um método de busca em um alvo, use uma vírgula para separar cada método seguinte do alvo:

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Copy

Se você executar o comando ALTER DYNAMIC TABLE … ADD SEARCH OPTIMIZATION ON … várias vezes na mesma tabela, cada comando seguinte será adicionado à configuração existente para a tabela. Por exemplo, suponha que você execute os seguintes comandos:

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2);
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
Copy

Isso adiciona predicados de igualdade para as colunas c1, c2, c3 e c4 à configuração da tabela. Isso é equivalente a executar o comando:

ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Copy

Para exemplos, consulte Habilitação da otimização de pesquisa para colunas específicas.

DROP SEARCH OPTIMIZATION

Remove a otimização de pesquisa para toda a tabela dinâmica ou, se você especificar a cláusula opcional ON, de colunas específicas.

Aplicam-se as seguintes restrições:

  • Se uma tabela dinâmica tiver a propriedade de otimização de pesquisa, então remover e desfazer a exclusão da tabela dinâmica preserva a propriedade de otimização de pesquisa.

  • Remover a propriedade de otimização de pesquisa de uma tabela dinâmica e depois adicioná-la novamente incorre no mesmo custo de adicioná-la pela primeira vez.

ON search_method_with_target | column_name | expression_id [, ... ]

Especifica que você deseja descartar a configuração de otimização de pesquisa para campos VARIANT ou colunas específicas (em vez de descartar a otimização de pesquisa para toda a tabela dinâmica).

Para identificar a configuração da coluna a ser removida, especifique uma das seguintes opções:

  • Para search_method_with_target, especifique um método para otimizar consultas para um ou mais alvos específicos, que podem ser colunas ou campos VARIANT. Use a sintaxe descrita anteriormente.

  • Para column_name, especifique o nome da coluna configurada para otimização de pesquisa. Especificar o nome da coluna remove todas as expressões para a coluna, incluindo expressões que utilizam campos VARIANT na coluna.

  • Para expression_id, especifique a ID para uma expressão listada na saída do comando DESCRIBE SEARCH OPTIMIZATION.

É possível especificar qualquer combinação de métodos de pesquisa com destinos, nomes de coluna e IDs de expressão usando uma vírgula entre os itens.

Para exemplos, consulte Descarte da otimização de pesquisa para colunas específicas.

Notas de uso

  • Para alterar uma tabela dinâmica, você deve estar usando uma função que tenha o privilégio OPERATE naquela tabela dinâmica. Para informações gerais, consulte Privilégios para visualizar os metadados de uma tabela dinâmica.

  • Não é possível fazer alterações na política de mascaramento depois de criar a tabela dinâmica.

  • Se você quiser atualizar uma tabela dinâmica existente e precisar ver sua definição atual, chame a função GET_DDL.

  • É possível usar funções de métricas de dados com tabelas dinâmicas executando um comando ALTER TABLE. Para obter mais informações, consulte Como trabalhar com funções de métricas de dados.

  • Você não pode usar IDENTIFIER() para especificar o nome da tabela dinâmica a ser alterada. Por exemplo, a seguinte instrução não é compatível:

    ALTER DYNAMIC TABLE IDENTIFIER(product) SUSPEND;
    
    Copy
  • 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

Alterar o tempo de atraso de destino de uma tabela dinâmica chamada product para 1 hora:

ALTER DYNAMIC TABLE product SET
  TARGET_LAG = '1 hour';
Copy

Especificar o atraso de destino downstream para uma tabela dinâmica para uma tabela dinâmica chamada product:

ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
Copy

Suspender a tabela dinâmica product:

ALTER DYNAMIC TABLE product SUSPEND;
Copy

Retomar a tabela dinâmica product:

ALTER DYNAMIC TABLE product RESUME;
Copy

Renomear a tabela dinâmica product:

ALTER DYNAMIC TABLE product RENAME TO updated_product;
Copy

Trocar a tabela dinâmica product por new-product:

ALTER DYNAMIC TABLE product SWAP WITH new_product;
Copy

Alterar a chave de clustering para uma tabela:

ALTER DYNAMIC TABLE product CLUSTER BY (date);
Copy

Remover clustering de uma tabela:

ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;
Copy