CREATE TABLE AS - Amazon Athena

CREATE TABLE AS

Cria uma tabela preenchida com os resultados de uma consulta SELECT. Para criar uma tabela vazia, use CREATE TABLE. CREATE TABLE AS combina uma instrução DDL CREATE TABLE com uma instrução DML SELECT e, portanto, tecnicamente contém DDL e DML. Observe que, embora CREATE TABLE AS esteja agrupado aqui com outras instruções DDL, as consultas CTAS no Athena são tratadas como DML para fins de cotas de serviço. Para obter informações sobre as cotas de serviço do Athena, consulte Service Quotas.

nota

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.

Para obter outras informações sobre CREATE TABLE AS que não fazem parte do escopo deste tópico de referência, consulte Criar uma tabela com base em resultados de consultas (CTAS).

Resumo

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

Em que:

COM ( property_name = expression [, ...] )

Uma lista de propriedades opcionais da tabela CTAS, algumas das quais são específicas do formato de armazenamento de dados. Consulte Propriedades da tabela CTAS.

consulta

A consulta SELECT que é usada para criar uma tabela.

Importante

Se você planeja criar uma consulta com partições, especifique os nomes das colunas particionadas por último na lista de colunas na SELECT instrução.

[ WITH [ NO ] DATA ]

Se WITH NO DATA for usado, uma tabela vazia com o mesmo esquema da tabela original será criada.

nota

Para incluir cabeçalhos de coluna na saída do resultado da consulta, você pode usar uma consulta SELECT simples em vez de uma consulta CTAS. Você pode recuperar os resultados no local dos resultados da consulta ou baixá-los diretamente usando o console do Athena. Para ter mais informações, consulte Trabalhar com resultados de consultas e consultas recentes.

Propriedades da tabela CTAS

Cada tabela CTAS no Athena tem uma lista de propriedades opcionais que você especifica usando WITH (property_name = expression [, ...] ). Para obter mais informações sobre como usar esses parâmetros, consulte Exemplos de consultas CTAS.

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

Opcional. O padrão é HIVE. Especifica o tipo de tabela da tabela resultante.

Exemplo:

WITH (table_type ='ICEBERG')
external_location = [location]
nota

Como as tabelas do Iceberg não são externas, essa propriedade não se aplicará a elas. Para definir o local raiz de uma tabela do Iceberg em uma instrução CTAS, use a propriedade location, que será descrita posteriormente nesta seção.

Opcional. O local no qual o Athena salvará sua consulta CTAS no Amazon S3.

Exemplo:

WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')

O Athena não usa o mesmo caminho duas vezes para os resultados das consultas. Se você especificar o local manualmente, verifique se o local especificado no Amazon S3 não contém dados. O Athena nunca tenta excluir os dados. Para usar o mesmo local novamente, exclua os dados manualmente. Caso contrário, a consulta CTAS falhará.

Se você executar uma consulta CTAS que especifica um external_location em um grupo de trabalho que impõe um local para os resultados de consultas, a consulta falhará com uma mensagem de erro. Para ver o local dos resultados de consultas especificado para o grupo de trabalho, consulte os detalhes do grupo de trabalho.

Se o grupo de trabalho substituir a configuração de local dos resultados das consultas do lado do cliente, o Athena criará sua tabela no seguinte local:

s3://amzn-s3-demo-bucket/tables/query-id/

Se você não usar a propriedade external_location para especificar um local, e o grupo de trabalho não substituir as configurações do lado do cliente, o Athena usará a configuração do lado do cliente de local dos resultados das consultas para criar sua tabela no seguinte local:

s3://amzn-s3-demo-bucket/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

Opcional. Indica se a tabela corresponde a uma tabela externa. O padrão é true. Para tabelas do Iceberg, deve ser definido como “false” (falso).

Exemplo:

WITH (is_external = false)
location = [location]

Obrigatório para tabelas do Iceberg. Especifica o local raiz da tabela do Iceberg que será criada a partir dos resultados da consulta.

