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
ouTEXTFILE
. Para tabelas do Iceberg, os formatos permitidos sãoORC
,PARQUET
eAVRO
. 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 * FROMtable_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 enbuckets - 1
incluso.truncate(s, nchars)
Transforma o valor da partição nos primeiros caracteres nchars
des
.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 arquivoTEXTFILE
,JSON
,PARQUET
eORC
.Por exemplo, se a propriedade
format
especificarPARQUET
como o formato de armazenamento, o valor parawrite_compression
especificará o formato de compactação para Parquet. Nesse caso, especificar um valor parawrite_compression
é equivalente a especificar um valor paraparquet_compression
.Por exemplo, se a propriedade
format
especificarORC
como o formato de armazenamento, o valor parawrite_compression
especificará o formato de compactação para ORC. Nesse caso, especificar um valor parawrite_compression
é equivalente a especificar um valor paraorc_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
eparquet_compression
na mesma consulta. O mesmo se aplica awrite_compression
eorc_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 dadosORC
são gravados na tabela. Por exemplo,WITH (orc_compression = 'ZLIB')
. As partes dentro do arquivoORC
(exceto oORC
Postscript) são compactadas usando a compactação que você especificar. Se não especificada, a compactação ZLIB será usada por padrão paraORC
.nota
Para consistência, recomendamos que você use a propriedade
write_compression
em vez deorc_compression
. Use a propriedadeformat
para especificar o formato de armazenamento comoORC
e, em seguida, use a propriedadewrite_compression
para especificar o formato de compactação queORC
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 deparquet_compression
. Use a propriedadeformat
para especificar o formato de armazenamento comoPARQUET
e, em seguida, use a propriedadewrite_compression
para especificar o formato de compactação quePARQUET
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.
-
Use CTAS statements with Amazon Athena to reduce cost and improve performance
(Usar instruções CTAS com o Amazon Athena para reduzir custos e melhorar a performance) -
Usar CTAS e INSERT INTO para resolver o limite de 100 partições