Como posso criar e usar tabelas particionadas no Amazon Athena?

5 minuto de leitura
0

Quero criar tabelas particionadas no Amazon Athena e usá-las para melhorar minhas consultas.

Breve descrição

Ao particionar suas tabelas do Athena, você pode restringir a quantidade de dados verificados por cada consulta, melhorando assim a performance e reduzindo os custos. O particionamento divide sua tabela em partes e mantém os dados relacionados juntos com base nos valores das colunas. Partições funcionam como colunas virtuais e ajudam a reduzir a quantidade de dados verificados por consulta.

Considere o seguinte ao criar uma tabela e particionar os dados:

  • Você deve armazenar seus dados em buckets do Amazon Simple Storage Service (Amazon S3) como uma partição.
  • Inclua as colunas de particionamento e a localização raiz dos dados particionados ao criar a tabela.
  • Escolha a abordagem apropriada para carregar as partições no Catálogo de Dados do AWS Glue. A tabela fará referência ao Catálogo de Dados quando você executa suas consultas.
  • Use a projeção de partição para dados altamente particionados no Amazon S3.

Resolução

Aqui estão algumas coisas que você deve ter em mente ao criar uma tabela com partições.

Armazenar no Amazon S3

Os dados devem ser particionados e armazenados no Amazon S3. Os dados particionados podem estar em um dos seguintes formatos:

  • Formato de estilo Hive (exemplo: s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    Observação: o caminho inclui os nomes das chaves de partição e seus valores (Exemplo: year=2021)
  • Formato de estilo não Hive (exemplo: s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

Incluir informações de particionamento ao criar a tabela

A instrução CREATE TABLE deve incluir os detalhes do particionamento. Use PARTITIONED BY para definir as colunas da partição e LOCATION para especificar a localização raiz dos dados particionados. Execute uma consulta semelhante à seguinte:

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

Substitua o seguinte na consulta:

  • doc-example-table pelo nome da tabela que você está criando
  • doc-example-bucket pelo nome do bucket do S3 em que você armazena sua tabela
  • example-folder pelo nome da sua pasta do S3
  • first, last e username com os nomes das colunas
  • year, month e day com os nomes das colunas de partição

Carregar partições no Catálogo de Dados com uma abordagem apropriada para seu caso de uso

Depois de criar a tabela, adicione as partições ao Catálogo de Dados. Você pode fazer isso usando uma das seguintes abordagens:

  • Use a consulta MSCK REPAIR TABLE para dados de formato no estilo Hive: O comando MSCK REPAIR TABLE verifica um sistema de arquivos, como o Amazon S3, em busca de partições compatíveis com o Hive. O comando as compara às partições que já estão presentes na tabela e adiciona as novas partições ao Catálogo de Dados. Execute um comando semelhante ao seguinte:
    Observação: essa abordagem não é a prática recomendada se você tiver mais do que algumas milhares de partições. Suas consultas de DDL poderão enfrentar problemas de tempo limite. Para mais informações, consulte Por que minha consulta MSCK REPAIR TABLE não adiciona partições ao Catálogo de Dados do AWS Glue?
MSCK REPAIR TABLE doc-example-table
  • Use a consulta ALTER TABLE ADD PARTITION para dados de formato no estilo Hive e não Hive: O comando ALTER TABLE ADD PARTITION adiciona uma ou mais partições ao Catálogo de Dados. No comando, especifique os pares de nome e valor da coluna de partição junto com o caminho do Amazon S3 em que os arquivos de dados dessa partição estão armazenados. Você pode adicionar uma partição ou um lote de partições por consulta executando comandos semelhantes aos seguintes:
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • Use o crawler do AWS Glue para dados de formato no estilo Hive e não Hive: Você pode usar o crawler do Glue para inferir automaticamente o esquema da tabela do seu conjunto de dados, criar a tabela e, em seguida, adicionar as partições ao Catálogo de Dados. Ou, você pode usar o crawler para adicionar somente partições a uma tabela criada manualmente com a instrução CREATE TABLE. Para usar o crawler a fim de adicionar partições, ao definir o crawler, especifique uma ou mais tabelas existentes do Catálogo de Dados como a origem do rastreamento em vez de especificar o armazenamentos de dados. O crawler rastreia os armazenamentos de dados especificados pelas tabelas do Catálogo de Dados. Nenhuma tabela nova é criada. Em vez disso, as tabelas criadas manualmente são atualizadas, e novas partições são adicionadas. Para mais informações, consulte Definir opções de configuração do crawler.
  • **Use a projeção de partição para dados altamente particionados no Amazon S3:**Quando você tem dados altamente particionados no Amazon S3, adicionar partições ao Catálogo de Dados pode ser impraticável e demorado. As consultas em uma tabela altamente particionada não são concluídas rapidamente. Nesses casos, você pode usar o atributo de projeção de partições para acelerar o processamento de consultas de tabelas altamente particionadas e automatizar o gerenciamento de partições. Na projeção de partições, o Athena calcula valores e locais de partições a partir da configuração, em vez de ler de um repositório, como o Catálogo de Dados do AWS Glue. Isso significa que não há necessidade de adicionar partições ao Catálogo de Dados com projeção de partição. Como as operações na memória geralmente são mais rápidas do que as remotas, a projeção de partições pode reduzir o tempo de execução de consultas em tabelas altamente particionadas. Atualmente, o atributo de projeção de partição funciona com valores enumerados, números inteiros, datas ou tipos de coluna de partição injetada. Para obter mais informações, consulte Projeção de partições com o Amazon Athena.

Informações relacionadas

Por que não recebo nenhum log quando consulto minha tabela do Amazon Athena?

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos