

 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/). 

# Comandos SQL
<a name="iceberg-writes-sql-syntax"></a>

As tabelas do Apache Iceberg no Amazon Redshift oferecem uma forma poderosa de gerenciar grandes conjuntos de dados analíticos em seu data lake. Essas tabelas aceitam transações ACID, evolução de esquemas e recursos de viagem no tempo, mantendo a alta performance das workloads de analytics. Usando tabelas do Apache Iceberg, você pode organizar e particionar seus dados com eficiência, controlar formatos de arquivo e compactação e integrar-se perfeitamente a outros serviços da AWS. 

É possível criar tabelas do Iceberg particionadas e não particionadas usando comandos `CREATE TABLE ... USING ICEBERG` e `CREATE TABLE ... USING ICEBERG AS SELECT`. Você pode fazer referência a tabelas do Iceberg usando a notação de esquema externo (`external_schema.table_name`) ou a notação em três partes (`"catalog_name".database_name.table_name`). Os exemplos nesta seção demonstram os dois métodos.

Depois de criar uma tabela, você pode adicionar dados usando os comandos `INSERT` padrão. Lembre-se de que, embora o Amazon Redshift funcione com muitos tipos de dados do Iceberg, talvez seja necessário converter alguns formatos de dados ao inserir informações. 

Você pode visualizar as tabelas do Iceberg usando o comando `SHOW TABLES`. Se quiser remover uma tabela do AWS Glue Data Catalog, você poderá usar o comando `DROP TABLE`. Observe que isso só remove o registro da tabela. Os dados reais permanecerão armazenados até que você os exclua separadamente.

Todas as outras instruções SQL, como `DELETE`, `UPDATE`, `MERGE` e `ALTER TABLE`, ainda não são aceitas nas tabelas do Iceberg.

As seções a seguir demonstram a sintaxe SQL para criar, inserir e gerenciar tabelas do Iceberg no Amazon Redshift.

