

# Considerações e limitações de consultas CTAS
<a name="ctas-considerations-limitations"></a>

As seções a seguir descrevem considerações e limitações que você deve ter em mente ao usar consultas (CTAS) `CREATE TABLE AS SELECT` no Athena.

## Aprender a sintaxe de consulta CTAS
<a name="ctas-considerations-limitations-query-syntax"></a>

A sintaxe de consulta CTAS é diferente da sintaxe de `CREATE [EXTERNAL] TABLE` usada para criar tabelas. Consulte [CREATE TABLE AS](create-table-as.md).

## A diferença entre visualizações e consultas CTAS
<a name="ctas-considerations-limitations-queries-vs-views"></a>

As consultas CTAS gravam novos dados em um local especificado no Amazon S3. As visualizações não gravam nenhum dado. 

## Especificar um local para armazenar os resultados da sua consulta CTAS
<a name="ctas-considerations-limitations-location-of-query-results"></a>

Se o seu grupo de trabalho [substituir a configuração do lado do cliente](workgroups-settings-override.md) para o local dos resultados das consultas, o Athena criará a tabela no local `s3://amzn-s3-demo-bucket/tables/<query-id>/`. Para ver o local dos resultados de consultas especificado para o grupo de trabalho, [visualize os detalhes do grupo de trabalho](viewing-details-workgroups.md).

Se seu grupo de trabalho não substituir o local dos resultados de consultas, você poderá usar a sintaxe `WITH (external_location ='s3://amzn-s3-demo-bucket/')` em sua consulta CTAS para especificar onde os resultados da consulta CTAS são armazenados. 

**nota**  
A propriedade `external_location` deve especificar um local vazio. Uma consulta CTAS verifica se o local do caminho (prefixo) no bucket está vazio e nunca substitui os dados se o local já tiver dados. Para usar o mesmo local novamente, exclua os dados no local do prefixo de chave no bucket.

Se você omitir a sintaxe de `external_location` e não usar a configuração do grupo de trabalho, o Athena usará sua [configuração do lado do cliente](query-results-specify-location-console.md) para o local dos resultados das consultas e criará a tabela no local `s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/`. 

## Localizar arquivos órfãos
<a name="ctas-considerations-limitations-locating-orphaned-files"></a>

Quando ocorre a falha de uma instrução `CTAS` ou `INSERT INTO`, é possível que arquivos de dados órfãos sejam deixados no local de destino dos dados para as consultas malsucedidas ou canceladas. Como, em alguns casos, o Athena não exclui os dados do bucket de destino da consulta, dados parciais podem ser incluídos nas consultas subsequentes. 

Para localizar arquivos órfãos para inspeção ou exclusão, é possível usar o arquivo do manifesto de dados que o Athena oferece para rastrear a lista de arquivos a serem gravados. Em alguns casos raros em que ocorre a falha abrupta de uma consulta do Athena, o arquivo do manifesto pode não estar presente. Você pode encontrar os arquivos órfãos inspecionando manualmente o local de destino do S3. Para obter mais informações, consulte [Identificar arquivos de saída de consultas](querying-finding-output-files.md#querying-identifying-output-files) e [DataManifestLocation](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecutionStatistics.html#athena-Type-QueryExecutionStatistics-DataManifestLocation). 

É altamente recomendável usar o Apache Iceberg para realizar transações atômicas de tabelas. Para obter mais informações, consulte [Consultar tabelas do Apache Iceberg](querying-iceberg.md).

## Lembre-se de que as cláusulas ORDER BY são ignoradas
<a name="ctas-considerations-limitations-order-by-ignored"></a>

Em uma consulta CTAS, o Athena ignora as cláusulas `ORDER BY` na parte `SELECT` da consulta.

Segundo a especificação SQL (ISO 9075 Parte 2), a ordenação das linhas de uma tabela especificada por uma expressão de consulta é garantida somente para a expressão de consulta que contém imediatamente a cláusula `ORDER BY`. De qualquer forma, as tabelas no SQL são inerentemente desordenadas, e a implementação das cláusulas na subconsulta `ORDER BY` faria com que a consulta tivesse uma performance ruim e não resultaria em uma saída ordenada. Assim, nas consultas CTAS do Athena, não há garantia de que a ordem especificada pela cláusula `ORDER BY` será preservada quando os dados forem gravados.

## Escolher um formato para armazenar os resultados da consulta
<a name="ctas-considerations-limitations-formats-for-query-results"></a>

É possível armazenar resultados de CTAS em `PARQUET`, `ORC`, `AVRO`, `JSON` e `TEXTFILE`. Não há suporte para delimitadores de vários caracteres no formato CTAS `TEXTFILE`. Se você não especificar um formato de armazenamento de dados, os resultados da consulta CTAS serão armazenados no Parquet por padrão. 

As consultas CTAS não exigem a especificação de um SerDe para interpretar transformações de formato. Consulte [Example: Writing query results to a different format](ctas-examples.md#ctas-example-format).

## Considerar os formatos de compactação
<a name="ctas-considerations-limitations-compression-formats"></a>

`GZIP`A compactação é usada para os resultados da consulta CTAS nos formatos JSON e TEXTFILE. Para Parquet, você pode usar `GZIP` ou `SNAPPY`, e o padrão é `GZIP`. Para ORC, você pode usar `LZ4`, `SNAPPY`, `ZLIB` ou `ZSTD`, e o padrão é `ZLIB`. Para obter exemplos de CTAS que especificam compactação, consulte [Example: Specifying data storage and compression formats](ctas-examples.md#ctas-example-compression). Para obter informações sobre compactação no Athena, consulte [Usar compactação no Athena](compression-formats.md).

## Particionamento e uso de buckets para seus resultados
<a name="ctas-considerations-limitations-partition-and-bucket-limits"></a>

Você pode particionar e armazenar em buckets os dados resultantes de uma consulta CTAS. Para especificar as propriedades da tabela de destino, inclua predicados de particionamento e bucketing no final da cláusula `WITH`. Para obter mais informações, consulte [Usar particionamento e bucketing](ctas-partitioning-and-bucketing.md) e [Example: Creating bucketed and partitioned tables](ctas-examples.md#ctas-example-bucketed).

Ao usar o CTAS para criar uma tabela particionada, o Athena tem um limite de gravação de 100 partições. Para obter informações sobre como contornar a limitação de 100 partições, consulte [Usar CTAS e INSERT INTO para resolver o limite de 100 partições](ctas-insert-into.md).

## Criptografar seus resultados
<a name="ctas-considerations-limitations-encryption"></a>

É possível criptografar os resultados da consulta CTAS no Amazon S3, semelhante à forma como você criptografa outros resultados de consulta no Athena. Para obter mais informações, consulte [Criptografar os resultados de consultas do Athena armazenados no Amazon S3](encrypting-query-results-stored-in-s3.md).

## A configuração esperada para o proprietário do buckets não se aplica a CTAS
<a name="ctas-considerations-limitations-expected-bucket-owner"></a>

Para instruções CTAS, a configuração esperada do proprietário do bucket não se aplica ao local da tabela de destino no Amazon S3. A configuração esperada do proprietário do bucket se aplica somente ao local de saída do Amazon S3 que você especificar para os resultados da consulta do Athena. Para obter mais informações, consulte [Especificar um local para resultados de consultas com uso do console do Athena](query-results-specify-location-console.md).

## Os tipos de dados de coluna são preservados
<a name="ctas-considerations-limitations-data-types"></a>

Os tipos de dados da coluna para uma consulta CTAS são os mesmos que os tipos especificados para a consulta original.