

# Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual
<a name="create-cloudtrail-table"></a>

É possível criar manualmente tabelas de arquivos de log do CloudTrail no console do Athena e executar consultas no Athena.

**Para criar uma tabela do Athena para uma trilha do CloudTrail no console do Athena**

1. Copie e cole a instrução DDL a seguir em um editor de consultas do console do Athena e modifique-a de acordo com seus requisitos. Observe que, como os arquivos de log do CloudTrail não são um rastreamento de pilha ordenada de chamadas de API públicas, os campos dos arquivos de log não aparecem em nenhuma ordem específica.

   ```
   CREATE EXTERNAL TABLE cloudtrail_logs (
   eventversion STRING,
   useridentity STRUCT<
                  type:STRING,
                  principalid:STRING,
                  arn:STRING,
                  accountid:STRING,
                  invokedby:STRING,
                  accesskeyid:STRING,
                  username:STRING,
                  onbehalfof: STRUCT<
                       userid: STRING,
                       identitystorearn: STRING>,
     sessioncontext:STRUCT<
       attributes:STRUCT<
                  mfaauthenticated:STRING,
                  creationdate:STRING>,
       sessionissuer:STRUCT<  
                  type:STRING,
                  principalid:STRING,
                  arn:STRING, 
                  accountid:STRING,
                  username:STRING>,
       ec2roledelivery:string,
       webidfederationdata: STRUCT<
                  federatedprovider: STRING,
                  attributes: map<string,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,
   vpcendpointaccountid STRING,
   eventcategory STRING,
   addendum STRUCT<
     reason:STRING,
     updatedfields:STRING,
     originalrequestid:STRING,
     originaleventid:STRING>,
   sessioncredentialfromconsole STRING,
   edgedevicedetails STRING,
   tlsdetails STRUCT<
     tlsversion:STRING,
     ciphersuite:STRING,
     clientprovidedhostheader:STRING>
   )
   PARTITIONED BY (region string, year string, month string, day string)
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/';
   ```
**nota**  
Sugerimos usar o `org.apache.hive.hcatalog.data.JsonSerDe` exibido no exemplo. Embora exista um `com.amazon.emr.hive.serde.CloudTrailSerde`, no momento ele não processa alguns dos campos mais recentes do CloudTrail. 

1. (Opcional) Remova quaisquer campos não obrigatórios para a tabela. Se for necessário ler somente um determinado conjunto de colunas, sua definição de tabela poderá excluir as outras colunas.

1. Modifique `s3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/` para apontar para o bucket do Amazon S3 que contém os dados de log que você deseja consultar. O exemplo usa um valor `LOCATION` de logs para uma determinada conta, mas você pode usar o grau de especificidade adequado ao aplicativo. Por exemplo:
   + Para analisar dados de várias contas, você pode reverter o especificador `LOCATION` para indicar todos os `AWSLogs` usando `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'`.
   + Para analisar dados de uma data, conta e região específica, use `LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.` 
   + Para analisar dados de atividade de rede em vez de eventos de gerenciamento, substitua `/CloudTrail/` na cláusula `LOCATION` por `/CloudTrail-NetworkActivity/`. 

   O uso do nível mais alto na hierarquia de objetos proporciona maior flexibilidade ao consultar usando o Athena.

1. Verifique se os campos estão listados corretamente. Para obter mais informações sobre a lista completa de campos em um registro do CloudTrail, consulte [Conteúdo do registro do CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html).

   A declaração de exemplo `CREATE TABLE` na Etapa 1 usa [Hive JSON SerDe](hive-json-serde.md). No exemplo, os campos `requestparameters`, `responseelements` e `additionaleventdata` são listados como tipo `STRING` na consulta, mas são tipos de dados `STRUCT` usados em JSON. Portanto, para obter dados desses campos, use funções `JSON_EXTRACT`. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md). Para melhorias de performance, o exemplo particiona os dados por Região da AWS, ano, mês e dia.

1. Execute a instrução `CREATE TABLE` no console do Athena.

1. Use o comando [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) a fim de carregar as partições para que você consiga consultá-las, conforme o exemplo a seguir.

   ```
   ALTER TABLE {{table_name}} ADD 
      PARTITION (region='us-east-1',
                 year='2019',
                 month='02',
                 day='01')
      LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/{{Account_ID}}/CloudTrail/{{us-east-1/2019/02/01/}}'
   ```