Considerações e limitações de consultas CTAS - Amazon Athena

Considerações e limitações de consultas CTAS

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 sintaxe de consulta CTAS é diferente da sintaxe de CREATE [EXTERNAL] TABLE usada para criar tabelas. Consulte CREATE TABLE AS.

A diferença entre visualizações e consultas CTAS

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

Se o seu grupo de trabalho substituir a configuração do lado do cliente 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.

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

Se uma instrução CTAS ou INSERT INTO falhar, é possível que os dados órfãos permaneçam no local dos dados. Como o Athena, em alguns casos, não realiza a exclusão dos dados ou dos dados parciais do seu bucket, você poderá ler esses dados parciais em 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. Para obter mais informações, consulte Identificar arquivos de saída de consultas e DataManifestLocation.

Lembre-se de que as cláusulas ORDER BY são ignoradas

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

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

Considerar os formatos de compactação

A compactação GZIP é 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. Para obter informações sobre compactação no Athena, consulte Usar compactação no Athena.

Particionamento e uso de buckets para seus resultados

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 ter mais informações, consulte Usar particionamento e bucketing e Example: Creating bucketed and partitioned tables.

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.

Criptografar seus resultados

É possível criptografar os resultados da consulta CTAS no Amazon S3, semelhante à forma como você criptografa outros resultados de consulta no Athena. Para ter mais informações, consulte Criptografar resultados das consultas do Athena armazenados no Amazon S3.

A configuração esperada para o proprietário do buckets não se aplica a CTAS

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 ter mais informações, consulte Especificar um local para resultados de consultas com uso do console do Athena.

Os tipos de dados de coluna são preservados

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