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, pode ser qualquer um dos seguintes:iceberg_table
-- 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 TABLEoferecem suporte apenas para tabelas do Iceberg v2. -
Todas as instruções
ALTER TABLEsão operações somente de metadados. -
As instruções
ALTER TABLEnão oferecem suporte a tabelas com colunas de tipo complexo.
Sumário
ALTER TABLE RENAME COLUMN
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMN renomeia uma coluna existente. 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.col_name
nota
ALTER TABLE RENAME COLUMN não é compatível com tabelas do AWS Lake Formation registradas.
ALTER TABLE ADD/DROP COLUMN
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [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 TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_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 TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
Ela pode ser ampliada por esta instrução ALTER:
ALTER TABLEiceberg_tableALTER 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 TABLEiceberg_tableSET 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 TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_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
ADDouREPLACE ... 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 emCREATE TABLE. Para obter mais informações, consulte CRIAR TABELA.Por exemplo, quando você tem uma tabela:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;O seguinte falha porque
ship_datejá faz parte de um campo de partição existente:ALTER TABLEiceberg_tableADD 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 TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);A especificação da partição de tabela é a mesma que:
CREATE TABLEiceberg_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 TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);Depois dessa instrução
ALTER, a tabela é particionada somente porbucket(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 TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE 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
voidnão é suportada em instruções de partiçãoALTER.