View a markdown version of this page

Alteração de definições de tabela - Amazon Redshift

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 .

Alteração de definições de tabela

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.

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.

ALTER TABLE RENAME COLUMN

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

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

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.

ALTER TABLE ALTER COLUMN

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

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

ALTER TABLE SET TABLE PROPERTIES

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

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.

    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.