

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Alteração de definições de tabela
<a name="iceberg-alter-table"></a>

As instruções `ALTER TABLE` são usadas para alterar as definições de tabela, incluindo esquema, especificações de partição e propriedades. Você pode usar essas instruções DDL para gerenciar suas tabelas do Iceberg diretamente por meio do Amazon Redshift.

Todas as instruções `ALTER TABLE` oferecem suporte ao uso de referências externas de esquema ou referências de notação em três partes para tabelas do Iceberg. Nos exemplos de sintaxe abaixo, `{{iceberg_table}}` pode ser qualquer um dos seguintes:

```
-- External schema notation:
{{<external_schema>}}.{{<table_name>}}

-- Three-part notation for S3 table buckets:
"{{<table_bucket_name>}}@s3tablescatalog".{{<database_name>}}.{{<table_name>}}

-- Three-part notation for the awsdatacatalog root catalog:
awsdatacatalog.{{<database_name>}}.{{<table_name>}}
```

Para obter mais informações, consulte [Fazer referência a tabelas do Iceberg no Amazon Redshift](referencing-iceberg-tables.md).

Considere o seguinte ao usar instruções `ALTER TABLE`:
+ No momento, as instruções `ALTER TABLE` oferecem suporte apenas para tabelas do Iceberg v2.
+ Todas as instruções `ALTER TABLE` são operações somente de metadados.
+ As instruções `ALTER TABLE` não oferecem suporte a tabelas com colunas de tipo complexo.

