ALTER TABLE ADD PARTITION - Amazon Athena

ALTER TABLE ADD PARTITION

Cria uma ou mais colunas de partição para a tabela. Cada partição consiste em uma ou mais combinações de nome/valor de coluna distintas. Um diretório de dados à parte é criado para cada combinação especificada, o que pode melhorar a performance da consulta em algumas circunstâncias. As colunas particionadas não existem dentro da própria tabela de dados. Dessa forma, se usar o nome de uma coluna com o mesmo nome de uma coluna na própria tabela, você receberá um erro. Para ter mais informações, consulte Particionar dados.

No Athena, uma tabela e suas partições devem usar os mesmos formatos de dados, mas os esquemas podem ser diferentes. Para ter mais informações, consulte Atualizar tabelas com partições.

Para obter informações sobre as permissões no nível do recurso necessárias nas políticas do IAM (incluindo glue:CreatePartition), consulte Permissões da API do AWS Glue: referência de ações e recursos e Acesso granular a bancos de dados e tabelas no AWS Glue Data Catalog. Para obter informações sobre solução de problemas de permissões ao usar o Athena, consulte a seção Permissões do tópico Solucionar problemas no Athena.

Resumo

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

Parâmetros

Ao adicionar uma partição, você especifica um ou mais pares de nome/valor de coluna para a partição e o caminho do Amazon S3 onde residem os arquivos de dados dessa partição.

[IF NOT EXISTS]

Suprimirá o erro se uma partição com a mesma definição já existir.

PARTITION (partition_col_name = partition_col_value [,...])

Cria uma partição com as combinações de nome/valor de coluna que você especificar. Coloque partition_col_value entre caracteres de string somente se o tipo de dados da coluna for uma string.

[LOCATION 'location']

Especifica o diretório no qual armazenar a partição definida pela instrução anterior. A cláusula LOCATION é opcional quando os dados usam particionamento no estilo Hive (pk1=v1/pk2=v2/pk3=v3). Com o particionamento no estilo Hive, o URI completo do Amazon S3 é estruturado automaticamente com base na localização da tabela, nos nomes das chaves de partição e nos valores de chave de partição. Para ter mais informações, consulte Particionar dados.

Considerações

O Amazon Athena não impõe um limite específico ao número de partições que você pode adicionar em uma única instrução DDL ALTER TABLE ADD PARTITION. No entanto, se você precisar adicionar um número significativo de partições, considere dividir a operação em lotes menores para evitar possíveis problemas de desempenho. O exemplo a seguir usa comandos sucessivos para adicionar partições individualmente e usa IF NOT EXISTS para evitar a adição de duplicatas.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')

Ao trabalhar com partições no Athena, lembre-se dos seguintes pontos:

  • Embora o Athena ofereça suporte a consulta a tabelas do AWS Glue com 10 milhões de partições, o Athena não pode ler mais de 1 milhão de partições em uma única varredura.

  • Para otimizar suas consultas e reduzir o número de partições verificadas, considere estratégias como remoção de partições ou uso de índices de partição.

Para considerações adicionais sobre como trabalhar com partições no Athena, consulte Particionar dados.

Exemplos

O exemplo a seguir adiciona uma única partição a uma tabela para dados particionados no estilo Hive.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');

O exemplo a seguir adiciona múltiplas partições a uma tabela para dados particionados no estilo Hive.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') PARTITION (dt = '2016-06-01', country = 'IN');

Quando a tabela não serve para dados particionados no estilo Hive, a cláusula LOCATION é obrigatória e deve ser o URI completo do Amazon S3 para o prefixo que contém os dados da partição.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';

Para ignorar erros quando a partição já existe, use a cláusula IF NOT EXISTS, como no exemplo a seguir.

ALTER TABLE orders ADD IF NOT EXISTS PARTITION (dt = '2016-05-14', country = 'IN');

Arquivos de zero byte no formato _$folder$

Se você executar uma instrução ALTER TABLE ADD PARTITION e especificar erroneamente uma partição que já existe e uma localização incorreta do Amazon S3, serão criados arquivos de espaço reservado de zero byte do formato partition_value_$folder$ no Amazon S3. Você precisa remover esses arquivos manualmente.

Para evitar que isso aconteça, use a sintaxe ADD IF NOT EXISTS na instrução ALTER TABLE ADD PARTITION, como no exemplo a seguir.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]