Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Como posso usar a projeção de partição para criar tabelas do CloudTrail para consultas do Athena?
Quando uso o Amazon Athena para consultar meus dados do AWS CloudTrail, as consultas demoram muito para serem executadas ou acabam atingindo o tempo limite.
Resolução
Os logs do CloudTrail podem aumentar de tamanho com o tempo, mesmo se você particionar a tabela do CloudTrail para reduzir o runtime das consultas. Consultas em uma tabela altamente particionada têm um tempo de planejamento alto e não são concluídas rapidamente.
Para resolver o problema de tempo limite, use uma projeção de partição para criar manualmente uma tabela do CloudTrail. Isso permite que o Athena calcule dinamicamente o valor das tabelas do CloudTrail, o que reduz o runtime da consulta. Com a projeção de partições, você não precisa gerenciar partições, pois os valores e as localizações das partições são calculados a partir da configuração.
Para criar uma tabela do CloudTrail particionada por data e hora com projeção de partição, consulte Criar a tabela de logs do CloudTrail no Athena usando a projeção de partições.
Para criar uma tabela do CloudTrail para várias contas particionadas por ano, mês e dia com a projeção de partição, use um comando semelhante ao seguinte:
CREATE EXTERNAL TABLE ctrail_pp_ymd (eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>>>, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< ARN:STRING, accountId:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING ) PARTITIONED BY (account string, region string, year string, month string, day string) ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://doc_example_bucket/AWSLogs/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2015,2021', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
Certifique-se de substituir as seguintes variáveis na consulta anterior:
- ctrail_pp_ymd pelo nome da tabela do CloudTrail.
- doc_example_bucket pelo nome do bucket do Amazon Simple Storage Service (Amazon S3) em que você deseja criar a tabela do CloudTrail.
- 1111222233334444 and 5555666677778888 pelos IDs das contas para as quais você deseja criar a tabela do CloudTrail.
- us-east-1,us-east-2,us-west-2 pela região da AWS para a qual você deseja criar a tabela do CloudTrail
- Atributos e propriedades da tabela com base no seu caso de uso.
- Intervalos de projeção com base no seu caso de uso. Por exemplo, se os dados do CloudTrail estiverem disponíveis apenas a partir do ano 2018, substitua o intervalo de projeção para a coluna de partição ano por '2018,2021'.
Para criar uma tabela do CloudTrail para várias contas na mesma organização, use um comando semelhante ao seguinte:
CREATE EXTERNAL TABLE ctrail_pp_ymd_org (eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>>>, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< ARN:STRING, accountId:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING ) PARTITIONED BY (account string, region string, year string, month string, day string) ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://doc_example_bucket/AWSLogs/doc_example_orgID/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.day.type'='integer', 'projection.day.range'='01,31', 'projection.day.digits'='2', 'projection.month.type'='integer', 'projection.month.range'='01,12', 'projection.month.digits'='2', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-east-2,us-west-2', 'projection.year.type'='integer', 'projection.year.range'='2010,2100', 'projection.account.type'='enum', 'projection.account.values'='111122223334444,5555666677778888', 'storage.location.template'='s3://doc_example_bucket/AWSLogs/doc_example_orgID/${account}/CloudTrail/${region}/${year}/${month}/${day}' )
Observação: se precisar consultar os dados do CloudTrail antes do ano 2010, atualize o intervalo de anos na propriedade projection.year.range.
Certifique-se de substituir as seguintes variáveis na consulta anterior:
- ctrail_pp_ymd_org pelo nome da tabela do CloudTrail.
- doc_example_bucket pelo nome do bucket do Amazon S3 em que você deseja criar a tabela do CloudTrail.
- doc_example_orgID pelo ID da sua organização.
- 1111222233334444 e 5555666677778888 pelos IDs das contas para as quais você deseja criar a tabela do CloudTrail
- us-east-1, us-east-2 e us-west-2 pelas regiões nas quais você deseja criar a tabela do CloudTrail.
- Atributos e propriedades da tabela com base no seu caso de uso.
- Intervalos de projeção com base no seu caso de uso. Por exemplo, se os dados do CloudTrail estiverem disponíveis apenas a partir do ano 2018, substitua o intervalo de projeção para a coluna de partição ano por '2018,2021'.
Ao executar suas consultas, certifique-se de incluir condições restritivas nas colunas de partição nas suas consultas. Isso permite que o Athena verifique menos dados e reduza o tempo do processo de consulta.
Por exemplo, você pode executar um comando semelhante ao seguinte para descobrir qual usuário fez a solicitação GetObject para o bucket do S3. A tabela nesta consulta usa o formato de partição de ano, mês e dia.
Observação: certifique-se de ter o log de eventos ativado para o Amazon S3 no CloudTrail.
SELECT useridentity.arn, eventtime FROM "ctrail_pp_ymd"where eventname = 'GetObject' and year = '2021' and month = '05' and region = 'us-east-1' and cast(json_extract(requestparameters, '$.bucketName')as varchar) ='doc_example_bucket'
Certifique-se de substituir as seguintes variáveis na consulta anterior:
- ctrail_pp_ymd pelo nome da tabela do CloudTrail.
- doc_example_bucket pelo nome do bucket do S3 em que você deseja criar a tabela do CloudTrail.
- Condições restritivas com base no seu caso de uso.
Se você receber problemas de tempo limite, consulte Como solucionar problemas de tempo limite ao consultar dados do CloudTrail usando o Athena?
Para obter mais informações, consulte a Consultar os logs do AWS CloudTrail e Como posso criar e usar tabelas particionadas no Amazon Athena?
Informações relacionadas

Conteúdo relevante
- feita há 3 meses
- feita há 2 meses
- feita há 15 dias
- AWS OFICIALAtualizada há 4 anos