**Contents**
+ [ALTER TABLE RENAME COLUMN](#iceberg-alter-table-rename-column)
+ [ALTER TABLE ADD/DROP COLUMN](#iceberg-alter-table-add-drop-column)
+ [ALTER TABLE ALTER COLUMN](#iceberg-alter-table-alter-column)
+ [ALTER TABLE SET TABLE PROPERTIES](#iceberg-alter-table-set-properties)
+ [ALTER TABLE ADD, DROP e REPLACE PARTITION FIELD](#iceberg-alter-table-partition-field)

## ALTER TABLE RENAME COLUMN
<a name="iceberg-alter-table-rename-column"></a>

```
ALTER TABLE {{iceberg_table}}
RENAME [COLUMN] {{col_name}} TO {{new_name}};
```

`ALTER TABLE RENAME COLUMN` renomeia uma coluna existente. `{{col_name}}` pode ser uma coluna de partição ou uma coluna não particionada. Após a renomeação, o tipo de dados da coluna e a especificação da partição não mudam.

**nota**  
`ALTER TABLE RENAME COLUMN` não é compatível com tabelas do AWS Lake Formation registradas.

## ALTER TABLE ADD/DROP COLUMN
<a name="iceberg-alter-table-add-drop-column"></a>

```
ALTER TABLE {{iceberg_table}}
ADD [COLUMN] {{col_name}} {{col_type}};
```

```
ALTER TABLE {{iceberg_table}}
DROP [COLUMN] {{col_name}};
```

`ADD COLUMN` adiciona uma coluna a uma tabela do Iceberg existente. Você pode usar qualquer tipo de dados compatível com as gravações do Iceberg do Amazon Redshift. Para obter mais informações, consulte [Tipos de dados compatíveis com tabelas do Apache IcebergTipos de dados compatíveis](querying-iceberg-supported-data-types.md).

`ADD COLUMN` é uma operação somente de metadados. Os valores das colunas recém-adicionadas nas linhas existentes são `NULL`.

`DROP COLUMN` descarta uma coluna de uma tabela do Iceberg existente. Para tabelas particionadas, você não pode descartar uma coluna que pertença à especificação de partição atual. Você deve primeiro remover o campo de partição que envolve a coluna antes de descartá-la. Para obter mais informações, consulte [ALTER TABLE ADD, DROP e REPLACE PARTITION FIELD](#iceberg-alter-table-partition-field).

## ALTER TABLE ALTER COLUMN
<a name="iceberg-alter-table-alter-column"></a>

```
ALTER TABLE {{iceberg_table}}
    ALTER COLUMN {{column_name}} TYPE {{updated_data_type}};
```

`ALTER TABLE ALTER COLUMN` altera o tipo de dados de uma coluna existente. Somente a ampliação de tipo é permitida, não a redução. Como os dados não são regravados após `ALTER`, reduzir os tipos de dados pode causar estouro ao consumir os dados de tabela existentes. As seguintes ampliações de tipo são permitidas de acordo com a especificação do Iceberg:

```
int → bigint
float → double
decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
```

No Amazon Redshift, os tipos de dados podem ter aliases. Por exemplo, números inteiros de 4 bytes usam o nome do tipo `int` ou `int4`. Desde que sejam mapeados para inteiros de 4 bytes nos tipos Iceberg, a ampliação do tipo para inteiros de 8 bytes é permitida.

Por exemplo, uma tabela do Iceberg é criada usando tipos inteiros de 4 bytes:

```
CREATE TABLE {{iceberg_table}} (cint int) USING ICEBERG LOCATION 's3://{{your-bucket-name}}/prefix/';
```

Ela pode ser ampliada por esta instrução `ALTER`:

```
ALTER TABLE {{iceberg_table}} ALTER COLUMN cint TYPE int8;
```

Para obter a lista completa de mapeamentos de tipos de dados entre os tipos do Amazon Redshift e os tipos Iceberg, consulte [Tipos de dados compatíveis com tabelas do Apache IcebergTipos de dados compatíveis](querying-iceberg-supported-data-types.md).

Não há suporte para ampliar o tipo de coluna que pertence à especificação de partição existente.

## ALTER TABLE SET TABLE PROPERTIES
<a name="iceberg-alter-table-set-properties"></a>

```
ALTER TABLE {{iceberg_table}}
SET TABLE PROPERTIES (
 'compression_type' = '{{compression_value}}');
```

Essa instrução permite que você substitua a propriedade padrão da tabela. Atualmente, a única propriedade de tabela permitida para essa instrução é `compression_type`. Você pode substituí-la para usar um tipo de compactação diferente para os arquivos Parquet da tabela do Iceberg. Os dados inseridos após `ALTER` usam o novo tipo de compactação.

Os valores possíveis para `compression_type` são `brotli`, `gzip`, `snappy`, `uncompressed` e `zstd`.

## ALTER TABLE ADD, DROP e REPLACE PARTITION FIELD
<a name="iceberg-alter-table-partition-field"></a>

```
ALTER TABLE {{iceberg_table}}
    ADD PARTITION FIELD {{column_name}} | {{transform_function}};
```

```
ALTER TABLE {{iceberg_table}}
    DROP PARTITION FIELD {{column_name}} | {{transform_function}};
```

```
ALTER TABLE {{iceberg_table}}
    REPLACE PARTITION FIELD {{column_name}} | {{transform_function}}
        WITH {{column_name}} | {{transform_function}};
```

As instruções `[ADD | DROP | REPLACE] PARTITION FIELD` permitem que você altere a especificação existente da partição da tabela, dando suporte à evolução da partição por meio do Amazon Redshift.

As instruções `ALTER` para especificação de partição alteram apenas os metadados da tabela e não reparticionam os dados de tabela existentes. Depois de `ALTER`, os novos dados inseridos na tabela seguem a especificação de partição recém-definida.

Considere as seguintes limitações para essas instruções:
+ Ao definir um novo campo de partição por meio de `ADD` ou `REPLACE ... WITH ...`, o novo campo não pode incluir uma coluna que já faça parte de outros campos de partição. Essa é a mesma limitação de quando você define a especificação de partição inicial em `CREATE TABLE`. Para obter mais informações, consulte [CRIAR TABELA](iceberg-writes-sql-syntax.md#iceberg-writes-create-table).

  Por exemplo, quando você tem uma tabela:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY year(ship_date) USING ICEBERG ...;
  ```

  O seguinte falha porque `ship_date` já faz parte de um campo de partição existente:

  ```
  ALTER TABLE {{iceberg_table}} ADD PARTITION FIELD bucket(128, ship_date);
  ```
+ Ao adicionar um novo campo de partição, o campo recém-adicionado sempre é tratado como o último nível de partição da tabela. Por exemplo:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY year(ship_date) USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} ADD PARTITION FIELD bucket(256, item_id);
  ```

  A especificação da partição de tabela é a mesma que:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ```
+ Ao descartar um campo de partição, ele não se limita ao último nível de partição. Você pode eliminar qualquer campo de partição existente. Por exemplo:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} DROP PARTITION FIELD year(ship_date);
  ```

  Depois dessa instrução `ALTER`, a tabela é particionada somente por `bucket(256, item_id)`.
+ Ao chamar `REPLACE PARTITION FIELD ... WITH ...`, o campo de partição a ser substituído pode ser qualquer campo na especificação e não está limitado ao último campo. Por exemplo:

  ```
  CREATE TABLE {{iceberg_table}} ... PARTITIONED BY (year(ship_date), bucket(256, item_id))
      USING ICEBERG ...;
  ALTER TABLE {{iceberg_table}} REPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);
  ```

  Depois dessa instrução `ALTER`, a partição da tabela se torna `(month(ship_date), bucket(256, item_id))`.
+ A transformação `void` não é suportada em instruções de partição `ALTER`.