使用手动分区在 Athena 中为 CloudTrail 日志创建表 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用手动分区在 Athena 中为 CloudTrail 日志创建表

可以在 Athena 控制台中为 CloudTrail 日志文件手动创建表,然后在 Athena 中运行查询。

使用 Athena 控制台为 CloudTrail 跟踪记录创建 Athena 表
  1. 将以下 DDL 语句复制并粘贴到 Athena 控制台查询编辑器中。

    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, eventCategory 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/CloudTrail/';
    注意

    建议使用示例中所示的 org.apache.hive.hcatalog.data.JsonSerDe。虽然存在 com.amazon.emr.hive.serde.CloudTrailSerde,但目前还无法处理一些较新的 CloudTrail 字段。

  2. (可选)删除表格中所有非必填字段。如果您只需要读取一组特定的列,则您的表定义可以排除其他列。

  3. 修改 s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/ 以指向包含您的日志数据的 Amazon S3 存储桶。

  4. 验证字段是否正确列出。有关 CloudTrail 记录中的完整字段列表的更多信息,请参阅 CloudTrail 记录内容

    步骤 1 中的示例 CREATE TABLE 语句使用 Hive JSON SerDe。在该示例中,字段 requestparametersresponseelementsadditionaleventdata 作为查询中的 STRING 类型列出,但在 JSON 中使用 STRUCT 数据类型。因此,要将数据移出这些字段,请使用 JSON_EXTRACT 函数。有关更多信息,请参阅 从字符串中提取 JSON 数据。为了提高性能,此示例按 Amazon Web Services 区域、年份、月份和日期对数据进行分区。

  5. 在 Athena 控制台中运行 CREATE TABLE 语句。

  6. 使用 ALTER TABLE ADD PARTITION 命令加载分区,以便您可以查询它们,如以下示例所示。

    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/'