Exemplo:

WITH (location ='s3://amzn-s3-demo-bucket/tables/iceberg_table/')
field_delimiter = [delimiter]

Opcionais e específicos para formatos de armazenamento físico de dados com base em texto. O delimitador de campo de caractere único para arquivos em CSV, TSV e de texto. Por exemplo, WITH (field_delimiter = ','). Atualmente, os delimitadores de campo de vários caracteres não são permitidos em consultas CTAS. Se você não especificar um delimitador do campo, \001 será usado por padrão.

format = [storage_format]

O formato de armazenamento dos resultados de consultas CTAS, como ORC, PARQUET, AVRO, JSON, ION ou TEXTFILE. Para tabelas do Iceberg, os formatos permitidos são ORC, PARQUET e AVRO. Se for omitido, PARQUET é usado por padrão. O nome deste parâmetro, format, deve estar listado em minúsculas, ou sua consulta CTAS falhará.

Exemplo:

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
nota

Essa propriedade não se aplica para tabelas do Iceberg. Para tabelas do Iceberg, use o particionamento com transformação de bucket.

Uma lista matriz de buckets para dados do bucket. Se omitida, o Athena não armazenará os dados dessa consulta em bucket.

bucket_count = [int]
nota

Essa propriedade não se aplica para tabelas do Iceberg. Para tabelas do Iceberg, use o particionamento com transformação de bucket.

O número de buckets para armazenar seus dados em um bucket. Se omitido, o Athena não armazenará os dados em bucket. Exemplo:

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
nota

Essa propriedade não se aplica para tabelas do Iceberg. Para usar transformações de partição para tabelas do Iceberg, use a propriedade partitioning, que será descrita posteriormente nesta seção.

Opcional. Uma lista matriz de colunas pela qual a tabela CTAS será particionada. Verifique se os nomes das colunas particionadas estão listados por último na lista de colunas da instrução SELECT.

partitioning = ARRAY[partition_transform, ...]

Opcional. Especifica o particionamento da tabela do Iceberg que será criada. O Iceberg é compatível com uma ampla variedade de transformações e evoluções de partições. As transformações de partição estão resumidas na tabela a seguir.

Transformação Descrição
year(ts) Cria uma partição para cada ano. O valor da partição corresponde a diferença em números inteiros, em anos, entre ts e 1.º de janeiro de 1970.
month(ts) Cria uma partição para cada mês de cada ano. O valor da partição corresponde a diferença em números inteiros, em meses, entre ts e 1.º de janeiro de 1970.
day(ts) Cria uma partição para cada dia de cada ano. O valor da partição corresponde a diferença em números inteiros, em dias, entre ts e 1.º de janeiro de 1970.
hour(ts) Cria uma partição para cada hora de cada dia. O valor da partição corresponde a um carimbo de data/hora com os minutos e segundos definidos como zero.
bucket(x, nbuckets) Realiza o hash dos dados em um número especificado de buckets. O valor da partição corresponde a um hash em números inteiros de x, com um valor entre 0 e nbuckets - 1 incluso.
truncate(s, nchars) Transforma o valor da partição nos primeiros caracteres nchars de s.

Exemplo:

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

Opcional. Configuração específica de otimização de dados. Arquivos menores que o valor especificado são incluídos para otimização. O padrão é 0,75 vezes o valor de write_target_data_file_size_bytes. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte Otimizar tabelas do Iceberg.

Exemplo:

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

Opcional. Configuração específica de otimização de dados. Arquivos maiores que o valor especificado são incluídos para otimização. O padrão é 1,8 vezes o valor de write_target_data_file_size_bytes. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte Otimizar tabelas do Iceberg.

Exemplo:

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

Opcional. Configuração específica de otimização de dados. Se houver menos arquivos de dados que exigem otimização do que o limite fornecido, os arquivos não serão regravados. Isso permite acumular mais arquivos de dados para produzir arquivos mais próximos do tamanho de destino e ignorar a computação desnecessária para gerar economia de custos. O padrão é 5. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte Otimizar tabelas do Iceberg.