**Contents**
+ [CRIAR TABELA](#iceberg-writes-create-table)
+ [CRIAR TABELA COMO SELEÇÃO](#iceberg-writes-create-table-as-select)
+ [SHOW TABLE](#iceberg-writes-show-table)
+ [INSERT INTO](#iceberg-writes-insert-into)
+ [DESCARTAR TABELA](#iceberg-writes-drop-table)

## CRIAR TABELA
<a name="iceberg-writes-create-table"></a>

```
CREATE TABLE [IF NOT EXISTS] <external_schema>.<table_name> (
  column_name data_type [, ...]
)
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression_value>')]
```

Você também pode usar a notação em três partes para buckets de tabelas do S3:

```
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> (
  column_name data_type [, ...]
)
USING ICEBERG
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression_value>')]
```

Observe que `<external_schema>` deve ser um nome de esquema externo existente no qual a tabela externa será criada. Para acessar mais informações sobre como criar e gerenciar esquemas externos, consulte [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) na documentação do Amazon Redshift.

A cláusula `LOCATION` define a localização da tabela do Iceberg recém-criada. Para tabelas do Amazon S3, `LOCATION` não pode ser especificado, pois a localização da tabela é determinada pelo catálogo de tabelas do Amazon S3 (`s3tablescatalog`). 

Em todos os outros casos, `LOCATION` é obrigatório e deve ser um local vazio, o que significa que não há objetos existentes do Amazon S3 compartilhando esse mesmo bucket e prefixo. Observe que a região do bucket do Amazon S3 deve estar na mesma região que o cluster do Amazon Redshift. 

No entanto, AWS fornece um método para replicar dados de tabelas do Iceberg armazenadas em um AWS Glue Data Catalog em uma Região da AWS para outra Região da AWS, o que permite replicar a gravação em uma região diferente. Para acessar mais informações, consulte [Replicar seus dados entre Regiões da AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/best-practices-workloads.html#workloads-replication).

`PARTITIONED BY` define a partição de tabelas do Iceberg. O Amazon Redshift comporta todas as transformações de partição do Iceberg v2, exceto `void`. Veja a lista de transformações aceitas:
+ **identity**
+ **bucket[N]**
+ **truncate[W]**
+ **ano**
+ **mês**
+ **dia**
+ **hora**

Para acessar as definições completas dessas transformações e os tipos de dados compatíveis, consulte [Transformações de partição](https://iceberg.apache.org/spec/#partition-transforms) na documentação do Apache Iceberg.

`PARTITIONED BY` aceita particionamento em vários níveis. Por exemplo, é possível executar o seguinte comando:

```
CREATE TABLE ...
USING ICEBERG
LOCATION ...
PARTITIONED BY (bucket(16, id), year(ship_date));
```

No entanto, o Amazon Redshift não aceita o uso de uma única coluna em mais de uma transformação. Por exemplo, a seguinte sintaxe não é aceita:

```
CREATE TABLE ...
USING ICEBERG
LOCATION ...
PARTITIONED BY (bucket(16, ship_date), year(ship_date));
```

A cláusula `TABLE PROPERTIES` define as propriedades extras da tabela do Iceberg. A única propriedade de tabela que comportamos é `compression_type` que define a compactação padrão de arquivos de dados do Parquet. Se isso não for especificado, `snappy` será usado como codec de compactação. Os valores possíveis para `compression_type` são `zstd`, `brotli`, `gzip`, `snappy` e `uncompressed`.

**nota**  
`CREATE TABLE ... LIKE ...` não é aceito em tabelas do Iceberg. As tabelas do Iceberg também não aceitam restrições de coluna e atributos de coluna, como a tabela RMS.

Como alternativa, você pode criar e preencher uma tabela do Iceberg em uma única operação usando `CREATE TABLE AS SELECT`:

## CRIAR TABELA COMO SELEÇÃO
<a name="iceberg-writes-create-table-as-select"></a>

```
CREATE TABLE <external_schema>.<table_name> [(
  column_name[, ...]
)]
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression-value>')]
AS
SELECT query
```

Você também pode usar a notação em três partes para criar tabelas em catálogos montados automaticamente:

```
CREATE TABLE "<catalog_name>".<database_name>.<table_name> [(
  column_name[, ...]
)]
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression-value>')]
AS
SELECT query
```

Isso é semelhante à instrução `CREATE TABLE`, exceto que `CREATE` é seguida por uma instrução `SELECT` para preencher a tabela com os resultados da consulta `SELECT`.

A cláusula `CREATE TABLE` aqui não permite mais que você especifique os tipos de dados, pois os tipos de dados da coluna serão decididos pela consulta `SELECT`.

Se a consulta `SELECT` falhar por algum motivo, essa consulta falhará, e a tabela do Iceberg não será criada.

Você pode visualizar a estrutura de suas tabelas do Iceberg usando `SHOW TABLE`:

## SHOW TABLE
<a name="iceberg-writes-show-table"></a>

```
SHOW TABLE <external_schema>.<table_name>
```

Também é possível usar notação em três partes com catálogos montados automaticamente:

```
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
```

`SHOW TABLE` exibe a instrução `CREATE TABLE` para a tabela do Iceberg. O comando mostrará os resultados apropriados com base no tipo da tabela. Veja um exemplo da saída `SHOW TABLE` da tabela do Iceberg:

```
CREATE TABLE my_schema.items (id int, price decimal(5, 2))
USING ICEBERG
LOCATION 's3://my_s3_bucket/items/'
PARTITIONED BY (bucket(16, id))
TABLE PROPERTIES ('compression_type'='snappy')
```

**nota**  
Para tabelas do Amazon S3, como a localização da tabela é gerenciada pelo catálogo de tabelas do Amazon S3, a cláusula `LOCATION` será omitida nos resultados de `SHOW TABLE`.

Depois de criar tabelas, é possível adicionar dados usando `INSERT INTO`:

## INSERT INTO
<a name="iceberg-writes-insert-into"></a>

```
INSERT INTO <external_schema>.<table_name> [(column_name [, ...])] VALUES (...)
INSERT INTO <external_schema>.<table_name> [(column_name [, ...])] (SELECT query)

-- Using three-part notation for S3 table buckets:
INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> [(column_name [, ...])] VALUES (...)
INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> [(column_name [, ...])] (SELECT query)
```

Você pode `INSERT INTO` a tabela do Iceberg existente usando a sintaxe acima. Se a cláusula `VALUES` for usada, você fornecerá os valores das colunas listadas por `column_name`, ou de todas as colunas, se a parte `column_name` for omitida.

Quando os dados são inseridos na tabela particionada, novas linhas são distribuídas de acordo com a especificação de partição predefinida. Se, por algum motivo, a consulta `SELECT` falhar, a consulta falhará, e nenhum dado será inserido na tabela do Iceberg.

É possível `INSERT INTO` uma tabela do Iceberg que não tenha sido criada pelo Amazon Redshift. No entanto, existem algumas limitações:
+ A tabela deve ser uma tabela do Iceberg v2.
+ A tabela deve usar o Parquet como formato de dados padrão.
+ A tabela não deve ter a compactação de metadados definida como True.
+ A tabela não deve habilitar Write-Audit-Publish (WAP).

Para remover uma tabela do Iceberg do catálogo, use o comando `DROP TABLE`:

## DESCARTAR TABELA
<a name="iceberg-writes-drop-table"></a>

```
DROP TABLE <external_schema>.<table_name>
```

Também é possível usar notação em três partes com catálogos montados automaticamente:

```
DROP TABLE "<catalog_name>.<database_name>.<table_name>
```

Eliminar uma tabela do Iceberg é uma operação somente para metadados. É removida a entrada da tabela do AWS Glue Data Catalog e um catálogo de tabelas do Amazon S3, se for uma tabela do Amazon S3. O Amazon Redshift não limpa nem exclui nenhum arquivo de dados ou arquivos de metadados existentes na localização da tabela. Você pode usar recursos no AWS Glue e em tabelas do Amazon S3 para remover arquivos órfãos. Para AWS Glue, consulte [Excluir arquivos órfãos](https://docs.aws.amazon.com/glue/latest/dg/orphan-file-deletion.html). Para tabelas do Amazon S3, consulte [Manutenção de tabelas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).