CREATE OR ALTER <objeto>¶
Os comandos CREATE OR ALTER são comandos DDL que combinam a funcionalidade do comando CREATE e do comando ALTER, permitindo que você defina um objeto usando a sintaxe compatível com o comando CREATE <objeto> com as limitações do comando ALTER <objeto>.
Os comandos mantêm dados e associações, o que significa que os dados e outros estados, associações de tags e políticas anexadas e concessões de privilégios no objeto são preservados. No entanto, algumas transformações de objetos podem resultar em dados descartados. Por exemplo, se uma instrução CREATE OR ALTER TABLE resultar em uma coluna descartada, todos os dados contidos na coluna serão descartados.
Os comandos CREATE OR ALTER permitem que você aplique atualizações incrementais a objetos usando um método declarativo e idempotente. Quando executada, uma instrução CREATE OR ALTER resulta em um desses resultados:
Se o objeto não existir, ele será criado de acordo com a definição.
Se o objeto existir, ele será alterado para o objeto definido na instrução.
Se o objeto já corresponder à definição, ele permanecerá inalterado.
O comando preserva dados, estados, associações de tags, políticas anexadas e concessões de privilégios no objeto. No entanto, algumas transformações podem resultar em dados descartados. Por exemplo, se uma instrução CREATE OR ALTER TABLE descartar uma coluna, os dados dessa coluna serão perdidos, mas ainda poderão ser recuperados com o Time Travel.
- Consulte também:
Sintaxe¶
CREATE OR ALTER <object_type> <object_name>
[ <object_type_properties> ]
[ <object_type_params> ]
[ COMMENT = '<string_literal>' ]
Em que object_type_properties
e object_type_params
são específicos para o tipo de objeto.
Para sintaxes, notas de uso e exemplos específicos, consulte:
Objetos de conta:
Objetos de banco de dados:
Notas de uso geral¶
Governança de dados: os comandos CREATE OR ALTER não oferecem suporte a alterações na governança de dados. As tags ou políticas existentes não são afetadas pelas instruções de CREATE OR ALTER e permanecem inalteradas.
Remoção de propriedades e parâmetros de objeto: se uma propriedade ou parâmetro definido anteriormente estiver ausente na definição do objeto modificado, ele será removido.
Se você remover a definição de um valor explícito do parâmetro, o parâmetro será redefinido para o valor padrão. Se o parâmetro for definido em um objeto que contém o objeto de destino, o objeto de destino herdará o valor definido no objeto que o contém. Caso contrário, o valor do parâmetro para o objeto é redefinido para o valor padrão.
Atomicidade: o comando CREATE OR ALTER TABLE atualmente não garante a atomicidade. Isto significa que se uma instrução CREATE OR ALTER TABLE falhar durante a execução, é possível que um subconjunto de alterações tenha sido aplicado à tabela. Se houver possibilidade de alterações parciais, a mensagem de erro, na maioria dos casos, inclui o seguinte texto:
CREATE OR ALTER execution failed. Partial updates may have been applied.
Por exemplo, se a instrução estiver tentando remover a coluna
A
e adicionar uma nova colunaB
em uma tabela e a instrução for abortada, é possível que a colunaA
tenha sido descartado mas a colunaB
não foi adicionada.Nota
Se as alterações forem aplicadas parcialmente, a tabela resultante ainda estará em um estado válido e você poderá usar instruções ALTER TABLE para completar o conjunto original de alterações.
Para se recuperar de atualizações parciais, a Snowflake recomenda os seguintes mecanismos de recuperação:
Reparo adiantado
Execute a instrução CREATE OR ALTER TABLE novamente. Se as instruções forem bem-sucedidas na segunda tentativa, o estado alvo será alcançado.
Investigue a mensagem de erro. Se possível, corrija o erro e execute novamente a instrução CREATE OR ALTER TABLE.
Reversão
Se não for possível fazer o reparo aidantado, a Snowflake recomenda reverter manualmente as alterações parciais:
Investigue o estado da tabela usando os comandos DESCRIBE TABLE e SHOW TABLES. Determine quais alterações parciais foram aplicadas, se houver.
Se alguma alteração parcial foi aplicada, execute as instrução ALTER TABLE apropriadas para transformar a tabela de volta ao seu estado original.
Nota
Em alguns casos, talvez não seja possível desfazer alterações parciais. Para obter mais informações, consulte as ações com e sem suporte para modificar as propriedades da coluna no tópico ALTER TABLE … ALTER COLUMN.
Se precisar de ajuda para se recuperar de uma atualização parcial, entre em contato com o suporte Snowflake.
Limitações¶
As limitações específicas do comando CREATE OR ALTER <objeto> dependem do objeto. Alguns exemplos de limitações são os seguintes:
Os comandos CREATE OR ALTER TABLE não oferecem suporte à otimização de pesquisa porque ela não faz parte da sintaxe de CREATE TABLE.
Você não pode alterar o tipo de dados de uma coluna em uma tabela para um tipo de dados incompatível.
Você não pode alterar a definição de uma exibição existente.
É necessário suspender uma tarefa antes de alterá-la.
A sintaxe variante para criar objetos (por exemplo, CREATE OR ALTER TABLE … AS SELECT) não é compatível no momento.
Para conhecer as limitações de um objeto específico, consulte o tópico de referência do objeto.
Exemplo de caso de uso¶
Se você tiver scripts SQL que configuram objetos Snowflake para um aplicativo, poderá usar instruções CREATE OR ALTER <objeto> em seus scripts para facilitar a implementação de alterações em ambientes de desenvolvimento, teste e produção. À medida que o aplicativo evolui, é possível fazer modificações no script.
Ao usar uma instrução CREATE OR ALTER <objeto>, é possível executar o script em um novo ambiente e, ao mesmo tempo, executá-lo novamente em um ambiente existente, o que lhe permite escrever a definição de objeto desejada uma vez e aplicá-la em todos os ambientes.