Exemplo:

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

Opcional. Configuração específica de otimização de dados. Se houver menos arquivos de exclusão associados a um arquivo de dados do que o limite, o arquivo de dados não será regravado. Isso permite acumular mais arquivos de exclusão para cada arquivo de dados a fim de gerar economia de custos. O padrão é 2. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte Otimizar tabelas do Iceberg.

Exemplo:

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

Opcional. Configuração específica para vácuo. O número mínimo de snapshots mais recentes a serem retidos. O padrão é um. Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte VACUUM.

nota

A propriedade vacuum_min_snapshots_to_keep requer a versão 3 do mecanismo do Athena.

Exemplo:

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

Opcional. Configuração específica para vácuo. Um período, em segundos, que representa o tempo pelo qual os snapshots serão retidos. O padrão é 432 mil (5 dias). Essa propriedade se aplica apenas a tabelas do Iceberg. Para ter mais informações, consulte VACUUM.

nota

A propriedade vacuum_max_snapshot_age_seconds requer a versão 3 do mecanismo do Athena.

Exemplo:

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

O tipo de compactação a ser usado para qualquer formato de armazenamento que permita que a compactação seja especificada. O valor compression_format especifica a compactação a ser usada quando os dados são gravados na tabela. Você pode especificar a compactação para os formatos de arquivo TEXTFILE, JSON, PARQUET e ORC.

Por exemplo, se a propriedade format especificar PARQUET como o formato de armazenamento, o valor para write_compression especificará o formato de compactação para Parquet. Nesse caso, especificar um valor para write_compression é equivalente a especificar um valor para parquet_compression.

Por exemplo, se a propriedade format especificar ORC como o formato de armazenamento, o valor para write_compression especificará o formato de compactação para ORC. Nesse caso, especificar um valor para write_compression é equivalente a especificar um valor para orc_compression.

Não é possível especificar várias propriedades da tabela de formato de compactação na mesma consulta CTAS. Por exemplo, não é possível especificar write_compression e parquet_compression na mesma consulta. O mesmo se aplica a write_compression e orc_compression. Para obter mais informações sobre os tipos de compactação suportados para cada formato de arquivo, consulte Usar compactação no Athena.

orc_compression = [compression_format]

O tipo de compactação a ser usado para o formato de arquivo ORC quando dados ORC são gravados na tabela. Por exemplo, WITH (orc_compression = 'ZLIB'). As partes dentro do arquivo ORC (exceto o ORC Postscript) são compactadas usando a compactação que você especificar. Se não especificada, a compactação ZLIB será usada por padrão para ORC.

nota

Para consistência, recomendamos que você use a propriedade write_compression em vez de orc_compression. Use a propriedade format para especificar o formato de armazenamento como ORC e, em seguida, use a propriedade write_compression para especificar o formato de compactação que ORC usará.

parquet_compression = [compression_format]

O tipo de compactação a ser usado para o formato de arquivo Parquet quando os dados do Parquet são gravados na tabela. Por exemplo, WITH (parquet_compression = 'SNAPPY'). Essa compactação é aplicada a blocos de colunas em arquivos Parquet. Se não especificada, a compactação GZIP será usada por padrão para Parquet.

nota

Para consistência, recomendamos que você use a propriedade write_compression em vez de parquet_compression. Use a propriedade format para especificar o formato de armazenamento como PARQUET e, em seguida, use a propriedade write_compression para especificar o formato de compactação que PARQUET usará.

compression_level = [compression_level]

O nível de compressão a ser usado. Essa propriedade se aplica apenas à compressão ZSTD. Os valores possíveis são de 1 a 22. O valor padrão é 3. Para ter mais informações, consulte Usar níveis de compactação ZSTD.

Exemplos

Para obter exemplos de consultas CTAS, consulte os seguintes recursos.